Ubuntu – Broadcom BCM4352 Wireless not working with 16.10


I believe I've tried all proposed solutions for other questions involving the Broadcom BCM4352 wifi hardware, but on a fresh install of Ubuntu 16.10 on a Dell XPS 13 9343 (2015) I cannot get the system to recognise the device.

Output of sudo lshw -C network:

       description: Network controller
       product: BCM4352 802.11ac Wireless Network Adapter
       vendor: Broadcom Limited
       physical id: 0
       bus info: pci@0000:02: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:19 memory:f7200000-f7207fff memory:f7000000-f71fffff

Output of rfkill list all (only bluetooth is recognised, not wifi):

2: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no

Output of lspci -knn | grep -A2 Net:

02:00.0 Network controller [0280]: Broadcom Limited BCM4352 802.11ac Wireless Network Adapter [14e4:43b1] (rev 03)
    Subsystem: Dell BCM4352 802.11ac Wireless Network Adapter [1028:0019]
    Kernel driver in use: bcma-pci-bridge
    Kernel modules: bcma, wl

Secure boot is disabled in the BIOS:

enter image description here

Wifi hardware is not shown in the Network Manager indicator:

enter image description here

I have selected bcmwl-kernel-source from the additional drivers application:

enter image description here

The wl module is loaded and and I have tried removing and reloading it.

I have also tried unloading wl, uninstalling and purging bcmwl-kernel-source and installing firmware-b43-installer and b43-fwcutter, but the problem remains the same.

The wireless hardware works in Windows 10 and older versions of Ubuntu up until 16.04 so there is no question of a hardware fault.

What else can I try to get the device working or debug the problem?

Best Answer

  • We have found that, even though it is properly blacklisted, bcma loads anyway!! Let's correct it in rc.local.

    Please do:

    gksudo gedit /etc/systemd/system/rc-local.service

    Put in the following:

     Description=/etc/rc.local Compatibility
     ExecStart=/etc/rc.local start

    Proofread carefully, save and close the text editor. Next:

    gksudo gedit /etc/rc.local

    Place the following:

    #!/bin/sh -e
    modprobe -r wl
    modprobe -r bcma
    modprobe wl
    exit 0

    Proofread carefully, save and close the text editor. Next:

    sudo chmod +rx /etc/rc.local
    sudo systemctl enable rc-local
    sudo systemctl start rc-local.service
    sudo systemctl status rc-local.service

    If there are no errors, reboot and test.