Monday, July 28, 2008

Getting a Broadcom BCM4310 wireless card up and running in Linux

I recently purchased a Dell XPS M1530 laptop, and it is by all accounts a great computer, with a lightning-fast processor and a hefty graphics card. Awed by the sheer power of the machine when I was choosing the specs, I completely forgot to check whether each piece of hardware included would be fully supported under the GNU/Linux operating system, which I prefer to the included Vista.

As it happens, the computer shipped with a Broadcom wireless chipset, which is not well supported because the company does not provide enough information to the open-source community to write drivers. The firmware is proprietary, so it would not be included in any Linux distribution. I chide myself for accidentally supporting a company hostile to the free-software movement, but the upside is that bad hardware means a chance to delve deeper in my favorite OS and learn things I wouldn't have had to with my plain ol' Intel PRO/Wireless 2200BG.

So I found these instructions on the openSUSE forums about ndiswrapper, which acts as a wrapper for native Windows drivers and allows Linux to use them, and have modified them to be applicable to more distributions. So in case anyone needs to get that Broadcom BCM4310 wireless card working, here goes. (For commands preceded by #, run as root or preface with sudo. Thanks to the openSUSE forums for providing the meat of these instructions.)


  1. I assume you have already confirmed the existence of a Broadcom card on your system with $ lspci | grep -i broadcom and plugged in the laptop to a wired network.

  2. Install the package b43-fwcutter, which will automatically download and install the firmware for the wireless card. On Ubuntu/Debian: # apt-get install b43-fwcutter.

  3. Install ndiswrapper and, if necessary, the related kernel module, such as ndiswrapper-kmp-default on openSUSE. On Ubuntu, the kernel module is included, but install ndiswrapper-common and ndiswrapper-utils: # apt-get install ndiswrapper-common ndiswrapper-utils.

  4. Remove conflicting modules/drivers from /etc/modprobe.d/blacklist. Use your favorite text editor (e.g. # vim /etc/modprobe.d/blacklist) and add to the bottom:

    • blacklist bcm43xx

    • blacklist ieee80211

    • blacklist ieee80211softmac

    • blacklist ieee80211_crypt

    • blacklist b43 (yes, this is correct—you need to remove the native driver because you're going to replace it)


  5. In your terminal, download the Windows drivers (or, if you have a Windows partition, just copy the .inf and .sys files from C:\Drivers or wherever they are): $ wget http://www.wikilinux.netsons.org/Broadcom%20drivers.tar.bz2.

  6. Unzip the archive and enter the directory: $ tar xvjf *.tar.bz2 && cd Broadcom...

  7. Run the ndiswrapper driver installer: # ndiswrapper -i bcmwl5.inf.

  8. Run # ndiswrapper -l (lowercase "L") to confirm that the "driver installed" message appears.

  9. To tell the ndiswrapper module to load automatically on boot, run # ndiswrapper -mi.

  10. To make sure the module is running in the current session, run # modprobe ndiswrapper (not sure whether this is necessary on Ubuntu).

  11. Now, when you run $ ifconfig -a, the wlan0 network interface should appear. And you're done! Configure the wireless connection using your favorite method (such as NetworkManager).

No comments: