bcmwl-kernel-source 在内核版本 5.8.0-34-generic 上出现故障。

类似于bcmwl-kernel-source在内核5.8.0-7630-generic上出现故障,但我使用的是标准内核 - WiFi在我的MacBook Air(2013)上一直没有问题,直到我安装了最新的20.04.2更新,其中包括5.8.0-34-generic内核,然后重新启动到5.4.0-59-generic之后问题仍未解决。无论如何,详细信息如下;非常感谢任何帮助。

lspci -vnn | grep Network

03:00.0 Network controller [0280]: Broadcom Inc. and subsidiaries BCM4360 802.11ac Wireless Network Adapter [14e4:43a0] (rev 03)
    Subsystem: Apple Inc. BCM4360 802.11ac Wireless Network Adapter [106b:0117]

ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:49:bc:05 brd ff:ff:ff:ff:ff:ff
3: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:49:bc:05 brd ff:ff:ff:ff:ff:ff
5: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 84:38:35:4a:43:4b brd ff:ff:ff:ff:ff:ff

可以看到,没有无线接口。
sudo lshw -class network
  *-network                 
       description: Network controller
       product: BCM4360 802.11ac Wireless Network Adapter
       vendor: Broadcom Inc. and subsidiaries
       physical id: 0
       bus info: pci@0000:03:00.0
       version: 03
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress bus_master cap_list
       configuration: driver=bcma-pci-bridge latency=0
       resources: irq:18 memory:b0600000-b0607fff memory:b0400000-b05fffff
  *-network:0
       description: Ethernet interface
       physical id: 1
       logical name: virbr0
       serial: 52:54:00:49:bc:05
       capabilities: ethernet physical
       configuration: broadcast=yes driver=bridge driverversion=2.3 firmware=N/A ip=192.168.122.1 link=no multicast=yes
  *-network:1
       description: Ethernet interface
       physical id: 2
       logical name: bnep0
       serial: 84:38:35:4a:43:4b
       capabilities: ethernet physical
       configuration: broadcast=yes ip=192.168.44.124 multicast=yes
  *-network:2 DISABLED
       description: Ethernet interface
       physical id: 3
       logical name: virbr0-nic
       serial: 52:54:00:49:bc:05
       size: 10Mbit/s
       capabilities: ethernet physical
       configuration: autonegotiation=off broadcast=yes driver=tun driverversion=1.6 duplex=full link=no multicast=yes port=twisted pair speed=10Mbit/s

我尝试解决问题的步骤

我按照安装Broadcom无线驱动程序的指示进行了以下操作:

  1. lspci -nn -d 14e4: 显示PCI.ID为14e4:43a0(版本03),所以我应该(重新)安装bcmwl-kernel-source
  2. sudo apt purge -y bcmwl-kernel-source
  3. sudo apt autoremove
  4. sudo apt update
  5. sudo update-pciids
  6. sudo apt-get install -y bcmwl-kernel-source

... 然后重新启动。

我使用5.8.0-34-generic5.4.0-59-generic内核执行了所有步骤(除了第一步),最后一个命令的输出如下:

5.8.0-34-generic

标准输出:

Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  dkms
Suggested packages:
  menu
The following NEW packages will be installed:
  bcmwl-kernel-source dkms
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/1,611 kB of archives.
After this operation, 8,364 kB of additional disk space will be used.
Selecting previously unselected package dkms.
(Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 204877 files and directories currently installed.)
Preparing to unpack .../dkms_2.8.1-5ubuntu1_all.deb ...
Unpacking dkms (2.8.1-5ubuntu1) ...
Selecting previously unselected package bcmwl-kernel-source.
Preparing to unpack .../bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu5_amd64.deb ...
Unpacking bcmwl-kernel-source (6.30.223.271+bdcom-0ubuntu5) ...
Setting up dkms (2.8.1-5ubuntu1) ...
Setting up bcmwl-kernel-source (6.30.223.271+bdcom-0ubuntu5) ...
Loading new bcmwl-6.30.223.271+bdcom DKMS files...
Building for 5.8.0-34-generic
Building for architecture x86_64
Building initial module for 5.8.0-34-generic
Error! Bad return status for module build on kernel: 5.8.0-34-generic (x86_64)
Consult /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log for more information.
dpkg: error processing package bcmwl-kernel-source (--configure):
 installed bcmwl-kernel-source package post-installation script subprocess returned error exit status 10
Processing triggers for man-db (2.9.1-1) ...
Errors were encountered while processing:
 bcmwl-kernel-source

错误输出:

E: Sub-process /usr/bin/dpkg returned an error code (1)

5.4.0-59-generic

标准输出:

Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  dkms
Suggested packages:
  menu
The following NEW packages will be installed:
  bcmwl-kernel-source dkms
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/1,611 kB of archives.
After this operation, 8,364 kB of additional disk space will be used.
Selecting previously unselected package dkms.
(Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 204877 files and directories currently installed.)
Preparing to unpack .../dkms_2.8.1-5ubuntu1_all.deb ...
Unpacking dkms (2.8.1-5ubuntu1) ...
Selecting previously unselected package bcmwl-kernel-source.
Preparing to unpack .../bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu5_amd64.deb ...
Unpacking bcmwl-kernel-source (6.30.223.271+bdcom-0ubuntu5) ...
Setting up dkms (2.8.1-5ubuntu1) ...
Setting up bcmwl-kernel-source (6.30.223.271+bdcom-0ubuntu5) ...
Loading new bcmwl-6.30.223.271+bdcom DKMS files...
Building for 5.4.0-59-generic 5.8.0-34-generic
Building for architecture x86_64
Building initial module for 5.4.0-59-generic
This system doesn't support Secure Boot
Secure Boot not enabled on this system.
Done.

wl.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-59-generic/updates/dkms/

depmod...

DKMS: install completed.
Building initial module for 5.8.0-34-generic
Error! Bad return status for module build on kernel: 5.8.0-34-generic (x86_64)
Consult /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log for more information.
dpkg: error processing package bcmwl-kernel-source (--configure):
 installed bcmwl-kernel-source package post-installation script subprocess returned error exit status 10
Processing triggers for man-db (2.9.1-1) ...
Errors were encountered while processing:
 bcmwl-kernel-source

STDERR:
E: Sub-process /usr/bin/dpkg returned an error code (1)

在这两种情况下,输出建议查看/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log,其中显示:
DKMS make.log for bcmwl-6.30.223.271+bdcom for kernel 5.8.0-34-generic (x86_64)
Thursday, January 07, 2021 PM01:19:23 CST
make: Entering directory '/usr/src/linux-headers-5.8.0-34-generic'
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  AR      /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/built-in.a
  CC [M]  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.o
  CC [M]  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.o
  CC [M]  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_iw.o
  CC [M]  /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_cfg80211_hybrid.o
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In function ‘wl_attach’:
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:593:20: error: implicit declaration of function ‘ioremap_nocache’; did you mean ‘ioremap_cache’? [-Werror=implicit-function-declaration]
  593 |  if ((wl->regsva = ioremap_nocache(dev->base_addr, PCI_BAR0_WINSZ)) == NULL) {
      |                    ^~~~~~~~~~~~~~~
      |                    ioremap_cache
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:593:18: warning: assignment to ‘void *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
  593 |  if ((wl->regsva = ioremap_nocache(dev->base_addr, PCI_BAR0_WINSZ)) == NULL) {
      |                  ^
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In function ‘wl_pci_probe’:
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:780:2: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
  780 |  if ((val & 0x0000ff00) != 0)
      |  ^~
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:782:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
  782 |   bar1_size = pci_resource_len(pdev, 2);
      |   ^~~~~~~~~
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:783:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
  783 |   bar1_addr = (uchar *)ioremap_nocache(pci_resource_start(pdev, 2),
      |               ^
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In function ‘wl_reg_proc_entry’:
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:3376:58: error: passing argument 4 of ‘proc_create_data’ from incompatible pointer type [-Werror=incompatible-pointer-types]
 3376 |  if ((wl->proc_entry = proc_create_data(tmp, 0644, NULL, &wl_fops, wl)) == NULL) {
      |                                                          ^~~~~~~~
      |                                                          |
      |                                                          const struct file_operations *
In file included from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:38:
./include/linux/proc_fs.h:102:31: note: expected ‘const struct proc_ops *’ but argument is of type ‘const struct file_operations *’
  102 | extern struct proc_dir_entry *proc_create_data(const char *, umode_t,
      |                               ^~~~~~~~~~~~~~~~
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c: In function ‘osl_reg_map’:
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:949:10: error: implicit declaration of function ‘ioremap_nocache’; did you mean ‘ioremap_cache’? [-Werror=implicit-function-declaration]
  949 |  return (ioremap_nocache((unsigned long)pa, (unsigned long)size));
      |          ^~~~~~~~~~~~~~~
      |          ioremap_cache
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:949:10: warning: returning ‘int’ from a function with return type ‘void *’ makes pointer from integer without a cast [-Wint-conversion]
  949 |  return (ioremap_nocache((unsigned long)pa, (unsigned long)size));
      |         ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_cfg80211_hybrid.c:40:
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_set_auth_type’:
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_cfg80211_hybrid.h:52:5: warning: this statement may fall through [-Wimplicit-fallthrough=]
   52 |  if (wl_dbg_level & WL_DBG_DBG) {   \
      |     ^
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_cfg80211_hybrid.c:816:3: note: in expansion of macro ‘WL_DBG’
  816 |   WL_DBG(("network eap\n"));
      |   ^~~~~~
/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_cfg80211_hybrid.c:817:2: note: here
  817 |  default:
      |  ^~~~~~~
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:288: /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.o] Error 1
make[1]: *** Waiting for unfinished jobs....
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:288: /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.o] Error 1
make: *** [Makefile:1780: /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build] Error 2
make: Leaving directory '/usr/src/linux-headers-5.8.0-34-generic'

同时,我的蓝牙正常工作,所以我正在使用Android设备通过蓝牙共享上网。但这只是一个临时解决方案,我不想长期依赖它。
8个回答

原因很明显。几乎每次Canonical推出HWE内核时,他们都忘记在存储库中升级bcmwl-kernel-source。
你有两个解决方案(使用其中一个即可,同时使用两者没有意义):
1. 从groovy存储库安装bcmwl-kernel-source。你可以在这里找到它,例如:http://mirrors.kernel.org/ubuntu/pool/restricted/b/bcmwl/bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu7_amd64.deb 它将与5.8内核一起编译。
下载deb文件并通过以下方式进行安装:
sudo dpkg -i bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu7_amd64.deb

删除所有5.8内核包,请使用以下命令: sudo apt remove linux-{image,modules,modules-extra,headers}-5.8.0-36-generic linux-hwe-5.8-headers-5.8.0-36 sudo apt install linux-generic
确保已安装linux-generic元包。
建议在移除5.8版本之前使用5.4内核启动。
第二个解决方案将保持5.4主要内核版本,并进行正常安全升级。

谢谢,我按照你建议的第二个解决方案来操作,停止了内核更新。至于第一个解决方案,只要一切正常并且我的系统安全,我就不需要这样新的内核。 - Donald Sebastian Leung
3我认为添加HWE元文件也是某人的错误。在xx.04.2发布之前它们从未出现过。这将给许多人带来麻烦。但我已经使用Ubuntu很长时间了,每逢奇数年的开始都会出现一些混乱;-) - Pilot6
安装 synaptic 并删除所有版本为 5.8 的 linux-image... 和 linux-headers... 包,以及那些元包。 - Pilot6
谢谢!选项1对我来说起到了很好的作用! - armc
1你能否也添加一个指向上游错误的链接?虽然这是一个很好的解决方法,但正确的修复应该来自Canonical。受影响的人应该去错误报告中标记自己受到了影响,以便引起更多关注:https://bugs.launchpad.net/ubuntu/+source/bcmwl/+bug/1910555 - bmaupin

我成功地使用内核5.4.0-59-generic恢复了WiFi,具体步骤如下:
  1. 清除与内核5.8.0-34-generic相关的所有软件包:sudo apt purge linux-image-5.8.0-34-generic linux-image-unsigned-5.8.0-34-generic linux-modules-5.8.0-34-generic linux-headers-5.8.0-34-generic
  2. 清除Broadcom WiFi驱动程序:sudo apt purge bcmwl-kernel-source
  3. 删除多余的软件包:sudo apt autoremove
  4. 5.4.0-59-generic内核保持不变:sudo apt-mark hold 5.4.0-59-generic
  5. 更新软件包元数据:sudo apt update
  6. 重新安装驱动程序:sudo apt install bcmwl-kernel-source
由于5.8.0-34-generic内核已经不存在,驱动程序只编译给5.4.0-59-generic内核,这正如预期一样成功。重新启动后,WiFi已恢复正常。
希望一旦解决了这个问题,我可以重新保持内核并像往常一样接收内核更新。

25.4.0-59-generic放置不动并不是一个好主意。它将无法获得更新。如果你移除了linux-generic-hwe-20.04linux-image-generic-hwe-20.04,你将再也无法获得5.8版本。但是5.4版本将会正常地获得更新,例如升级到5.4.0-60 - Pilot6

原来,你可以使用Ubuntu 20.10版本的软件包,它完全正常工作,在原始仓库上。

在追踪bcmwl-kernel-source中的错误时,找到了一种替代解决方案。
请参阅Unix&Linux SE上的此问题。
我尝试了线程中列出的解决方案,其中包括清除bcmwl-kernel-source并安装broadcom-sta,在我的Ubuntu 20.04 LTS上与安装了Linux 5.8.0-36头文件的系统中有效。
sudo apt-get purge bcmwl-kernel-source
sudo apt-get install broadcom-sta-source broadcom-sta-dkms broadcom-sta-common

broadcom-sta-dkms就可以了。 - Pilot6

Broadcom Wifi在Ubuntu 20.04 LTS内核更新8.15.34 ~ 36后崩溃了。
如何查看内核版本?
uname -r

如何判断您的适配器是否损坏?
sudo lshw -C network 

你会看到以下标题的适配器崩溃:

*-网络未声明

如何修复:

解决方案1

安装以下设备驱动程序:

http://archive.ubuntu.com/ubuntu/pool/restricted/b/bcmwl/bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu7_amd64.deb

备选方案

如果不起作用,请尝试以下方法:

sudo apt-get purge bcmwl-kernel-source
sudo apt-get install bcmwl-kernel-source

替代方案 重新安装内核

sudo apt install --reinstall linux-image-$(uname -r)
sudo apt install --reinstall linux-modules-$(uname -r)
sudo apt install --reinstall linux-modules-extra-$(uname -r)

再试一次上述的解决方案。

完美解决了。我尝试了deb包的安装,驱动程序和Wifi都能百分之百地正常工作了,而且我不需要降级到5.4版本。我的笔记本是一台小巧的联想ideapad S10-3模型。 - Anand Kulkarni

这个问题应该已经根据https://bugs.launchpad.net/ubuntu/+source/bcmwl/+bug/1872908进行修复。

更新您的系统,修复将会被应用,例如:

sudo apt update
sudo apt dist-upgrade

如果您已经按照其他答案的建议安装了更新版本的bcmwl-kernel-source来解决这个问题,您可能希望卸载它并安装正确的版本,例如。
sudo apt purge bcmwl-kernel-source
sudo apt install bcmwl-kernel-source

请注意,如果您正在运行5.8内核,因为您安装了HWE(linux-image-generic-hwe-20.04),那么您可能也已经安装了5.11内核。值得庆幸的是,这个问题在5.11版本中也已经修复了。

我也遇到了同样的问题,大约三周前进行'apt'升级时出现了问题。看起来Ubuntu仓库现在已经提供了修复程序。今天的升级之后,我的Broadcom无线接口又恢复并正常工作了。此次升级包括以下软件包:
bcmwl-kernel-source 6.30.223.271+bdcom-0ubuntu7~20.04.1

解决wifi问题的一个选择(除了使用以太网电缆连接wifi路由器盒子之外)是通过手机为您的设备提供互联网连接... 在Android 12上,您可以通过USB电缆将计算机连接到手机,然后在手机上转到 设置 -> 网络与互联网 -> 热点与共享 -> USB共享网络,并打开此设置

只要您的手机有数据计划或者自身连接了wifi,这种方法都可以使用

我需要在测试目的下安装最新的主线内核,该内核通常比最新的Ubuntu版本更新几个版本,而Broadcom无线驱动程序尚未准备好