How can I fix Broadcom driver Wifi with 4.15.0-xx kernel on Ubuntu 16.04

16,815

Solution 1

Canonical updated HWE stack for Ubuntu 16.04 to the 4.15 kernel. But they forgot to update the Broadcom wireless driver, so it can be built. It is a critical and a very stupid bug, that will cause trouble for many people using the LTS.

Now the issue is being fixed and a compatible driver version has been built

This issue can be solved by installing a compatible version of bcmwl-kernel-source that should build on the 4.15 kernels.

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

and install it using dkpg.

This can be done by

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 is not related at all.

The problem is that you have a kernel that is not compatible with the driver.

Important: If you don't have any other network connection but the Broadcom Wi-Fi, you can boot with a previous kernel using grub menu and install the driver. It should build for all kernels.

Solution 2

Apropos to Pilot6's nice answer to this question, it looks like an official fix for xenial (i.e. not requiring one to install packages from bionic) has been released (if you use package broadcom-sta), or else committed (if you use package bcmwl which provides bcmwl-kernel-source).

For further info, see:

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

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

Share:
16,815

Related videos on Youtube

John Kent
Author by

John Kent

Updated on September 18, 2022

Comments

  • John Kent
    John Kent over 1 year

    I reinstalled a driver on Windows for Broadcom Network Adapter and after that my WiFi stopped working on Ubuntu(16.04) completely.

    I tried to reinstall drivers, using this commands:

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

    But it didn't help

    Output of the second command(install 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).
    

    This command lspci -nn -d 14e4 outputs:

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

    Could you tell me how to fix my problem?

    /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'
    
    • SudoSURoot
      SudoSURoot almost 6 years
      Please attach the contents of /var/crash/bcmwl-kernel-source.0.crash and /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log for more information.
    • John Kent
      John Kent almost 6 years
      @SudoSURoot Done!
    • SudoSURoot
      SudoSURoot almost 6 years
      I see both logs say: please install libelf-dev, libelf-devel or elfutils-libelf-devel. Try running: sudo apt-get install libelf-dev and then purge and install again.
    • John Kent
      John Kent almost 6 years
      @Terrance Could hint me how to go to that kernel?
    • Nathan Basanese
      Nathan Basanese almost 6 years
      // , Here's the full text of the error I got from the "system problem detected" prompt: bcmwl-kernel-source 6.30.223.271+bdcom-0ubuntu1~1.2: bcmwl kerne l module failed to build I'm in the market for a new computer, and with BS like this the new mac OS is starting to look more and more attractive.
    • Ufos
      Ufos almost 6 years
  • Thomas Ward
    Thomas Ward almost 6 years
    Comments are not for extended discussion; this conversation has been moved to chat.
  • Pilot6
    Pilot6 almost 6 years
    @DavidFoerster I changed the answer and gave a link to the driver built for 16.04. This is the version that will be added soon to the repos. There is no difference except the version number, but you are correct that it is better to use this one for future possible upgrades if any.
  • Boris Hamanov
    Boris Hamanov almost 6 years
    They also broke the r8168-dkms driver. See my answer at askubuntu.com/questions/1052971/… for more details.
  • Pilot6
    Pilot6 almost 6 years
    @heynnema How do you all getn the 4.15 kernel? Is the proposed repo enabled. Nothing is broken for those who are not running before the train.
  • Boris Hamanov
    Boris Hamanov almost 6 years
    @Pilot6 as you mention in your answer, "Canonical updated HWE stack for Ubuntu 16.04 to the 4.15 kernel.". Other users are saying the same thing... that they're running 4.15 on 16.04 LTS, and as my link suggests, are also requiring newer drivers to be 100% functional again. I haven't asked if they're running proposed, or not.
  • Pilot6
    Pilot6 almost 6 years
    THe fact that Canonical really did NOT update to 4.15 yet. They uploaded it to 'proposed' for testing and now they are fixing this kind of troubles.
  • Nathan Basanese
    Nathan Basanese almost 6 years
    // , "It is a critical and a very stupid bug" I can't help but agree
  • Miguel Espeso
    Miguel Espeso almost 6 years
    Would this work in Ubuntu 18.04, or should I follow another path? Thank you.
  • Pilot6
    Pilot6 almost 6 years
    There is no such problem on 18.04.