Broadcom 无线

来自 ArchWiki

本文详细介绍了如何安装和设置 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 内核中细分为 brcmsmacbrcmfmac 驱动程序。

可用的驱动程序类型有

驱动程序 描述
brcm80211 内核驱动主线版本(推荐)
b43 内核驱动反向工程版本
broadcom-wl Broadcom 驱动程序,许可证受限

驱动选择

要了解计算机的 Broadcom 无线网络设备上可操作的驱动程序,需要检测设备 ID 和芯片组名称。将它们与受支持的 brcm80211b43 设备的驱动程序列表进行交叉引用。

$ lspci -vnn -d 14e4:

安装

brcm80211

内核包含两个内置的开源驱动程序:用于原生 FullMAC 的 brcmfmac 和用于基于 mac80211 的 SoftMAC 的 brcmsmac。它们应该在启动时自动加载。

注意
  • brcmfmac 支持较新的芯片组,并支持 AP 模式、P2P 模式或硬件加密。
  • brcmsmac 仅支持旧芯片组,如 BCM4313、BCM43224、BCM43225。

brcm80211 驱动程序支持的芯片可以在 [1] 中找到。

b43

两个反向工程的开源驱动程序内置于内核:b43b43legacy。b43 支持大多数较新的 Broadcom 芯片组,而 b43legacy 驱动程序仅支持早期的 BCM4301 和 BCM4306 rev.2 芯片组。为避免错误检测您的 Wi-Fi 卡芯片组,禁用未使用的驱动程序。

这两个驱动程序都需要非自由固件才能运行。根据芯片组安装 b43-firmwareAURb43-firmware-classicAURb43legacy-firmwareAUR

注意
  • 如果不确定需要哪个固件包,请检查 dmesg 的输出并搜索 "b43"。如果您看到类似 Loading firmware b43/ucode4.fw 的消息,则需要 b43-firmwareAURb43-firmware-classicAUR。如果您看到类似 Loading firmware b43legacy/ucode4.fw 的消息,则需要 b43legacy-firmwareAUR 包。
  • 已注意到 BCM4306 rev.3、BCM4311、BCM4312 和 BCM4318 rev.2 在使用 b43-firmware 时遇到问题。对于这些卡,请使用 b43-firmware-classicAURb43legacy-firmwareAUR
  • 已注意到 BCM4331 在使用 b43-firmware-classic 时遇到问题。对于此卡,请改用 b43-firmwareAUR,或切换到下面提到的 broadcom-wl 以获得更稳定的体验。

b43 应该会自动加载,但您可能需要显式地在启动时加载模块

broadcom-wl

本文或本节的事实准确性存在争议。

受限许可的驱动程序有两种变体

提示: DKMS 变体 broadcom-wl-dkms
  • 是内核无关的。这意味着它支持您可能使用的不同内核(例如 linux-ckAUR)。
  • 也是内核版本无关的。它将在每次内核升级或全新安装后自动重建。如果您使用 broadcom-wl 或其他内核版本相关的变体,可能会发生内核升级不时破坏无线网络,直到软件包再次同步为止。
  • 将需要已安装内核的 linux-headers 软件包才能构建模块。这些软件包对于 DKMS 软件包是可选的,需要手动安装。

离线安装

Internet 连接是安装 broadcom-wl 驱动程序的理想方式;许多带有 Broadcom 网卡的新型笔记本电脑都放弃了以太网端口,因此 USB 以太网适配器或 Android 网络共享 可能会有所帮助。如果您两者都没有,您将需要在安装期间首先安装 base-devel 软件包。然后,使用另一台连接到 Internet 的计算机从 AUR 下载 linux-headers 和驱动程序 tarball,并按该顺序安装它们。

手动

警告: 不建议使用此方法。未跟踪的驱动程序可能会在系统更新时变得有问题或无法使用。

Broadcom 网站为您的系统架构安装适当的驱动程序。在此之后,为避免驱动程序/模块与类似模块冲突并使驱动程序可用,请执行

# rmmod b43
# rmmod ssb
# modprobe wl

wl 模块应自动加载 lib80211lib80211_crypt_tkip,否则必须手动加载它们。

如果驱动程序此时不起作用,您可能需要更新依赖项

# depmod -a

如果需要,在启动时加载模块。建议您禁用冲突的模块。

已知问题

以太网卡未检测到

Broadcom 无线模块在与 Broadcom 以太网模块冲突方面有着悠久的历史。

由于 wl(无线模块)和 tg3(以太网模块)之间的冲突,从 broadcom-wl-dkms 6.30.223.271-27[2] 开始,tg3 现在已被禁用。另请参阅 FS#70476

这也影响了 broadcom-wl,因为它基于 broadcom-wl-dkms 构建。

故障排除

在 monitor 模式下设置 broadcom-wl

Monitor 模式用于捕获空中的 802.11 帧。这对于诊断网络问题或测试无线网络的安全性非常有用。通常,无线渗透测试需要 monitor 模式来捕获某些帧,但在您不拥有、管理或未被允许执行渗透测试的任何网络上捕获帧可能是不道德的甚至是违法的。

要在 monitor 模式下设置 broadcom-wl,您必须将 1 设置为 /proc/brcm_monitor0

# echo 1 > /proc/brcm_monitor0

它将创建一个名为 prism0 的新网络接口。

要在 monitor 模式下工作,请使用这个新创建的网络接口。

内核升级后设备无法访问

自 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 消息的日志级别 - 请参阅 静默启动#sysctl

设备 BCM43241 未检测到

此设备不会通过 lspcilsusb 显示;目前尚无已知的解决方案。

设备 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,它现在应该可以找到您的设备,并像往常一样继续安装。

完成安装后,不要忘记将文件复制到目标磁盘上的相同位置。