0. 简介和背景
这个答案是基于广大Ubuntu用户的广泛研究成果,他们在与Broadcom相关的几乎所有问题上进行了合作。特别感谢chili555在Ubuntu论坛和本站上对无线设备相关问题提供的帮助,以及其他通过电子邮件、聊天、IRC等方式为测试多种最流行的Broadcom无线网卡驱动程序做出贡献的人(真的非常感谢Chili555,这家伙真懂行)。
总体而言,我们希望提供一个易于理解并涵盖大多数Broadcom网卡/驱动程序的答案。在按照本指南操作后,您需要至少使用另一台设备在Ad-Hoc模式、基础设施模式或两者中进行至少2小时(我实际上建议8小时)的无线连接测试。除了解决驱动程序未安装的问题外,还将解决以下常见问题:
- 几分钟或几个小时后连接超时
- 停止搜索其他设备(看不到任何其他设备)
- 即使AP没有密码,仍然持续要求密码
- 停止接收/发送流量(需要重新启动才能暂时修复)
- dmesg错误日志中系统崩溃(链接1)
- 系统完全冻结(只能按重启/电源按钮)(链接1)
- 创建大量日志报告以尝试正确配置或连接
- 通过“附加驱动程序”/“附加硬件”安装失败(链接3)
- 每隔X秒钟不断连接和断开
- 在网络管理器上显示已连接但无法接收互联网
- 尝试多次连接而未能正确完成连接
- 连接时间过长
- 从以前的版本升级后(例如:从12.04升级到12.10),停止工作
- 无线网卡无法打开、启用或禁用(链接2)
- 无线网卡被硬件阻止
- 在Launchpad、Ubuntu论坛和Askubuntu中发现更多问题
链接1 - https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1060268
链接2 - https://bugs.launchpad.net/ubuntu/+source/bcmwl/+bug/732677
链接3 - 出现类似于“抱歉,安装此驱动程序失败”的错误。
所以考虑到这一点,以下是我们目前的简化步骤:
1. 确定您拥有的Broadcom无线网卡型号
有数十种Broadcom无线网卡型号,而且似乎每天都会出现更多。找到正确的网络卡驱动程序的关键是所谓的PCI ID(PCI.ID)。要找出您的PCI.ID,我们打开终端,按下CTRL+ALT+T(应该会打开一个带有空白背景的窗口),然后在终端中运行以下命令:
lspci -nn -d 14e4:
如果您使用的是Broadcom无线适配器(上面示例中使用的ID 14e4在大多数情况下是Broadcom无线网卡),您将会得到类似以下的内容:
Broadcom Corporation BCM4306 802.11bgn Wireless Network Adapter [14e4:4320] (rev 03)
在这个示例中,PCI.ID 是
14e4:4320,如方括号 [...] 中所见。在某些情况下,对于一些特殊情况,您还需要版本修订号(如果有)。在这种情况下,版本修订号是
rev 03,如括号 (...) 中所示。因此,在进行此搜索后,您将需要以下内容:
[14e4:4320] (rev 03)
有了这些新的信息,您可以查看下面的表格,并选择适当的方法来安装您的驱动程序。例如,在这种情况下,由于您拥有
14e4:4320 rev 03,如果我们在列表中找到显示完全相同的PCI.ID的那个,您将会看到在Ubuntu 18.04或20.04的列中显示了
firmware-b43-installer
软件包驱动程序。这意味着您只需要安装这个特定的软件包,因为它出现在所有Ubuntu版本的列中。
注意 - 在继续之前,如果您以前安装过任何驱动程序,已经将任何驱动程序文件或配置文件加入黑名单或取消注释,或者对系统进行了任何更改以使驱动程序在以前的尝试中工作,您需要撤销这些更改以便按照本指南操作。我们假设您是从头开始进行此操作,并且没有以任何方式更改系统中的任何配置文件、模块或驱动程序(除了更新系统)。这包括使用apt-get、aptitude、synaptic、dpkg、软件中心或手动编译和安装软件包的任何安装。系统必须从头开始才能正常工作,并避免可能出现的任何冲突,如果之前有其他操作的话。
例如,如果您之前安装了
bcmwl-kernel-source
软件包,您需要使用清除方法将其删除:
sudo apt-get purge bcmwl-kernel-source
2. 准备系统
如果您刚刚安装了Ubuntu,您需要在安装驱动程序之前构建一个可用软件包的索引,如果您还没有这样做:
sudo apt update
我甚至会进一步更新Ubuntu的PCI.IDs列表。
sudo update-pciids
以防万一,你正在使用的某个新的Broadcom设备的ID刚刚出现。
现在,根据你在上面步骤中找到的PCI.ID,我们在下面的列表中搜索匹配的PCI.ID和安装与之相关的驱动程序的简单正确方法。为了避免任何与图形用户界面相关的问题,我们将使用终端。除非另有说明,否则所有情况都适用此安装过程。安装过程仅通过终端进行,并且在连接到临时有线以太网连接、USB调制解调器或任何可以为您的计算机提供网络访问的方式时进行。在下面的列表中找到正确的软件包后,我们将继续进行安装。
3. 安装软件包(在线)
假设你在上面的搜索中使用了PCI.ID 14e4:4320 rev 03,然后查看下面的表格并发现要安装的正确软件包是firmware-b43-installer
(特定于Broadcom)和linux-firmware
(包含Broadcom相关驱动程序以及其他类型的驱动程序),那么我们只需在终端中安装这个软件包:
sudo apt install firmware-b43-installer
sudo apt install linux-firmware
然后重新启动
sudo reboot
安装的格式非常简单,只需要:
sudo apt install <PACKAGE_NAME>
在上面的例子中,
PACKAGE_NAME 是
firmware-b43-installer
。
BROADCOM 无线电表(更新于2022年12月5日)
PCI.ID 18.04 LTS 20.04+
------------------------------------------------------------------------------------
14e4:0576 Special Case #1 UNKNOWN
14e4:165f UNKNOWN UNKNOWN
14e4:1713 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4301 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4306 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4306 rev 02 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4306 rev 03 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4307 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4311 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4311 rev 01 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4312 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4313 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4315 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4315 rev 01 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4318 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4318 rev 02 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4319 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4320 rev 02 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4320 rev 03 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4321 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4322 rev 01 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4324 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4325 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4328 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4328 rev 03 bcmwl-kernel-source bcmwl-kernel-source
14e4:4329 bcmwl-kernel-source bcmwl-kernel-source
14e4:432a bcmwl-kernel-source bcmwl-kernel-source
14e4:432b bcmwl-kernel-source bcmwl-kernel-source
14e4:432c bcmwl-kernel-source bcmwl-kernel-source
14e4:432d bcmwl-kernel-source bcmwl-kernel-source
14e4:4331 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4331 rev 02 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4335 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4350 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4353 Special Case #1 UNKNOWN
14e4:4353 rev 01 Special Case #1 UNKNOWN
14e4:4357 Special Case #1 UNKNOWN
14e4:4358 bcmwl-kernel-source bcmwl-kernel-source
14e4:4359 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4360 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4365 firmware-b43-installer firmware-b43-installer / linux-firmware
14e4:4365 rev 01 bcmwl-kernel-source bcmwl-kernel-source
14e4:43a0 bcmwl-kernel-source bcmwl-kernel-source
14e4:43a3 UNKNOWN firmware-b43-installer / linux-firmware
14e4:43ae rev 02 UNKNOWN UNKNOWN
14e4:43ba rev 01 UNKNOWN firmware-b43-installer / linux-firmware
14e4:43b1 bcmwl-kernel-source bcmwl-kernel-source
14e4:43b1 rev 03 bcmwl-kernel-source bcmwl-kernel-source
14e4:43c3 rev 04 UNKNOWN firmware-b43-installer / linux-firmware / Special Case #2
14e4:4727 bcmwl-kernel-source bcmwl-kernel-source
14e4:4727 rev 01 Special Case #1 firmware-b43-installer
14e4:a962 firmware-b43-installer firmware-b43-installer / linux-firmware
------------------------------------------------------------------------------------
对于所有情况,始终安装
linux-firmware
软件包。该软件包将始终与最新的Broadcom驱动程序以及根据驱动程序PCIID可能需要的其他二进制文件保持最新。
特殊情况#1 - 使用
bcma
和
brcmsmac
驱动程序组合。所需的固件已默认安装在
linux-firmware
软件包中。
特殊情况#2 - 对于
ASUS PCE-AC88 AC3100,步骤如下:
- 下载此文件并解压缩后,将其放入/lib/firmware/brcm目录下
sudo cp brcmfmac4366c-pcie.bin /lib/firmware/brcm/brcmfmac4366c-pcie.bin
- 然后执行
sudo nano /etc/rc.local
,添加modprobe brcmfmac并保存
sudo reboot
在像联想S10-2这样的硬件上,如果您的无线网卡在尝试连接到一个SSID时出现卡住的情况(一直在尝试连接),那么让它正常工作的替代方法是安装
bcmwl-kernel-source
软件包(删除与之相关的任何其他已安装的软件包)。有关此无线设备的更多信息,请阅读下面的调试部分。
重要提示 - 2014年9月之后,如果您按照此答案仍然遇到安装正确驱动程序的问题,请尝试
firmware-b43-installer
软件包和
linux-firmware
软件包,并通过评论通知我们。发生了一些变化,某些驱动程序只能与此软件包配合使用。在安装之前,请确保系统干净无误。
sudo apt install firmware-b43-installer
sudo apt install linux-firmware
在某些特定情况下,在安装
firmware-b43-installer
后,您需要移除b43模块,再次启用它甚至进行rfkill解锁。
sudo modprobe -r b43
sudo modprobe b43
sudo rfkill unblock all
如果您有一张具有不同pci.id的Broadcom卡,请提出一个新问题。一旦解决,解决方案将被添加到本教程中。
4.安装软件包(离线)
4.1 安装firmware-b43-installer
要离线安装firmware-b43-installer
,请参见this answer。
4.2 安装bcmwl-kernel-source
对于需要安装bcmwl-kernel-source
但没有联网的情况,here是一个关于此的优秀答案。
但基本上按照以下步骤操作:
- 在Ubuntu软件包仓库中搜索所需的软件包。
- 确保选择正确的架构(32位、64位等)。
- 下载软件包及其相关的依赖包到同一个文件夹中。
- 当你拥有所有所需的软件包(以及它们的依赖项)后,进入包含所有软件包的文件夹,并运行
sudo dpkg -i *.deb
。这将安装该文件夹中的所有软件包。如果出现任何错误,请阅读错误信息并按照提示进行操作。
举个例子,在上述第1点之后,如果你有Broadcom 14e4:43a0
,你可以搜索bcmwl-kernel-source
软件包,并选择相应的Ubuntu版本(例如我的情况是16.04或Xenial),然后你会进入以下页面:
http://packages.ubuntu.com/xenial/bcmwl-kernel-source
在这个页面上,我会选择相应的架构(32位或64位),但还需要下载该页面上提到的3个软件包依赖项,如下图所示。
![enter image description here](https://istack.dev59.com/e7u38.webp)
在下载所有软件包和依赖项之后,您可以将所有软件包复制到一个文件夹中,并按照上述第4步中提到的方式运行
dpkg
命令。
注意
在某些计算机上,在执行这些命令之前,您需要在BIOS中禁用安全引导选项。这适用于例如bcmwl-kernel-source已经安装但驱动程序尚未正常工作的情况。您可以通过重新安装或进入BIOS设置来禁用安全引导:
sudo apt-get install --reinstall bcmwl-kernel-source
调试
以下信息是关于解决与无线管理和其他网络设备冲突相关的各种问题的额外材料。请注意,在某些情况下,您需要拥有更新的内核版本,因为每个新版本的内核都会引入新的网络驱动程序,改进现有驱动程序或解决与其相关的错误。
在阅读下面提到的要点之前,请确保在您的Ubuntu系统上启用了所有软件源。要检查,请在终端上运行software-properties-gtk
并确保Ubuntu软件选项卡上的所有选项都已启用。
确保无线网卡未被硬件禁用。例如,在某些笔记本电脑上,您需要同时按下
Fn +
F2。
要通过终端配置您的无线设备,我建议使用
如何在终端中手动连接和断开网络?。
如果您的连接经常中断,一些用户建议将IPv6设置为
忽略。只需打开网络管理器(位于顶部面板的网络图标),点击它,然后选择
编辑设置。接下来,选择您正在使用的无线连接。现在转到最后一个选项卡,其中提到
IPv6设置。在方法字段中选择
忽略。
如果您的笔记本电脑无法检测到无线网卡,一些用户提到使用
rfkill unblock all
可以解决问题。其他人只需关闭然后再次打开笔记本电脑上的WiFi开关(此类笔记本电脑上有物理开关)。有关
rfkill
的更多信息,请阅读
rf kill unblock all DOES NOT WORK!。
如果您遇到
b43-phy0 ERROR: Fatal DMA error / b43-phy0 warning: Forced PIO错误,请执行以下操作:
sudo rmmod b43
sudo modprobe b43 pio=0 qos=0
如果它起作用,那么将其添加到您的RC文件中,这样每次启动时都会执行。如果需要,您可以将PIO更改为1。
- 如果在安装DKMS模块(如Nvidia、Broadcom或其他模块)时出现“所需密钥不可用”的错误,请访问
Pilot's Answer Here。
- 如果您的无线网卡无法看到路由器,并且陷入无尽的“正在尝试连接(尝试1/3)”循环中,解决方法可能是正确配置您的路由器或无线SSID设备。
对于所有无线网卡来说,同时考虑您使用的网络设备(路由器、交换机、无线信道和无线频段等)非常重要。有了这些信息,当您陷入困境时,您将能够更好地评估问题的根源所在。一个例子是使用14e4:4315 rev 01 PCIID的联想S10-2。即使安装了正确的驱动程序,用户也会陷入“尝试连接”的循环中。它会看到无线SSID,但在尝试连接时,会进入重新连接的循环。
解决方案是这个特定的无线设备不支持40 Mhz信道,也不支持802.11N。在这种情况下,路由器实际上是强制使用40 Mhz和仅WiFi-N进行广播。当将路由器设置为自动模式和20/40 Mhz信道时,无线网卡正常工作。这是一种在其他情况下也重复出现的情况,因此对网络设备进行适当评估将会有很大帮助。
对于出现重复错误的情况:
ERROR @wl_cfg80211_get_station : Wrong Mac address...
当执行
dmesg
进程时,如果你的无线连接经常断开(每小时或每天多次),问题可能是因为你在一个被用作无线桥接的无线信号范围内(两个路由器共享相同的SSID和连接)。现代路由器具有扩展无线连接的功能,通过提供相同的SSID来实现。你的无线连接可能会断开,因为你可能位于两个路由器之间,而两者之间的信号强度几乎相同。
如果你的连接经常断开,这意味着你几乎处在两个路由器设备中间。为了降低或消除无线设备的断开率,请尽量将自己的位置调整到你的无线网卡只能看到一个路由器,或者至少其中一个路由器的信号强度高于另一个路由器。
还有一些技术可以通过将BSSID设置为你希望连接的路由器的MAC地址,强制无线设备仅连接到特定的路由器。这将强制你的无线设备仅连接到该路由器。
![enter image description here](https://istack.dev59.com/UR0kQ.webp)
安全启动问题
在某些特定情况下,如果未禁用安全启动,则无论是通过各种DEB软件包的离线模式安装驱动程序,还是通过具有互联网访问权限的apt-get安装驱动程序,都将无法正常工作。
这是因为安全启动拒绝了所需的访问权限,因此驱动程序看起来已经正确安装,但实际上并没有。因此,在非常特殊的情况下,您需要暂时禁用安全启动以使驱动程序正常工作。
Linux固件更新
在其他情况下,寻找并安装最新的Linux固件可能会解决问题。它可以解决与工作卡发生的一些小问题,或者使卡片首次正常工作。
挂起/休眠问题
用户@oligotren在这里提到了一个不错的提示
每次我的4350卡恢复运行时,它都会出现段错误,因此wifi失败。只需指示pm-*命令卸载和加载驱动程序即可解决所有问题!对我来说,修复方法如下:
echo 'SUSPEND_MODULES="brcmfmac"' | sudo tee -a /etc/pm/config.d/config
最后记住,在某些笔记本电脑上按下
Fn +
F2 可以解决问题,因为无线网卡可能被禁用了。
lspci -vnn|grep Network
显示:0c:00.0 网络控制器 [0280]: Broadcom Corporation Bcm4311 802.11b/g WLAN [14e4:4311] (rev 01)
而iwconfig
显示: `eth0 没有无线扩展。lo 没有无线扩展。` - PHP Learnerlspci -vnn | grep Network
命令中输出不含有Network
一词的行的人来说,这里是实际输出的样子:03:00.0 网络控制器 [0280]: Broadcom Corporation BCM4322 802.11a/b/g/n 无线局域网控制器 [14e4:432b]
。 - n611x007