博通无线
本文详细介绍了如何安装和设置博通无线网络设备。
历史
博通在 GNU/Linux 上对 Wi-Fi 设备的支持历史值得关注。在其早期历史的大部分时间里,博通设备要么完全不受支持,要么需要用户修改固件。少数受支持的无线设备是通过反向工程驱动程序实现的。反向工程的 b43
驱动程序在 2.6.24 内核中引入。
2008 年 8 月,博通发布了 802.11 Linux STA 驱动程序,正式支持 GNU/Linux 上的博通无线设备。这是一个许可受限的驱动程序,并且不适用于隐藏的 ESSID,但博通承诺未来将朝着更开放的方向努力。
2010 年 9 月,博通发布了一个完全开源的驱动程序。brcm80211 驱动程序在 2.6.37 内核中引入,并在 2.6.39 内核中细分为 brcmsmac
和 brcmfmac
驱动程序。
可用的驱动程序类型有
驱动程序 | 描述 |
---|---|
brcm80211 | 内核驱动主线版本(推荐) |
b43 | 内核驱动反向工程版本 |
broadcom-wl | 博通驱动程序,许可受限 |
驱动选择
要了解计算机的博通无线网络设备上可操作的驱动程序,需要检测设备 ID 和芯片组名称。将它们与受支持的 brcm80211 和 b43 设备的驱动程序列表进行交叉引用。
$ lspci -vnn -d 14e4:
安装
brcm80211
内核包含两个内置的开源驱动程序:brcmfmac 用于原生 FullMAC,brcmsmac 用于基于 mac80211 的 SoftMAC。它们应该在启动时自动加载。
- brcmfmac 支持较新的芯片组,并支持 AP 模式、P2P 模式或硬件加密。
- brcmsmac 仅支持旧芯片组,如 BCM4313、BCM43224、BCM43225。
brcm80211 驱动程序支持的芯片可以在 [1] 中找到。
b43
内核中内置了两个反向工程的开源驱动程序:b43 和 b43legacy。b43 支持大多数较新的博通芯片组,而 b43legacy 驱动程序仅支持早期的 BCM4301 和 BCM4306 rev.2 芯片组。为了避免错误地检测到您的 Wi-Fi 卡芯片组,禁用未使用的驱动程序。
这两个驱动程序都需要非自由固件才能运行。根据芯片组安装 b43-firmwareAUR、b43-firmware-classicAUR 或 b43legacy-firmwareAUR。
- 如果不确定需要哪个固件包,请检查 dmesg 的输出并搜索 “b43”。如果您看到类似
Loading firmware b43/ucode4.fw
的消息,则需要 b43-firmwareAUR 或 b43-firmware-classicAUR。如果您看到类似Loading firmware b43legacy/ucode4.fw
的消息,则需要 b43legacy-firmwareAUR 包。 - 据观察,BCM4306 rev.3、BCM4311、BCM4312 和 BCM4318 rev.2 在使用 b43-firmware 时会遇到问题。对于这些网卡,请改用 b43-firmware-classicAUR 或 b43legacy-firmwareAUR。
- 据观察,BCM4331 在使用 b43-firmware-classic 时会遇到问题。对于此网卡,请改用 b43-firmwareAUR,或者切换到下面提到的 broadcom-wl 以获得更稳定的体验。
b43
应该会自动加载,但您可能需要显式地 在启动时加载模块。
broadcom-wl
许可受限的驱动程序有两种变体
- 常规变体:broadcom-wl
- DKMS 变体:broadcom-wl-dkms
- 是内核无关的。这意味着它支持您可能使用的不同内核(例如 linux-ckAUR)。
- 也是内核版本无关的。它将在每次内核升级或全新安装后自动重建。如果您使用 broadcom-wl 或其他内核版本相关的变体,可能会发生内核升级不时破坏无线功能,直到软件包再次同步。
- 将需要已安装内核的 linux-headers 软件包才能构建模块。这些软件包对于 DKMS 软件包是可选的,需要手动安装。
离线安装
Internet 连接是安装 broadcom-wl 驱动程序的理想方式;许多配备博通网卡的新型笔记本电脑都放弃了以太网端口,因此 USB 以太网适配器或 Android 网络共享 可能会有所帮助。如果您两者都没有,则需要在安装过程中首先安装 base-devel 软件包。然后,使用另一台连接到 Internet 的计算机从 AUR 下载 linux-headers 和驱动程序 tarball,并按该顺序安装它们。
手动
从 博通网站 为您的系统架构安装适当的驱动程序。之后,为了避免驱动程序/模块与类似模块冲突并使驱动程序可用,请执行
# rmmod b43 # rmmod ssb # modprobe wl
wl 模块应自动加载 lib80211 或 lib80211_crypt_tkip,否则必须手动加载它们。
如果此时驱动程序无法工作,您可能需要更新依赖项
# depmod -a
已知问题
以太网卡未检测到
博通无线模块与博通以太网模块存在冲突的历史。
由于 wl
(无线模块)和 tg3
(以太网模块)之间的冲突,自 broadcom-wl-dkms 6.30.223.271-27[2] 起,tg3
现在已被禁用。另请参阅 FS#70476。
这也影响了 broadcom-wl,因为它是在 broadcom-wl-dkms 的基础上构建的。
故障排除
设置 broadcom-wl 为监听模式
监听模式用于捕获空中传输的 802.11 帧。这对于诊断网络问题或测试无线网络的安全非常有用。通常,监听模式是无线渗透测试中捕获某些帧所必需的,但在您不拥有、不管理或未获得许可对其执行渗透测试的任何网络上捕获帧可能是不道德的,甚至是非法的。
要将 broadcom-wl 设置为监听模式,您必须将 1 设置为 /proc/brcm_monitor0
# echo 1 > /proc/brcm_monitor0
它将创建一个名为 prism0
的新网络接口。
要在监听模式下工作,请使用这个新创建的网络接口。
内核升级后设备不可访问
自 3.3.1 内核以来,引入了 bcma 模块。如果使用 brcm80211 驱动程序,请确保它没有被禁用。如果使用 b43 驱动程序,则应禁用它。
如果您正在使用 broadcom-wl,请在升级内核后卸载并重新安装它,或者切换到 broadcom-wl-dkms 软件包。
使用 broadcom-wl 驱动的设备无法工作/显示
确保禁用了正确的模块,有时可能需要禁用 brcm80211 驱动程序,以防在加载 wl 驱动程序之前意外检测到它们。此外,更新模块依赖项 depmod -a
,使用 ip addr
验证无线接口,内核升级将需要升级非 DKMS 软件包。
接口显示但无法连接
追加以下内核参数
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 消息的日志级别 - 请参阅 Silent boot#sysctl。
设备 BCM43241 未检测到
此设备不会通过 lspci
或 lsusb
显示;目前尚无已知的解决方案。
设备 BCM43241 EFI 变量
根据 驱动程序页面,可能需要在驱动程序正常运行之前复制 efi 变量。但是,预期路径取决于您的系统。
# dmesg | grep bcrm
... Direct firmware load for bcrm/your driver.your device failed with error -2
将 efi 变量写入引用的位置,例如在 ThinkPad 平板电脑上
$ cat /sys/firmware/efi/efivars/nvram-74b00bd9-805a-4d61-b51f-43268123d113 > /lib/firmware/brcm/brcmfmac43241b5-sdio.LENOVO-20C1002PUK.txt
连接在某些路由器上不稳定
如果其他方法无效,请安装 linux-lts,或使用之前的驱动版本。
BCM4360 (14e4:43a0) / BCM43602 (14e4:43ba) 设备无法使用 5GHz 频段
此问题似乎与信道问题有关。将无线信道更改为较低的信道号(例如 40,或者如果您的路由器显示 MHz 而不是信道号,则更改为 5200 MHz 或 5280 MHz)似乎允许连接到 5GHz 频段。如果您的路由器对 2.4GHZ 和 5GHZ 使用相同的 SSID,这可以解决无线连接不稳定或非常慢的问题。
设备间歇性工作
在某些情况下(例如使用 BCM4331 和 b43-firmwareAUR),Wi-Fi 连接间歇性工作。一种解决方法是检查网卡是否被内核硬阻塞或软阻塞,如果是,则使用 rfkill 解除阻塞。
使用 b43 的 BCM4331 的 SSH 会话冻结
已观察到 b43-firmwareAUR 驱动程序在使用 BCM4331 的 ssh 会话中挂起。安装 broadcom-wl 并移除 b43 可以解决此问题。
安装期间未找到 BRCM43430
如果您有一个通过 SDIO 连接的 brcm43430,您将无法在启动安装 ISO 后看到该设备,因为交付的镜像中缺少该设备的默认参数文件:brcmfmac43430-sdio.txt
。
要解决此问题,您必须在另一台机器上下载 brcmfmac43430-sdio.txt,并将其复制到另一个 U 盘。
启动安装 ISO 后,您需要将该文件复制到 /lib/firmware/brcm/
目录。然后按照以下步骤激活它
之后,您可以启动 iwctl,现在应该可以找到您的设备,并继续正常安装。
完成安装后,不要忘记将该文件复制到目标磁盘的相同位置。