1. 程式人生 > >完全用Deepin Linux娛樂、工作、學習(3)-- 無線網卡及藍牙設備驅動篇

完全用Deepin Linux娛樂、工作、學習(3)-- 無線網卡及藍牙設備驅動篇

系統/運維 Linux 娛樂

1、異常說明

在前面木子已經講到了關於顯卡驅動及CPU微碼補丁更新,今天木子要講的是關於適配藍牙及無線網卡設備的驅動問題,它不僅僅適用於新驅動的安裝,也適用於驅動異常的修復。默認情況下木子的筆記本安裝Deepin Linux後是自帶驅動的,只是在折騰的過程中出現異常,所以有了需要修復驅動的過程,下面木子就簡單和大家分享一下關於無線網卡和藍牙設備驅動的那些事情。註:木子的無線網卡和藍牙設備是在同一個模塊上的。
今天發生了一件很奇怪的事情,木子的筆記本啟動後發現藍牙鼠標不可能了,查看控制中心對應的藍牙管理按鈕沒有了,讓木子很奇怪。重啟筆記本也不行,於是開始排除問題,並修復藍牙設備驅動,在使用的過程中,木子不僅僅出現過藍牙設備異常的問題,同樣也出現過無線網卡設備異常的問題,但木子都是使用相同的方法修復的,在出現異常的情況下,你會發現在控制中心會不存在藍牙或無線網卡圖標的情況。如下圖所示:

技術分享圖片

2、排錯過程

1)檢測藍牙服務

首先檢測藍牙服務是否正常啟動,檢測發現服務是正常啟動的,重啟服務無法生效。
systemctl status bluetooth
● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-04-13 14:08:38 CST; 30min ago
Docs: man:bluetoothd(8)
Main PID: 829 (bluetoothd)

Status: "Running"
Tasks: 1 (limit: 4915)
CGroup: /system.slice/bluetooth.service
└─829 /usr/lib/bluetooth/bluetoothd

2)檢測內核加載模塊

查看系統內核加載模塊,藍牙模塊是有加載的。
lsmod | grep blue
bluetooth 634880 13 btrtl,hci_uart,btintel,btqca,bnep,btbcm,btusb
ecdh_generic 24576 1 bluetooth
rfkill 28672 8 bluetooth,dell_laptop,cfg80211

crc16 16384 2 bluetooth,ext4

3)檢測軟硬開關

查看系統是否開啟軟或硬開關,關閉了藍牙模塊,rfkill是Linux內核提供的一個子接口,用於進行 Wi-Fi、 藍牙、3G和4G設備的開關控制的,結果發現根本沒有藍牙設備。
sudo rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
看這情況是沒有加載模塊成功了。於是想通過modprobe btusb加載一下模塊看是否OK,發現加載以後還是不行,卸載內核藍牙模塊rmmod bluetooth再重載藍牙模塊到內核insmod bluetooth也不行。

4)開機日誌檢測

於是開始檢索日誌信息,dmesg是用來檢測系統開機時的信息的。
dmesg | egrep -i 'blue|firm'
[ 14.374064] Bluetooth: HCI UART protocol Marvell registered
[ 14.741564] request_firmware: ath10k/pre-cal-pci-0000:02:00.0.bin
[ 14.741954] ath10k_pci 0000:02:00.0: firmware: failed to load ath10k/pre-cal-pci-0000:02:00.0.bin (-2)
[ 14.741958] ath10k_pci 0000:02:00.0: Direct firmware load for ath10k/pre-cal-pci-0000:02:00.0.bin failed with error -2
[ 14.741961] request_firmware: ath10k/cal-pci-0000:02:00.0.bin
[ 14.741970] ath10k_pci 0000:02:00.0: firmware: failed to load ath10k/cal-pci-0000:02:00.0.bin (-2)
[ 14.741972] ath10k_pci 0000:02:00.0: Direct firmware load for ath10k/cal-pci-0000:02:00.0.bin failed with error -2
[ 14.741974] request_firmware: ath10k/QCA6174/hw3.0/firmware-6.bin
[ 14.742930] ath10k_pci 0000:02:00.0: firmware: direct-loading firmware ath10k/QCA6174/hw3.0/firmware-6.bin
[ 14.743438] ath10k_pci 0000:02:00.0: firmware ver WLAN.RM.4.4-00022-QCARMSWPZ-2 api 6 features wowlan,ignore-otp crc32 4d458559
[ 14.807142] request_firmware: ath10k/QCA6174/hw3.0/board-2.bin
[ 14.807740] ath10k_pci 0000:02:00.0: firmware: direct-loading firmware ath10k/QCA6174/hw3.0/board-2.bin
[ 55.479518] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 55.479519] Bluetooth: BNEP filters: protocol multicast
[ 55.479521] Bluetooth: BNEP socket layer initialized
在日誌中木子發現了兩條錯誤信息,這兩條錯誤信息很顯然在系統啟動的時候,驅動加載就有問題了。到找了問題,解決問題就簡單了。

5)重裝驅動

重裝藍牙驅動,這裏要說明的一點是,很多筆記本都是網卡與藍牙模塊一起的,這時候如果沒有辦法看到藍牙模塊不知道是什麽型號,可以通過查看無線模塊型號,然後將整個無線模塊的驅動更換(其中就包括了藍牙模塊驅動),這樣應該就解決問題了。
#查看無線模塊型號
lspci | grep Wireless
02:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)
在這裏木子可以看到對應的型號是qca6174
#下載對應驅動

下載最新的固件並解壓縮內容:
https://codeload.github.com/kvalo/ath10k-firmware/zip/master技術分享圖片
#進入無線驅動目錄(不同的無線模塊會不一樣,但是都在/lib/firmwareh目錄下)
cd /lib/firmware/ath10k
#刪除原有驅動
rm -rf QCA6174
#復制最新驅動進去
cp -rf /home/liwenbin/Downloads/ath10k-firmware-master/QCA6174 ./
#進入對應目錄,重命名驅動模塊名稱。
cd QCA6174/hw3.0
mv firmware-4.bin_WLAN.RM.2.0-00180-QCARMSWPZ-1 firmware-4.bin
然後關機、重新開機,即可識別藍牙模塊了,這時候藍牙設備就可以正常工作了。
這時候木子們再查看對應模塊已經存在了。
0: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
通過對比木子發現,之前的藍牙模塊裏面少加載了hidp和rfcomm兩個協議。而rfcomm協議就是藍牙設備的通訊協議,hidp就是基本支持協議。
lsmod | grep blue
bluetooth 634880 48 btrtl,hidp,hci_uart,btintel,btqca,bnep,btbcm,rfcomm,btusb
ecdh_generic 24576 1 bluetooth
rfkill 28672 8 bluetooth,dell_laptop,cfg80211
crc16 16384 2 bluetooth,ext4

3、節能控制

剛剛講到一個關於rfkill的命令,其實通過這個命令可以在必要的時候關閉無線或藍牙設備,來節約設備用電,以軟關閉藍牙模塊為例:
#關閉藍牙模塊
rfkill block 0 #0為設備ID號
#檢測是否關閉
rfkill list
0: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
#開啟藍牙模塊
rfkill unblock 0
#檢測是否開啟
rfkill list
0: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no

4、寫在最後

每一臺筆記本的無線網卡或藍牙模塊的設備廠商都不一樣,但是解決問題的思路和方法是一樣的,只是驅動不同而已。木子這裏提供三家常用網卡生產廠商的驅動Broadcom、Killer、Realtek的。
Broadcom:https://github.com/winterheart/broadcom-bt-firmware
Killer:https://codeload.github.com/kvalo/ath10k-firmware/zip/master
Realtek:https://github.com/lwfinger/rtlwifi_new
同樣Broadcom驅動存放在/lib/firmware目錄下brcm中。
對於realtek會有所不同,可以將對應的驅動下載,然後執行以下命令:
make
sudo make install
sudo modprobe rtl8192de

完全用Deepin Linux娛樂、工作、學習(3)-- 無線網卡及藍牙設備驅動篇