如何在Ubuntu 16.04上使用4.15.0-xx内核修复Broadcom驱动程序Wifi

我在Windows上为Broadcom网络适配器重新安装了一个驱动程序,之后我的WiFi完全停止在Ubuntu(16.04)上运行。

我尝试使用以下命令重新安装驱动程序:

1. sudo apt-get purge bcmwl-kernel-source 2. sudo apt-get install bcmwl-kernel-source 

但它没有帮助

输出第二个命令(安装bcmwl-kernel-source):

 Unpacking bcmwl-kernel-source (6.30.223.271+bdcom-0ubuntu1~1.2) ... Setting up bcmwl-kernel-source (6.30.223.271+bdcom-0ubuntu1~1.2) ... Loading new bcmwl-6.30.223.271+bdcom DKMS files... First Installation: checking all kernels... Building only for 4.15.0-24-generic Building for architecture x86_64 Building initial module for 4.15.0-24-generic ERROR: Cannot create report: [Errno 17] File exists: '/var/crash/bcmwl-kernel-source.0.crash' Error! Bad return status for module build on kernel: 4.15.0-24-generic (x86_64) Consult /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log for more information. modprobe: FATAL: Module wl not found in directory /lib/modules/4.15.0-24-generic update-initramfs: deferring update (trigger activated) Processing triggers for initramfs-tools (0.122ubuntu8.11) ... update-initramfs: Generating /boot/initrd.img-4.15.0-24-generic W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915 W: Possible missing firmware /lib/firmware/i915/bxt_guc_ver8_7.bin for module i915 root@roman-Lenovo-G510:~# apt-get install bcmwl-kernel-source Reading package lists... Done Building dependency tree Reading state information... Done bcmwl-kernel-source is already the newest version (6.30.223.271+bdcom-0ubuntu1~1.2). 

这个命令lspci -nn -d 14e4输出:

 08:00.0 Network controller [0280]: Broadcom Limited BCM43142 802.11b/g/n [14e4:4365] (rev 01) 

你能告诉我如何解决我的问题吗?

/var/crash/bcmwl-kernel-source.0.crash

 ProblemType: Package DKMSBuildLog: DKMS make.log for bcmwl-6.30.223.271+bdcom for kernel 4.15.0-24-generic (x86_64) Вт июл 3 16:26:40 MSK 2018 make: Entering directory '/usr/src/linux-headers-4.15.0-24-generic' Makefile:976: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" CFG80211 API is prefered for this kernel version Using CFG80211 API CC [M] /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.o /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c: In function 'osl_os_get_image_block': /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:1083:26: warning: passing argument 2 of 'kernel_read' makes pointer from integer without a cast [-Wint-conversion] rdlen = kernel_read(fp, fp->f_pos, buf, len); ^ In file included from ./include/linux/huge_mm.h:7:0, from ./include/linux/mm.h:463, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/include/linuxver.h:65, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:25: ./include/linux/fs.h:2858:16: note: expected 'void *' but argument is of type 'loff_t {aka long long int}' extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *); ^ /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:1083:37: warning: passing argument 3 of 'kernel_read' makes integer from pointer without a cast [-Wint-conversion] rdlen = kernel_read(fp, fp->f_pos, buf, len); ^ In file included from ./include/linux/huge_mm.h:7:0, from ./include/linux/mm.h:463, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/include/linuxver.h:65, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:25: ./include/linux/fs.h:2858:16: note: expected 'size_t {aka long unsigned int}' but argument is of type 'char *' extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *); ^ /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:1083:42: warning: passing argument 4 of 'kernel_read' makes pointer from integer without a cast [-Wint-conversion] rdlen = kernel_read(fp, fp->f_pos, buf, len); ^ In file included from ./include/linux/huge_mm.h:7:0, from ./include/linux/mm.h:463, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/include/linuxver.h:65, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:25: ./include/linux/fs.h:2858:16: note: expected 'loff_t * {aka long long int *}' but argument is of type 'int' extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *); ^ CC [M] /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.o /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In function 'wl_init_timer': /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:2359:2: error: implicit declaration of function 'init_timer' [-Werror=implicit-function-declaration] init_timer(&t->timer); ^ /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:2360:10: error: 'struct timer_list' has no member named 'data' t->timer.data = (ulong) t; ^ /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:2361:20: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types] t->timer.function = wl_timer; ^ cc1: some warnings being treated as errors scripts/Makefile.build:332: recipe for target '/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.o' failed make[1]: *** [/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.o] Error 1 Makefile:1552: recipe for target '_module_/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build' failed make: *** [_module_/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build] Error 2 make: Leaving directory '/usr/src/linux-headers-4.15.0-24-generic' DKMSKernelVersion: 4.15.0-24-generic Date: Tue Jul 3 16:26:46 2018 DuplicateSignature: dkms:bcmwl-kernel-source:6.30.223.271+bdcom-0ubuntu1~1.2:/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:2359:2: error: implicit declaration of function 'init_timer' [-Werror=implicit-function-declaration] Package: bcmwl-kernel-source 6.30.223.271+bdcom-0ubuntu1~1.2 PackageVersion: 6.30.223.271+bdcom-0ubuntu1~1.2 SourcePackage: bcmwl Title: bcmwl-kernel-source 6.30.223.271+bdcom-0ubuntu1~1.2: bcmwl kernel module failed to build 

/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log

 DKMS make.log for bcmwl-6.30.223.271+bdcom for kernel 4.15.0-24-generic (x86_64) Чт июл 5 16:26:16 MSK 2018 make: Entering directory '/usr/src/linux-headers-4.15.0-24-generic' Makefile:976: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" CFG80211 API is prefered for this kernel version Using CFG80211 API CC [M] /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.o /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c: In function 'osl_os_get_image_block': /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:1083:26: warning: passing argument 2 of 'kernel_read' makes pointer from integer without a cast [-Wint-conversion] rdlen = kernel_read(fp, fp->f_pos, buf, len); ^ In file included from ./include/linux/huge_mm.h:7:0, from ./include/linux/mm.h:463, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/include/linuxver.h:65, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:25: ./include/linux/fs.h:2858:16: note: expected 'void *' but argument is of type 'loff_t {aka long long int}' extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *); ^ /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:1083:37: warning: passing argument 3 of 'kernel_read' makes integer from pointer without a cast [-Wint-conversion] rdlen = kernel_read(fp, fp->f_pos, buf, len); ^ In file included from ./include/linux/huge_mm.h:7:0, from ./include/linux/mm.h:463, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/include/linuxver.h:65, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:25: ./include/linux/fs.h:2858:16: note: expected 'size_t {aka long unsigned int}' but argument is of type 'char *' extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *); ^ /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:1083:42: warning: passing argument 4 of 'kernel_read' makes pointer from integer without a cast [-Wint-conversion] rdlen = kernel_read(fp, fp->f_pos, buf, len); ^ In file included from ./include/linux/huge_mm.h:7:0, from ./include/linux/mm.h:463, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/include/linuxver.h:65, from /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/shared/linux_osl.c:25: ./include/linux/fs.h:2858:16: note: expected 'loff_t * {aka long long int *}' but argument is of type 'int' extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *); ^ CC [M] /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.o /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c: In function 'wl_init_timer': /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:2359:2: error: implicit declaration of function 'init_timer' [-Werror=implicit-function-declaration] init_timer(&t->timer); ^ /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:2360:10: error: 'struct timer_list' has no member named 'data' t->timer.data = (ulong) t; ^ /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.c:2361:20: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types] t->timer.function = wl_timer; ^ cc1: some warnings being treated as errors scripts/Makefile.build:332: recipe for target '/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.o' failed make[1]: *** [/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/src/wl/sys/wl_linux.o] Error 1 Makefile:1552: recipe for target '_module_/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build' failed make: *** [_module_/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build] Error 2 make: Leaving directory '/usr/src/linux-headers-4.15.0-24-generic' 

Canonical将Ubuntu 16.04的HWE堆栈更新到4.15内核。 但他们忘记更新Broadcom无线驱动程序,因此可以构建它。 这是一个关键且非常愚蠢的错误,会给许多使用LTS的人带来麻烦。

现在问题正在解决,并且已经构建了兼容的驱动程序版本

这个问题可以通过安装应该在4.15内核上构建的兼容版本的bcmwl-kernel-source来解决。

下载http://archive.ubuntu.com/ubuntu/pool/restricted/b/bcmwl/bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu1~1.3_amd64.deb

并使用dkpg安装它。

这可以通过

 wget http://archive.ubuntu.com/ubuntu/pool/restricted/b/bcmwl/bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu1~1.3_amd64.deb sudo dpkg -i bcmwl-kernel-source_6.30.223.271+bdcom-0ubuntu1~1.3_amd64.deb 

Windows根本不相关。

问题是你有一个与驱动程序不兼容的内核。

重要提示:如果除了Broadcom Wi-Fi之外没有任何其他网络连接,则可以使用grub菜单使用以前的内核启动并安装驱动程序。 它应该为所有内核构建。

Pilot6对这个问题很好的答案,它看起来像是xenial的官方修复(即不需要一个人从bionic安装包)已经发布(如果你使用包broadcom-sta ),或者已经提交(如果你使用包bcmwl它提供了bcmwl-kernel-source )。

有关详细信息,请参阅:

broadcom-sta: https : //bugs.launchpad.net/ubuntu/+source/broadcom-sta/+bug/1777444

bcmwl: https ://bugs.launchpad.net/ubuntu/+source/bcmwl/+bug/1777646