8

Ubuntu 9.04 – Installing the BCM4309 using NDISwrapper

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)

It starts:

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.

ndiswrapper -l

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.

mkdir ~/Download/Wireless
cd ~/Download/Wireless

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.

wget ftp://ftp.hp.com/pub/softpaq/sp33001-33500/sp33008.exe
(Alternate: http://www.megaupload.com/?d=3DA47D98)

Unpack the executable file so that the individual driver can be isolated:

cabextract ./sp33008.exe

Now for the actual installation. Insert the driver into ndiswrapper.

sudo ndiswrapper -i bcmwl5.inf

Confirm it loaded.

ndiswrapper -l

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.

8 Comments

  1. Thank you very much for taking the time to post this information. Your instructions were very clear and now my wireless is working!

  2. Thank you indeed for this detailed report. I have the exact same problem with BCM4306 14e4:4320(rev 02) on Linux Mint 7. I followed the same guide you did and tried Wicd also, to no avail. Ndiswrapper will not authenticate on my WPA-PSK network.
    In the end, I went back to the b43legacy driver with fwcutter. It's unstable and extremely slow but it's my only option 🙁

  3. Thank you SO very much for this post! I have been searching HIGH and LOW for a solution and this finally did the trick. I suspect, however, that the card was being set to only search for 802.11a signals, and after I followed your instructions to remove modules and then reload in the proper order, I noticed that it was now searching for 802.11g signals.

    For the reference, I'm running Ubuntu 9.04 with Gnome on a Dell Inspiron 600m laptop with the following wifi card: Broadcom BCM4309 14e4:4324 (rev 03)

    Don't know why, but it works, and I don't ask questions!

    THANK YOU!!!

  4. As many others have said, thank you for this guide; it's the best one I have found thus far. I now am able to connect to my WPA encrypted network, although it still acts as though no connection is made once I open firefox or try and do anything else with the connection. (Dell D610, BCM4309 802.11a/b/g, Ubuntu 10.04) Still searching…

  5. It took me 3 days to stumble upon your guide. Wish I had found it sooner!

    Many thanks

  6. Thanks for all this, it indeed helps. I had to go to the very end (loading modules in the wrong order).

    System: Linux Mint Katya 11.04 32 Bit

Leave a Reply