Broadcom 无线
本文档详细介绍了如何安装和设置 Broadcom 无线网络设备。
历史
Broadcom 在其对 GNU/Linux Wi-Fi 设备的支持方面有着悠久的历史。在其早期的大部分历史中,Broadcom 设备要么完全不支持,要么需要用户进行固件调整。少数支持的无线设备是通过逆向工程的驱动程序实现的。逆向工程的 b43 驱动程序在 2.6.24 内核中引入。
2008 年 8 月,Broadcom 发布了 802.11 Linux STA 驱动程序,正式支持 GNU/Linux 上的 Broadcom 无线设备。这是一个许可受限的驱动程序,无法与隐藏的 ESSID 一起使用,但 Broadcom 承诺未来将朝着更开放的方法努力。
2010 年 9 月,Broadcom 发布了一个完全开源的驱动程序。 brcm80211 驱动程序在 2.6.37 内核中引入,并在 2.6.39 内核中细分为 brcmsmac 和 brcmfmac 驱动程序。
可用的驱动程序类型有
| 驱动程序 | 描述 |
|---|---|
| brcm80211 | 内核驱动程序主线版本 |
| b43 | 内核驱动程序逆向工程版本 |
| broadcom-wl | 具有受限许可的 Broadcom 驱动程序 |
驱动程序选择
要了解计算机的 Broadcom 无线网络设备上可用的驱动程序,需要检测 设备 ID 和芯片组名称。将它们与 brcm80211 和 b43 驱动程序支持的设备列表进行交叉引用。
在尝试其他驱动程序之前,请先检查您的设备是否支持内置内核驱动程序 brcm80211。
$ lspci -vnn -d 14e4:
安装
brcm80211
内核包含两个内置的开源驱动程序: **brcmfmac** 用于原生 FullMAC,**brcmsmac** 用于基于 mac80211 的 SoftMAC。它们应该在启动时自动加载。
- **brcmfmac** 支持较新的芯片组,并支持 AP 模式、P2P 模式或硬件加密。
- **brcmsmac** 仅支持 BCM4313、BCM43224、BCM43225 等旧芯片组。
brcm80211 驱动程序支持的芯片可在 [1] 中找到。
BCM43602 802.11ac 无线局域网 SoC
BCM43602 需要 brcmfmac.feature_disable=0x82000 内核参数,如通过 PCI 设备 ID 14e4:43ba 测试(请参阅 BBS#298025)。
b43
内核内置了两个逆向工程的开源驱动程序:**b43** 和 **b43legacy**。b43 支持大多数较新的 Broadcom 芯片组,而 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
ibt=off 内核参数 来禁用它。请注意,此安全功能负责 减轻一类漏洞利用技术。受限许可驱动程序有两种变体
- 常规变体:broadcom-wl
- DKMS 变体:broadcom-wl-dkms
- 与内核无关。这意味着它支持您可能使用的不同内核(例如 linux-mainlineAUR)。
- 在每次内核升级或安装后都会自动重新构建。
- 为了构建模块,将需要已安装内核的 linux-headers 包。这些包是 DKMS 包的可选依赖,需要手动安装。
已知问题
以太网卡未检测到
Broadcom 无线模块历史上曾与 Broadcom 以太网模块发生冲突。
由于 wl(无线模块)和 tg3(以太网模块)之间的冲突,从 broadcom-wl-dkms 6.30.223.271-27 开始,tg3 已被列入黑名单(参见 [2])。另请参阅 FS#70476。
这也影响了 broadcom-wl,因为它基于 broadcom-wl-dkms 构建。
旧版 Broadcom 驱动程序无法连接
Broadcom 芯片 BCM4360 或更低版本 **不支持** 现代安全连接方法,如 WPA3。WPA2 或其他安全方法对于某些网络连接建立握手是必要的。
故障排除
将 broadcom-wl 设置为监控模式
监控模式用于捕获空中 802.11 帧。这对于诊断网络问题或测试无线网络安全性非常有用。通常,监控模式需要捕获某些帧以进行无线渗透测试,但捕获您不拥有、管理或未经许可进行渗透测试的网络上的帧可能是不道德的,甚至是违法的。
要将 broadcom-wl 设置为监控模式,您必须将 /proc/brcm_monitor0 设置为 1。
# echo 1 > /proc/brcm_monitor0
这将创建一个名为 prism0 的新网络接口。
要在监控模式下工作,请使用新创建的网络接口。
内核升级后设备无法访问
自 3.3.1 内核起引入了 **bcma** 模块。如果使用 **brcm80211** 驱动程序,请确保它没有被 列入黑名单。如果使用 **b43** 驱动程序,则应将其列入黑名单。
如果您正在使用 broadcom-wl,请在升级内核后卸载并重新安装它,或者切换到 broadcom-wl-dkms 包。
使用 broadcom-wl 驱动程序的设备无法工作/显示
确保正确的模块被列入黑名单,有时在 **wl** 驱动程序加载之前,可能需要将 **brcm80211** 驱动程序列入黑名单以防被意外检测到。此外,更新模块依赖关系 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 消息的 loglevel - 请参阅 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 解除阻止。
BCM4331 使用 b43 时 SSH 冻结
已观察到 b43-firmwareAUR 驱动程序在 BCM4331 的 SSH 会话中挂起。安装 broadcom-wl 并卸载 b43 可以解决此问题。
安装过程中未找到 BRCM43430
如果您有一个通过 SDIO 连接的 brcm43430,在引导安装 ISO 后您将无法看到该设备,因为在提供的映像中缺少该设备的默认参数文件:brcmfmac43430-sdio.txt。
要解决此问题,您需要从另一台机器下载 brcmfmac43430-sdio.txt,并将其复制到另一个 U 盘。
启动安装 ISO 后,您需要将文件复制到 /lib/firmware/brcm/ 目录。然后按照以下步骤激活它:
之后,您可以启动 iwctl,它现在应该能找到您的设备,并按正常方式继续安装。
完成安装后,请勿忘记将文件复制到目标磁盘的同一位置。
互联网速度慢(1Mbps 或更低)
如果您使用内核驱动程序以及某些 Broadcom 笔记本电脑 Wi-Fi 卡,您可能会遇到极慢甚至无法使用的互联网速度。通过安装 #broadcom-wl 并重新启动可以解决此问题。
brcmfmac 挂起崩溃
一些用户报告使用 brcmfmac 驱动程序(特别是 MacBookPro12,1 和类似硬件上的 Broadcom 4352 芯片组)的系统在挂起后会出现 Wi-Fi 故障。症状可能包括:
- 设备挂起失败
- 挂起尝试后看不到 Wi-Fi 网络(或恢复后看不到 Wi-Fi 网络)
- 无线接口无法工作
dmesg日志显示驱动程序错误或超时
这似乎是挂起期间的竞争条件,驱动程序在电源状态更改发生之前未正确卸载。
一种变通方法是在挂起前卸载 brcmfmac 模块,并在恢复后通过 systemd 服务重新加载它。
/etc/systemd/system/brcmfmac-reload.service
[Unit] Before=sleep.target [Service] Type=oneshot ExecStart=/bin/bash -c 'sleep 2 && exec modprobe -r brcmfmac' ExecStop=/bin/modprobe brcmfmac [Install] WantedBy=sleep.target