Unfortunately all the open-source drivers for the Broadcom cards leave a lot to be desired. On the BCM4309, the b43legacy driver seemed to be the only one that worked but it was unstable as hell, connecting only at 1 MBps and constantly failing to authenticate with my wireless router and never connecting at all on my school’s network. On the BCM4318 I picked up to replace it, it authenticates just fine with my home router but fails authentication quite often on my school’s network.
Many people have reported success using NDISwrapper to use Windows native drivers to control the wireless hardware. I hate using NDISwrapper since the project isn’t even maintained anymore and all the documentation that is supposed to be there has vaporized. Through a lot of frustration, trial, error, and the help of a certain bit of Ubuntu documentation I did manage to get the BCM4309 working using NDISwrapper. Below is an explanation of the steps involved.
CAVEAT: Using NDISwrapper, I can now connect to my school’s network great despite the signal strength not being as good as what the b43legacy driver reported. The retarded thing is that using NDISwrapper, I cannot connect to my home network whatsoever. I can see available networks but cannot connect to my WPA-PSK/TKIP-encrypted network. Be advised.
IDs for the hardware in question (output of lspci and lspci -n):
02:02.0 Network controller: Broadcom Corporation BCM4309 802.11a/b/g (rev 02)
02:02.0 0280: 14e4:4324 (rev 02)
Install the necessary utilities we will be working with.
sudo apt-get install ndiswrapper-utils-1.9
sudo apt-get install cabextract
If you’re like me and previously installed NDISwrapper and mucked around with it in frustration, we need to make sure all the previous drivers attempted have been removed.
You should not see anything labeled “bcmwl5” on the list. If you do, then do:
sudo ndiswrapper -r bcmwl5
Now we need to add all the dysfunctional b43 modules to the blacklist to prevent them from loading at boot; we are doing this because NDISwrapper will do this job for them.
echo -e ‘blacklist bcm43xxnblacklist wlnblacklist b43nblacklist b43legacy’ | sudo tee -a /etc/modprobe.d/blacklist
Make a generic directory somewhere to store the downloaded drivers and switch to it. You may not have a ~/Download folder; just create a “Wireless” folder under whatever directory you do use for downloads.
Download the requisite Windows driver. This was the one that worked for me; it was the one listed under step 2b of the referenced Ubuntu documentation earlier.
Unpack the executable file so that the individual driver can be isolated:
Now for the actual installation. Insert the driver into ndiswrapper.
sudo ndiswrapper -i bcmwl5.inf
Confirm it loaded.
The output should look like:
bcmwl5 : driver installed
device (14E4:4324) present (alternate driver: ssb)
With the following steps we will load the newly wrapped driver. (Not sure what invoking depmod does.)
sudo depmod -a
sudo modprobe ndiswrapper
The following steps make a backup of /etc/network/interfaces and make some additions to it that I don’t understand the purpose of.
sudo cp /etc/network/interfaces /etc/network/interfaces.orig
echo -e ‘auto loniface lo inet loopbackn’ | sudo tee /etc/network/interfaces
Write the configuration to file.
sudo ndiswrapper -m
Make it so that ndiswrapper automatically loads at startup.
echo ‘ndiswrapper’ | sudo tee -a /etc/modules
Not sure what this is doing either but since it was in the documentation I did it anyway:
echo ‘ENABLED=0’ | sudo tee -a /etc/default/wpasupplicant
Reboot; see if works. In the GNOME Network Manager you should see wireless networks available. If everything is working for you, then you’re done. If not, continue.
If you don’t see anything new in your Network Manager, then let’s check something. Please try these steps; it turns out this was the reason I could never get NDISwrapper to work in the first place and caused me endless frustration.
lshw -C network
If you see “module=ssb” shows up in the output then let’s try temporarily removing all potentially unnecessary modules and re-adding only the important ones. You can copy and paste this entire block into your terminal.
sudo rmmod b43
sudo rmmod b44
sudo rmmod b43legacy #this step added Apr 27 2008
sudo rmmod wl #this step added Sep 20 2008
sudo rmmod ssb
sudo rmmod ndiswrapper
sudo modprobe ndiswrapper
sudo modprobe ssb
sudo modprobe b44 #this step added May 1 2008
Your card should definitely be detected and visible in the Network Manager now. Try lshw -C network again; this time you should see “module=ndiswrapper” instead of what we saw earlier.
What this just proved was that Ubuntu is loading modules in the wrong order; it is a known bug. If the previous steps worked for you then make it permanent with the following command:
echo -e ‘#Hardy ssb/ndiswrapper workaround, added’ `date` ‘ninstall ndiswrapper modprobe -r b43 b44 b43legacy ssb; modprobe –ignore-install ndiswrapper $CMDLINE_OPTS; modprobe ssb; modprobe b44;’ | sudo tee -a /etc/modprobe.d/ndiswrapper
At any rate, you should have a wireless connection that can at least detect wireless networks. As mentioned earlier, I am currently having trouble actually connecting to some of them and further research will follow.
UPDATE 06/28: I did some research into the inability to connect to WPA networks and found two things that might be contributing to the problem. The first is that Network Manager is a little borked and keeps introducing garbage into the authentication process. While I was experiencing the problem described (NM would try to connect and eventually display the box to enter the SSID and passkey over and over again) I could not confirm the same symptoms.
Nevertheless I assumed Network Manager itself might be the problem, so I installed the alternate network manager Wicd. Even with Wicd, I was still experiencing the same problem– it gets stuck during the “validating authentication” stage. This is happening with “wext” selected as the WPA supplicant driver; trying to select “NDISwrapper” as the WPA driver just results in Wicd not even attempting to make the connection– it dies instantly.
The second factor that was suggested might have been contributing to the problem was that according to one of the developers of Wicd, Broadcom cards don’t work too well with hidden SSIDs. Since my router was set to hide its SSID, I tried disabling this function but it did nothing to solve the problem using both GNOME Network Manager as well as Wicd.
My card continues to be unable to connect to my WPA-secured network.