博通無線網卡
這篇文章詳細地介紹了如何安裝和設置博通(Broadcom)無線網卡。
博通(Broadcom)對於 GNU/Linux 的 Wi-Fi 設備支持方面有著悠久的歷史。在它最開始一段歷史的大部分時間裡,博通的設備要麼完全就不支持,要麼就得讓用戶修改固件才能用。有一些無線設備可以通過使用通過逆向工程的驅動程序來獲得支持。
2008年8月,博通官方發布了 802.11 Linux STA 驅動程序 以在 GNU/Linux 上提供無線設備的驅動程序。儘管這是一個限制許可的驅動程序,也不適用於隱藏的 ESSID,但博通承諾未來將使用更開放的方法。
2010年9月,博通發布了完全開源的無線網卡硬體驅動。這個名為 brcm80211 的驅動程序已被列入到自2.6.37之後的內核中。隨著 Linux 內核 2.6.39 發布,這些驅動程以下是可用的驅動程序列表:序已被重新命名為 brcmsmac和 brcmfmac。
一
| 驅動 | 描述 |
|---|---|
| bcrm80211 | n |
| 主線(推薦使用)版本ub43 | 逆向工程內核驅動 |
| broadcom-wl | 限制許可的 Broadcom STA 驅動 |
首先,向你的終端輸入以下內容來檢測網卡的 PCI-ID:
$ lspci -vnn | grep 14e4:
然後在以下列表中檢查 b43的支持設備列表以及 brcm80211的支持設備列表.
Kernel內建了兩個開源驅動: brcmfmac 提供原生硬MAC支持, brcmsmac 提供基於mac80211的軟MAC支持。 它們應該會在啟動時自行加載。
- brcmfmac 提供較新的晶片支持,並且支持AP模式,P2P模式,高級加密。
- brcmsmac 僅提供對於較老晶片的支持,例如BCM4313, BCM43224, BCM43225。
b43 以及 b43legacy兩個逆向工程驅動已經被內建在Kernel中。b43支持大部分的博通無線晶片組,而b43legacy驅動僅支持早期的BCM4301以及BCM4306 rev.2 晶片組。為了避免與別的驅動造成衝突,請 blacklist 未使用的驅動。
這些驅動的運行都需要安裝閉源固件,請從AUR安裝b43-firmwareAUR, b43-firmware-classicAUR 或者 b43-firmware-legacyAUR[損壞的連結:package not found] 。
- BCM4306 rev.3, BCM4311, BCM4312 與 b43-firmware 固件不能良好的工作。對於這些晶片組請使用 b43-firmware-classicAUR 代替。
- BCM4331 與 b43-firmware-classic 固件不能良好的工作。 對於這些晶片組請使用 b43-firmwareAUR 代替。
AUR 中有兩個版本的Broadcom STA閉源驅動:
- 通常的 broadcom-wl包
- 以及 DKMS 版本 broadcom-wl-dkms包
- 可以在不同的Kernel中工作 (例如 linux-ckAUR).
- 每次安裝新的Kernel時,dkms都會重新構建驅動,如果你使用 broadcom-wl包 或者其他依賴於單個Kernel版本的驅動 (例如 broadcom-wl-ckAUR), 那麼在更新Kernel或者使用新的Kernel時都有可能使驅動崩潰。
wl 模塊可能會與其他模塊衝突而無法加載。加載wl模塊之前, 請移除b43或者其他可能造成衝突的模塊:
# rmmod b43
如果 ssb 加載了,也請一併移除:
# rmmod ssb
ssb 可能導致無線界面無法被創建。加載 wl 模塊:
# modprobe wl
加載 wl 模塊的同時 lib80211 或者 lib80211_crypt_tkip 應該也會被自動加載。 使用 lsmod 來進行檢查,如果沒有,請手動加載二者之一;
# modprobe lib80211
或
# modprobe lib80211_crypt_tkip
如果你直接從博通官方網站下載驅動並安裝,你可能同時需要更新依賴模塊:
# depmod -a
如果模塊無法在啟動時加載,請將 wl (以及 lib80211/lib80211_crypt_tkip如果需要) 到 /etc/rc.conf的MODULES列:
# MODULES=(... wl...)
你也可以Blacklist掉可能衝突的模塊,在 /etc/modprobe.d/modprobe.conf中加入:
# blacklist b43 # blacklist ssb
b43 以及 ssb後可能不工作。b43的博通無線網卡驅動與b44博通有線網卡驅動可能產生衝突,因此建議您使用broadcom-wl驅動
- Put "lib80211_crypt_tkip" and "wl" at the BEFORE b44 (if you have it) position in MODULES= 在 /etc/rc.conf 模塊部分,b44(如果你需要這個驅動的話)之前加入lib80211_crypt_tkip wl
- 不要忘記把 b43 模塊加入黑名單
- 您的無線網卡設備為eth0
- 您的有線網卡設備為eth1
- 兩者能同時正常工作
各種可以糾正的錯誤。
如果您使用 brcm80211 請確保沒有被 blacklisted。如果你使用 b43 驅動確保它在工作。如果你使用Broadcom STA驅動的broadcom-wl包包,請重新安裝或一勞永逸地切換成broadcom-wl-dkms包。
請查看dmesg是否存在報錯信息,broadcom-wl經常發生奇怪的問題,重新加載Kernel模塊或者重啟一般能解決問題
使用 broadcom-wl 驅動也許會發現它們的以太網和 Wi-Fi 接口交換了。查看這裡(reverting to traditional interface names)的解決方案。
加入以下內核參數:
b43.allhwsupport=1
你可能會在啟動時接收到奇怪的報錯信息,類似於:
phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement) phy0: brcms_ops_bss_info_changed: qos enabled: false (implement) phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 1 (implement) enabled, active
一般情況下這並不影響驅動的正常工作,如果你想不想收到這些信息,可以提高printk的日誌級別。
在/etc/sysctl.d/中創建一個printk.conf或者類似的配置文件:
printk.conf
kernel.printk = 3 3 3 3
最後sysctl -p確保配置被成功寫入。
無論是 lspci 還是 lsusb 都不能檢測到設備。這個問題目前無法解決。 請在解決後刪除此部分。