Debian 11 broadcom-sta-dkms编译报错

在笔记本上安装好Debian 11后,发现无法使用内置的无线网卡,于是安装了broadcom-sta-dkms,编译时出错:

Loading new broadcom-sta-6.30.223.271 DKMS files...
Building for 5.17.0-1-amd64
Building initial module for 5.17.0-1-amd64
Error! Bad return status for module build on kernel: 5.17.0-1-amd64 (x86_64)
Consult /var/lib/dkms/broadcom-sta/6.30.223.271/build/make.log for more information.
dpkg: 处理软件包 broadcom-sta-dkms (--configure)时出错:
 已安装 broadcom-sta-dkms 软件包 post-installation 脚本 子进程返回错误状态 10

麻烦大家帮帮忙 :sweat_smile:

闭源驱动

这是一个已知错误,参见:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1010128

有意见声称可以使用 Arch 社区的补丁来解决这个问题:

Quick and dirty workaround for broadcom-sta-dkms on kernel 5.17:

  1. Download patch.
    $ wget https://raw.githubusercontent.com/archlinux/svntogit-community/master/broadcom-wl-dkms/trunk/012-linux517.patch
    WARNING: Make sure not to download any untrused/malicious code. The changes in the linked patch appear small and safe.

  2. With root shell, go to source.
    # cd /usr/src/broadcom-sta-6.30.223.271/src/wl/sys/

  3. Patch the code.
    # patch wl_linux.c < /home/stephan/Downloads/012-linux517.patch

  4. Reconfigure broadcom-sta-dkms to trigger DKMS
    # dpkg-reconfigure broadcom-sta-dkms

WARNING: Re-installing the package will reverse your changes.

补丁的具体内容如下:

diff -u -r a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c
--- a/src/wl/sys/wl_linux.c	2022-03-23 00:35:42.930416350 +0000
+++ b/src/wl/sys/wl_linux.c	2022-03-23 00:40:12.903771013 +0000
@@ -2980,7 +2980,11 @@
 	else
 		dev->type = ARPHRD_IEEE80211_RADIOTAP;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 17, 0)
 	bcopy(wl->dev->dev_addr, dev->dev_addr, ETHER_ADDR_LEN);
+#else
+	eth_hw_addr_set(wl->dev, dev->dev_addr);
+#endif
 
 #if defined(WL_USE_NETDEV_OPS)
 	dev->netdev_ops = &wl_netdev_monitor_ops;
@@ -3261,7 +3265,11 @@
 static ssize_t
 wl_proc_read(struct file *filp, char __user *buffer, size_t length, loff_t *offp)
 {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 17, 0)
 	wl_info_t * wl = PDE_DATA(file_inode(filp));
+#else
+	wl_info_t * wl = pde_data(file_inode(filp));
+#endif
 #endif
 	int bcmerror, len;
 	int to_user = 0;
@@ -3318,7 +3326,11 @@
 static ssize_t
 wl_proc_write(struct file *filp, const char __user *buff, size_t length, loff_t *offp)
 {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 17, 0)
 	wl_info_t * wl = PDE_DATA(file_inode(filp));
+#else
+	wl_info_t * wl = pde_data(file_inode(filp));
+#endif
 #endif
 	int from_user = 0;
 	int bcmerror;

开源驱动

开源驱动可能支持你的硬件,但由于缺少固件而无法工作。可以考虑执行命令lspci -nn -d 14e4,并与下列网站列出的支持设备进行比较:

https://wireless.wiki.kernel.org/en/users/Drivers/b43#list_of_hardware
https://wireless.wiki.kernel.org/en/users/Drivers/brcm80211#supported_chips

或者可以考虑运行命令 update-initramfs -u all,检查输出中是否具有缺少固件的警告。

固件

  • brcm80211 驱动需要安装 firmware-brcm80211 软件包;
  • b43 驱动需要安装 firmware-b43-installerfirmware-b43legacy-installer 软件包。可以执行命令dmesg | grep b43来确定需要安装哪一个软件包。
1 个赞

问题已经解决,谢谢!