Getting Broadcom wireless to work on Debian
Debian-like distributions come with b43, or b43legacy, and ssb modules for broadcom wireless cards, but they never worked for me. Searching over the internet i found out that broadcom provides the driver for BCM4311-, BCM4312-, BCM4313-, BCM4321-, and BCM4322-based hardware, all we need to do is compile it and install the module. This is how we do it:
1 – Check your wireless card:
First of all we need to be sure that your wireless card is one of the BCMXXXX-based hardware:
1 | $ lspci | grep Network |
The return should be something like this:
08:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g (rev 01)
In that line you can see that my wireless card hardware is BCM4312, so it is supported.
2 – Download the Driver:
You can access Broadcom’s website[0] and download it or use wget to download it through shell.
For 32-bits CPUs:
1 | $ wget -c http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5.60.48.36.tar.gz |
For 64-bits CPUs:
1 | $ wget -c http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_64-v5.60.48.36.tar.gz |
3 – Remove the other modules:
Check if b43, b43legacy, ssb and/or an older version of wl modules exist:
1 | $ lsmod | grep "b43\|ssb\|wl" |
Remove them, if they exist:
1 | # rmmod b43 ; rmmod b43legacy ; rmmod ssb ; rmmod wl |
Add b43, b43legacy and ssb to the blacklist, preventing them to be probed in initialization:
1 2 3 | # echo "blacklist ssb" >> /etc/modprobe.d/blacklist.conf # echo "blacklist b43" >> /etc/modprobe.d/blacklist.conf # echo "blacklist b43legacy" >> /etc/modprobe.d/blacklist.conf |
4 – Install the wl module:
Extract the tarball you downloaded and compile it, you’ll need to install the build-essential package to compile it:
1 2 3 4 5 | # aptitude install build-essential -y $ mkdir broadcom $ cd broadcom $ tar xvzf ../hybrid-portsrc-x86_<32/64>-<version> $ make |
If you have an older version of wl, which is usually in /lib/modules/
1 | # mv /lib/modules/`uname -r`/kernel/net/wireless/wl.ko /lib/modules/`uname -r`/kernel/net/wireless/wl.ko.old |
Copy the new wl.ko to /lib/modules/
1 2 | # cp wl.ko /lib/modules/`uname -r`/kernel/net/wireless/ # insmod wl.ko |
Add it to /etc/modules to load it at boot time:
1 2 | # echo "lib80211" /etc/modules # echo "wl" /etc/modules |
After these steps your wireless network should be working.
Troubleshooting
I had another problem: after rebooting, ssb module was being loaded even after being blacklisted, and the recently added wl module wasn’t.
To check if this is happening to you run the command below:
1 | $ lsmod | grep ssb |
If the command returns something, it means that the ssb module is being loaded, then you’ll have to:
1 – Remove ssb and wl modules:
1 | # rmmod ssb; rmmod wl |
2 – Back up the current boot ramfs, generate a new one and reboot system:
1 2 3 | # cp /boot/initrd.img-`uname -r` somewheresafe # update-initramfs -u # reboot |
3 – Reinstall wl module:
1 2 3 | # cp wl.ko /lib/modules/`uname -r`/kernel/net/wireless/ # insmod wl.ko # depmode -a |
And wl module will be loaded at boot time.






