Update 2013-02-27: This solution on Ask Ubuntu is much better, because it includes properly packaged things that should update when you upgrade Ubuntu.
Update 2012-10-24: The patch is no longer available on Broadcom’s website, but it can be found here. Also, you may also need this patch now too.
Once again, I find that my Broadcom wireless card is not working. I don’t know how long this has been going on—I’m normally wired.
Mode of Failure
I have no wireless. Wireless is not displayed under Network Manager. My wireless card does not have an associated interface. iwconfig shows this:
$ iwconfig lo no wireless extensions. eth0 no wireless extensions.
Also, lshw shows *-network UNCLAIMED for the wireless card.
Solution
I tried rebuilding the driver provided by Broadcom. The build succeeded, but modprobe wl still failed like so:
$ sudo modprobe wl FATAL: Module wl not found. FATAL: Error running install command for wl
But the .ko file existed at the correct place:
$ locate wl.ko /lib/modules/3.0.0-12-generic/kernel/drivers/net/wireless/wl.ko . .
Finally, I found a solution here. By running sudo depmod -a, I could then sudo modprobe wl and my wireless started working again.
I don’t know if it was necessary for me to get the latest drivers from Broadcom or if the version Ubuntu packaged would have worked. But my wireless is working again now.
I had the same problem and investigated a solution for it. Here are my results:
The kernel supplied with Ubuntu 11.10 is loading the module bcma instead of wl.
The packages bcmwl-kernel-source doesn’t include “blacklist bcma” in the modprobe blacklist file that it generates.
lspci -vshows which driver is loaded per hardware (and which applies).If you put ‘blacklist bcma’ in /etc/modprobe.d/blacklist-custom.conf that should solve this for good.
That solution is good, but not the best. I don’t recommend the driver that comes from Broadcom. I cannot get it to recognize wireless networks after sleep (must reboot), and it works really slow.
The real solution is already inside the kernel. There’s a driver called brcm80211, containing the module brcmsmac, the problem is that for kernels prior to 3.1 it doesn’t handle 0×0576, which is what we have.
It only handles 43224 of ID 0×4353.
You can have a look on PCI IDs list on both of these links.
Kernel 3.0: http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=drivers/staging/brcm80211/brcmsmac/wl_mac80211.c;h=aa0d127427912531a21f54cfcf447c3a2236764a;hb=e9d23be2708477feeaec78e707c80441520c1ef6
Kernel 3.1: http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=drivers/staging/brcm80211/brcmsmac/mac80211_if.c;h=3cb92fc0391a962d33d40ae411dd4550e05f0510;hb=9bb1282f6a7754955c18be912fbc2b55d133f1b9
In my tries, I recompiled the kernel that ships with ubuntu (3.0.0-15) adding the necessary code to brcmsmac and it works flawlessly. An easier solution to use brcmsmac would be to install the packaged Kernel 3.1, though I didn’t try that one.
Love the blog
Wow, I like the way you put that.
thanks for share!