Enabling a Dell Wireless 1370 network adapter (BCM4328) on Ubuntu Linux

After three recent virus infections on Windows XP and Windows 7 (including at least one rootkit infection), I turned to Ubuntu Linux as a safer operating system. Two of the PCs were blessed with Atheros-based wireless network adapters, which are well-supported on Linux. The other laptop, a Dell Inspiron 2200, is blessed with one of those infamous Broadcom chipsets.

Supposedly, the BCM4328 (rev 02) wireless chipset is supported on Linux, but as of Ubuntu Desktop 11.04 and Linux Mint 11, it doesn’t work reliably. So I turned to the old tried-and-true ndiswrapper to run the BCM4328 Windows driver under Linux.

ndiswrapper conflicts

The process was nowhere near as straightforward as I expected. Ubuntu users since 6.04 have experienced with ndiswrapper conflicts with any of the following kernel modules:

  • bcm43xx
  • b43
  • b43legacy
  • ssb
  • b44

Resolution

  1. Blacklist the conflicting modules: echo -e “blacklist bcm43xx\nblacklist b43\nblacklist b43legacy\nblacklist ssb\nblacklist b44” | sudo tee -a /etc/modprobe.d/blacklist.conf

  2. Install the Windows driver into ndiswrapper: sudo ndiswrapper -i ~/drivers/bcmwl5.inf sudo ndiswrapper -l sudo ndiswrapper -m sudo depmod -a sudo modprobe ndiswrapper

  3. Configure nm-applet to load ndiswrapper: echo -e “\nndiswrapper\n” | sudo tee -a /etc/modules

  4. Create a boot script to unload and re-load the conflicting kernel modules in the right order (thanks to levmatta):
    1. Create a file in /etc/init.d/ndiswrapper with this text: #! /bin/sh ### BEGIN INIT INFO # Provides: ndiswrapper # Required-Start: # Required-Stop: # Default-Start: S # Default-Stop: # Short-Description: enable to load ndiswrapper # Description: enable to load ndiswrapper ### END INIT INFO

      rmmod b44 rmmod ohci_hcd rmmod ssb rmmod ndiswrapper modprobe ndiswrapper modprobe ssb modprobe ohci_hcd modprobe b44

      ############# end file ############

    2. Set the file access permissions: sudo chmod 755 /etc/init.d/ndiswrapper

    3. Set this script to run at startup: sudo ln -s /etc/ndiswrapper /etc/rc2.d/S99ndiswrapper

  5. Reboot.

This worked for me on Linux Mint 11, which is based on Ubuntu 11.04. Your mileage may vary.

References

Written on October 4, 2011