Linksys WMP54GS with Broadcom BCM4306 chipset under Linux 2.6 kernel

For a long time (especially with the 2.4.x kernels), I’d been using a Linksys WUSB11-V26 with the Atmel RFMD 503 as the wireless NIC for my home network, using the at76c503 driver. It worked pretty well, but then I upgraded to a 2.6.x kernel and while it continued to work for a short time, when we suffered a prolonged power outage, the NIC refused to work when power came back. I discovered that my particular WUSB11-V26 only worked with the 0.90.2-140 revision of the firmware (newer firmwares wouldn’t turn the radio on) — once I learned this, everything was fine, I’d just hack the driver source to use the older firmware and everything was fine. However, when upgrading to 2.6.x, I discovered this meant also needing to upgrade to a more recent version of the at76c503 driver, which was fine since my NIC already had the 0.90.2-140 firmware downloaded to it. I built the new driver, installed it, and everything worked fine — until the powerloss. Watching the latest at76c503 driver try to download the firmware resulted in an "unexpected opcode 146" error. So, I decided it was time to buy a slightly better supported wireless NIC and stop fussing with this piece of junk.

Today, I ran out to CompUSA (instant gratification!) and bought myself a Linksys WMP54GS, which you can get at Amazon.com for around $59.99. I decided to go the PCI card route because I wanted to get 802.11g, but my host only has USB 1.1 and I didn’t want to spend the money on a USB 2.0 PCI card in addition to a new USB wireless NIC. Not only that, but most USB NICs have dinky attached antennas, and the PCI card has a screw-on antenna that can be replaced with larger and presumably better antennas. This is important depending on where in the house I need to position the antenna to get the best signal and coverage.

Since I know that wireless NICs aren’t well supported under Linux for various reasons, I decided to log all I had to do to get this particular NIC working on my machine. I run Debian, but these instructions should help get you pointed in the right direction for the most part. I hope this mini-HOWTO proves useful to you if you are in the process of installing a WMP54GS PCI NIC too; leave a comment if it did (or didn’t — maybe I can help)!

Identify what you’ve got

First, identify what you’ve actually got. This is what my machine reports:

$ lspci
...
0000:01:0b.0 Network controller: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03)

$ lspci -n | grep 0000:01:0b.0
0000:01:0b.0 0280: 14e4:4320 (rev 03)

Install NdisWrapper

There’s no specific driver for the WMP54GS for Linux. The trick is to use NdisWrapper, a package which loads the WinXP drivers (!) under Linux — for better or worse, this apparently works. You can download the source tarball (ndiswrapper-1.1.tar.gz) or get the Debian package (ndiswrapper-source_1.1-1_i386.deb). Note: I struggled with the Debian ndiswrapper-source and ndiswrapper-utils version 1.0rc2 which installed but did NOT work — I couldn’t set the SSID using iwconfig at all. You must use version 1.1.

So, here are the steps to download, build, and install NdisWrapper for Debian systems:

$ cd /tmp
$ wget http://ndiswrapper.sourceforge.net/debian/ndiswrapper-source_1.1-1_i386.deb
$ dpkg -i ndiswrapper-source_1.1-1_i386.deb
$ cd /usr/src
$ gzip -dc ndiswrapper-source.tar.gz | tar xf -
$ cd modules/ndiswrapper
$ debian/rules binary-utils
$ debian/rules binary-modules
$ cd ..
$ dpkg -i ndiswrapper-utils_1.1-1_i386.deb
$ dpkg -i ndiswrapper-modules-2.6.10_1.1-1_i386.deb

Install the Linksys WMP54GS driver

At this point, you now have NdisWrapper installed. But, what about the actual WMP54GS drivers? You can pull them off the CD that came with the NIC, or you can download them. According to the NdisWrapper List wiki page, you want to download this WMP54GS_20040423.exe driver. Either way, you need the following three files:

Drivers/bcm43xx.cat
Drivers/BCMWL5.inf
Drivers/bcmwl5.sys

According to the NdisWrapper Installation wiki page, you don’t need to actually “install” the self-extracting EXE on a Windows machine. Just use a archive extraction program that understands self-extracting EXE’s and extract those three files that we need. Actually, I think we only need the .inf and .sys files, but I extracted the .cat file because it was the only other file in the directory. Once you’ve got those files extracted, you “install” them using the ndiswrapper tool:

# ndiswrapper -i BCMWL5.inf
Installing bcmwl5

# ndiswrapper -l
Installed ndis drivers:
bcmwl5 driver present, hardware present

Time to load the driver

If you’ve done all the previous steps correctly, at this point the only thing left to do is load the ndiswrapper kernel module, which in turn will load the bcmwl5 driver we just installed, and you should be in business.

# modprobe ndiswrapper

Verify that it loaded correctly by checking what got written to syslog. Here’s what got written to mine:

kernel: ndiswrapper version 1.1 loaded (preempt=yes,smp=no)
kernel: ndiswrapper: driver bcmwl5 (Linksys,02/19/2004, 3.50.21.11) loaded
kernel: ACPI: PCI interrupt 0000:01:0b.0[A] -> GSI 21 (level, low) -> IRQ 21
kernel: ndiswrapper: using irq 21
kernel: wlan0: ndiswrapper ethernet device 00:0f:66:e6:0d:37 using driver bcmwl5, configuration file 14E4:4320:1737:0015.5.conf
kernel: wlan0: encryption modes supported: WEP, WPA with TKIP, WPA with AES/CCMP

Configure the interface

After that, it was just a matter of configuring the wlan0 interface in /etc/network/interfaces and then issuing an ifup wlan0 to configure it. Here’s an idea of what I use:

auto wlan0
iface wlan0 inet static
wireless_essid Panoptic
wireless_mode ad-hoc
wireless_channel 10
address 10.0.0.1
netmask 255.255.255.0
broadcast 10.0.0.255
up dhcpd -q -cf /etc/dhcpd-wlan0.conf -pf /var/run/dhcpd-wlan0.pid -lf /var/lib/dhcp/dhcpd-wlan0.leases wlan0
down kill `cat /var/run/dhcpd-wlan0.pid`

Yes, I run a DHCP server bound to the wlan0 interface to provide IP addresses via DHCP to anyone connecting to the wireless network. Don’t worry, there’s iptables rules-a-plenty that lock it all down nicely, but that, my friends is for another time …

Update: If you want to set up WPA (Wi-Fi Protected Access), check out the WPA page on the ndiswrapper wiki.

Tags: , , , ,

Comments

  1. Dossy,

    I don’t know who you are, but I just wanted to thank you for this write-up. The installation worked perfectly on my fujitsu p5010d running suse 10.

    Thanks,
    andrew

  2. Curiously, did you do any testing with the SpeedBoost feature?

  3. Jason: No, I haven’t tested the SpeedBoost feature — actually, other wifi devices are currently all still 802.11b. No real need (or motivation) to upgrade to 802.11g yet. When I do, I’ll definitely check out whether the ndiswrapper setup can take advantage of SpeedBoost. Thanks for asking! Maybe someone else can share their experiences in the comments here.

  4. Dossy, Thank you for the help. I have tried all the other help files out there and none of them worked. After following your post here I got the wmp54gs working fine. I have had no issues since and speed is fine. Again thank you.
    Thomas

  5. Thank you very much…..that part I was missing was the modprobe ndiswrapper……my HP Broadcom card in my IBMR50 works great under knoppix4.02…..might go with suse 10 now cause VMware is free……for office and such

  6. well, you are my savior, but i’m still not finished yet. I did everything you did, smoothly, until after the modprobe. you say we have to edit /etc/network/interfaces , which does not exist! I’m using SuSE 10.0, and there’s not even a folder in /etc called network … any idea?

  7. Jad:

    On SuSE, you need to have the sysconfig package installed, which places its files in /etc/sysconfig/network. You can probably copy the ifcfg.template file in that directory to ifcfg-wlan0 and modify it to suit your needs. You may want to read the ifcfg-wireless manpage to understand what wireless-specific settings you can configure there.

    Hope this helps!

  8. I think it is very stupid to switch from the card with native drivers to card with windows drivers loaded using ndiswrapper – it is more unstable I think. With at76c503a you should get latest source and patches from debian or gentoo, apply them and build. Use latest firmware and latest driver and all will be ok. The problem is that MEPIS doesn’t support at76c503a out-ofthe box. It is enogh for me to switch to ubuntu.

  9. Maxim: That’s where you would be wrong. Atmel releases their firmware as binary-only, and the specific revision of the WUSB11-V26 didn’t work with their latest firmware (it wouldn’t turn the radio on). While I admire open source driver developers, if you can run the drivers that the manufacturer tested (i.e., the Windows drivers, via ndiswrapper), you at least know it’s going to work.

    For the Atmel chips, you had to choose between the atmelwlandriver which was being developed by someone at Atmel, I believe. Or, you could use Joerg Albert’s at7c503a driver. How would you know that the driver NOT developed by Atmel would be the better driver?

    Regardless, for the Broadcom BCM4306, this is a moot point: they won’t release spec. so open source native drivers for Linux won’t be developed, so ndiswrapper is the only choice at this point.

  10. 'Tom Kat' says:

    Precisely, re the Broadcom device and the use of a wrapper to use Win drivers.

    If it works, it gives you a working 802.11 facility under a *nix environment .. go with it and get on with the real business of using it.. not get too obsessed with the age-old ‘ferk using a win driver, if it aint native.. it sucks’ BS.

    I am gonna try the suggested method for getting the BC to work (yeah, like others who mentioned it, tried most of the few other guides and they all ferked up.. or lacked something important).

    So in anticipation of it working, this old virtual cat spirit (aka JustAnUnCoolCat as i was known in the world of mp3 player support circles) says a thank you for posting the outline and details of how you managed this – and hey, if i dont get no sucess.. hell, thanks anyway 😀

    ‘Tom Kat’

    *ducks to avoid open-source fanatic sourced incoming nukes and other flamewar ammo sent at high-speed in my direction* :p

  11. Dossy, I have been struggling with the WMP54GS card on my newly installed Ubuntu 6.0.6 Dapper Drake system. The guide you have written is excellent, and would have saved me 6 hours of headache. All i need to do is correctly configure wpa_supplicant. Hopefully all goes well! Will keep you posted! Kudos!

  12. Dossy, This doesn’t seem to work anymore. Secondly, I wondered if you have a solutions for x86_64. I’m trying to load this on a workstation running RHEL 4 U2 64 bit.

  13. Nathan: It still works for me, but I’m on x86-32, not x86-64. I have no idea if ndiswrapper supports ia64 yet. You’d also have to find the Windows x86-64 .sys driver to load, as well, which may not exist, yet, either.

    If you find the necessary Windows x86-64 driver for this card and get it working under Linux with ndiswrapper, please let me know! Thanks.

  14. Hi,

    I’m soon going to be switching my Windows system to Ubuntu Linux and I’ve know for a while that there are practially no dirvers for wireless cards that work this Linux.

    This guide is a lifesaver! I now actually know that I’ll be able to get my wireless card running on Linux.

    Thanks again.
    Rob. 🙂

  15. Thanks for this guide; it proved very useful!

    I would like to add that, on the dapper drake, these instructions didn’t work flawlessly. Upon checking dmesg, I saw I was getting the error

    bcm43xx: Error: Microcode “bcm43xx_microcode5.fw” not available or load failed.

    I had to use bcm43xx-fwcutter (in the universe repository for Dapper), as

    sudo bcm43xx-fwcutter -w /lib/firmware ./bcmwl5.sys

    to get it to work properly.

  16. anitsirK says:

    In regards to comment 15, I was getting the same error (bcm43xx: Error: Microcode “bcm43xx_microcode5.fw” not available or load failed.) in Dapper Drake. I found instructions that suggested blacklisting the bcm43xx driver (by adding the line “blacklist bcm43xx” to /etc/modprobe.d/blacklist). Upon rebooting, it works. The trick is to make Dapper not use the drivers built into the kernel, and instead use the ndiswrapper version.

  17. anitsirK: I believe newer Linux kernels which have the native driver module “bcm43xx” are supposed to work, now, eliminating the need for the ndiswrapper solution.

    If and when I get a chance, I’ll upgrade kernels and document the process on how to properly configure the bcm43xx driver, if it does indeed work.

  18. hi !
    This article is very good i have installed my wireless network drives but its not full configured yet.I m using suse 10.1. So need help. i followd your manuals n it worked like this
    ndiswrapper -i BCMWL5.inf
    bcmw15 driver installed

    ndiswrapper -l
    bcmw15 driver installed

    then i used yast n configured my wireless connection with option User Controlled with NetworkManager , Device name: wlan0, Device Type Wireless n used static ip 192.168.2.23 n last ESSID ‘Orbit’.
    But my wireless connection didnt start . dont know wat to do should i start something or do some other settings.
    Help me in that.
    Thanks.

  19. Sajid: What wireless are you trying to connect to on the other end? A wireless AP? Or, another wireless PC in Ad-Hoc mode?

  20. Hello Dossy,
    thanks for this FAQ! I’ve new info for Nathan (comment 12): I’ve got my BCM4318 working under FC5 x86_64.
    First I updated the kernel and other packages using yum. I’ve spent several evenings playing with native bcm43xx driver, but for my card it didn’t worked. Also on bcm43xx developer’s site the 4318 chip support is still marked as unstable.
    So I blacklisted the bcm43xx driver, removed from /etc/modprobe.conf and installed ndiswrapper. For my notebook model Acer offers only 32-bit driver, so I had to get 64-bit one for another model (Acer Ferrari 4000) and succeeded.
    I’m using it along with wpa_supplicant (using WPA2-AES) and dhclient.
    Regards,
    Jan

  21. honzikf: Thanks for the update! Can you share the download link to the 64-bit driver that you confirmed works?

  22. Hello Dossy,
    I downloaded the 64-bit driver from Acer’s european support FTP server: ftp://ftp.support.acer-euro.com/notebook/ferrari_4000/driver/winxp64bit/80211g.zip
    Regards,
    Jan

  23. Edgy Eft 6.10 Linksys WMP54GS with out internet connection

    1.Clean Installation of Edgy Eft 6.10
    2.Download and burn Alternate Edgy Eft 6.10 x86.iso
    3.Insert Alternate CD, Launch Synaptic, add CDROM
    4.Install ndiswrapper via Synaptec Package Manager
    5. $ lspci:
    01:08.0 Network controller: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03)

    6. Install the WMP54GS drivers. I grabbed mine from the CD that came with the NIC.

    $ sudo ndiswrapper -i WMP54GS.inf
    wmp54gs driver installed, hardware present

    $ sudo modprobe ndiswrapper

    7. Install networkmanager from Synaptic
    8. Blacklist bcm43xx driver
    Open a Terminal window
    Type “sudo pico etc/modprobe.d/blacklist”
    At the bottom add the lines
    # get rid of the default kernel drivers
    blacklist bcm43xx

    Reboot.
    That worked for me.
    Thanks again Dossy.

  24. Hey Dossy,

    Like to say thanks this helped me get me up and running under ubuntu fiesty fawn.

    If you could, do you think you can add in this howto that if you have the following card:

    00:0c.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02)

    which is also a wmpg54s then you need to get the following windows driver:

    WMP54GSa.inf and bcmwl5a.sys from the C:/Program Files/Linksys Wireless-G PCI Network Adapter with SpeedBooster/

    after installing the driver on your windows box (you have to finish the install process before you have access to these files as the setup.exe is a install shield and its very hard to get at the data as they are stored in binary form on disc)

    and thanks once again I love how fast this thing is under linux.

    Oh yea btw did you ever get a broadcom wireless card working on a mac-book or a mac computer? Im curious because I tried and after ndiswrapping I ended up getting computer freezing randomly after ~5min, but the NIC driver worked for those 5 minutes. This is probably due to trying to load a windows driver onto a mac thru linux ndiswrapper, the hardware must not be 100% compatabible.

    take care,
    matt gara

  25. Matt: thanks for the update, and no, I haven’t tried this on a Mac. Even though it’s an Intel Mac, I’d bet you’re right–the Windows drivers probably won’t work 100% on the Apple hardware. If you solve the problem, do stop by and let us all know how.

  26. honzikf says:

    Hello Dossy,
    I’m coming back after some time still surprised with good news. Native Broadcom support in kernel (b43 driver) has undergone big steps in last few kernels and I finally succeded with Dell 1490 WLAN card (0c:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11a/b/g [14e4:4312] (rev 01)) on Dell D620 laptop. I was two years failing on several distro’s even with ndiswrapper, but under Fedora 9 x86_64 recently updated I got wireless. Hoooray!
    Regards,
    Jan

Speak Your Mind

*