跳转至内容

Broadcom 无线

来自 ArchWiki
(重定向自 B43)

本文档详细介绍了如何安装和设置 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 驱动程序支持的设备列表进行交叉引用。

在尝试其他驱动程序之前,请先检查您的设备是否支持内置内核驱动程序 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-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

警告 由于与 Indirect Branch Tracking 不兼容,在运行 Linux 5.18 (或更高版本) 的 第 11 代及更新的 系统上,可能会导致 内核崩溃和系统不稳定。您可以通过在 引导加载程序 中设置 ibt=off 内核参数 来禁用它。请注意,此安全功能负责 缓解一类利用技术。

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

提示 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