Broadcom wireless

出自 Arch Linux 中文维基

這篇文章或章節的翻譯不反映原文。

原因:Last updated in 2017 (466863), out of sync with English page(在 Talk:Broadcom wireless# 中討論)

介紹[編輯 | 編輯原始碼]

博通對於其Wifi卡在 GNU/Linux 上的支持不好可謂是臭名昭著。直到最近,大部分的博通晶片要麼是完全不被支持,或者需要用戶自行修改內核。一組有限的無線晶片由不同的逆向工程提供支持(比如:brcm4xxx, b43。從 Kernel 2.6.24 開始,這些逆向工程 b43 的驅動已經被收錄。

2008年8月,博通發佈了GNU/ Linux上的 802.11 Linux STA 驅動 正式為其無線設備提供 GNU/Linux 支持。這些驅動是閉源的, 但博通承諾,在未來將以一種更加開放的方式提供支持。此外,它們不具有隱藏 ESSID 的功能。

在2010年9月,博通完全開源的硬件驅動[1]。該驅動程序brcm80211已被列入到自2.6.37之後的內核中。隨着2.6.39發佈,這些驅動程序已被重新命名為 brcmsmac brcmfmac

在寫這篇文章時,使用博通晶片組的用戶有以下三種選擇:

驅動 描述
brcmsmac/brcmfmac 開源內核驅動
b43 逆向工程內核驅動
broadcom-wl 專有的 Broadcom STA 驅動

查看你可以使用何種驅動[編輯 | 編輯原始碼]

首先,向你的終端輸入以下內容來檢測網卡的 PCI-ID:

$ lspci -vnn | grep 14e4:

然後在以下列表中檢查 b43的支持設備列表 以及 brcm80211的支持設備列表.

獲取驅動[編輯 | 編輯原始碼]

brcm80211[編輯 | 編輯原始碼]

Kernel內建了兩個開源驅動: brcmfmac 提供原生硬MAC支持, brcmsmac 提供基於mac80211的軟MAC支持。 它們應該會在啟動時自行加載。

注意:
  • brcmfmac 提供較新的晶片支持,並且支持AP模式,P2P模式,高級加密。
  • brcmsmac 僅提供對於較老晶片的支持,例如BCM4313, BCM43224, BCM43225。

b43/b43legacy[編輯 | 編輯原始碼]

b43 以及 b43legacy兩個逆向工程驅動已經被內建在Kernel中。b43支持大部分的博通無線晶片組,而b43legacy驅動僅支持早期的BCM4301以及BCM4306 rev.2 晶片組。為了避免與別的驅動造成衝突,請 blacklist 未使用的驅動。

這些驅動的運行都需要安裝閉源固件,請從AUR安裝b43-firmwareAURb43-firmware-classicAUR 或者 b43-firmware-legacyAUR[損壞的連結:package not found]

注意:
  • BCM4306 rev.3, BCM4311, BCM4312 與 b43-firmware 固件不能良好的工作。對於這些晶片組請使用 b43-firmware-classicAUR 代替。
  • BCM4331 與 b43-firmware-classic 固件不能良好的工作。 對於這些晶片組請使用 b43-firmwareAUR 代替。

broadcom-wl[編輯 | 編輯原始碼]

AUR 中有兩個版本的Broadcom STA閉源驅動:

提示:DKMS版本 broadcom-wl-dkms
  • 可以在不同的Kernel中工作 (例如 linux-ckAUR).
  • 每次安裝新的Kernel時,dkms都會重新構建驅動,如果你使用 broadcom-wl 或者其他依賴於單個Kernel版本的驅動 (例如 broadcom-wl-ckAUR), 那麼在更新Kernel或者使用新的Kernel時都有可能使驅動崩潰。

加載broadcom-wl的內核模塊[編輯 | 編輯原始碼]

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
警告: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] 在Blacklist 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
  • 兩者能同時正常工作

故障排除[編輯 | 編輯原始碼]

各種可以糾正的錯誤。

更新 Kernel 後設備無法訪問[編輯 | 編輯原始碼]

如果您使用 brcm80211 請確保沒有被 blacklisted。如果你使用 b43 驅動確保它在工作。如果你使用Broadcom STA驅動的broadcom-wl包,請重新安裝或一勞永逸地切換成broadcom-wl-dkms

使用 broadcom-wl 驅動的設備不工作/不顯示[編輯 | 編輯原始碼]

請查看dmesg是否存在報錯信息,broadcom-wl經常發生奇怪的問題,重新加載Kernel模塊或者重啟一般能解決問題

使用 broadcom-wl 驅動時接口交換[編輯 | 編輯原始碼]

使用 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確保配置被成功寫入。

不能檢測到設備 BCM43241[編輯 | 編輯原始碼]

無論是 lspci 還是 lsusb 都不能檢測到設備。這個問題目前無法解決。 請在解決後刪除此部分。

在連接到某些路由器時可能不穩定[編輯 | 編輯原始碼]

如果沒有其他的解決方法,安裝linux-lts,或者使用低版本的驅動