Broadcom wireless

From ArchWiki
Revision as of 05:59, 2 February 2011 by Karper (talk | contribs) (Getting the driver: Added information about b43 driver. Some minor todo's remain — notably, break up the code block for b43-fwcutter...)
Jump to: navigation, search


Broadcom has been notorious in its support for its wifi cards on linux. Until recently, most Broadcom chips were entirely unsupported or required the user to tinker with firmware. A limited set of wireless chips were supported by various reverse-engineered drivers (brcm4xxx, b43 etc). The reverse engineered b43 drivers have been in the kernel since 2.6.24.

In August 2008, Broadcom released the 802.11 Linux STA driver officially supporting broadcom wireless hardware on linux. These are restrictively licensed drivers, but Broadcom promised to work towards a more open approach in the future. They do not work with hidden ESSID's.

In September 2010, Broadcom finally released fully open source drivers for its hardware. This driver, brcm80211 has been included into the kernel since 2.6.37.

At the time of writing, there are three choices for users with Broadcom wifi chips:

  • brcm80211
  • broadcom-wl
  • b43

Determine which driver you need/can use

First, let's determine your card's PCI-ID. Type the following (case-sensitive) command into a console:

$ lspci -vnn | grep 14e4

If your card is in the following list, you can use the brcm80211 driver:

[14e4:4727] BCM4313
[14e4:4353] BCM43224
[14e4:4357] BCM43225

A more up-to-date list may be found here.

If your card is in the following list, you can use the broadcom-wl driver:

[14e4:4311] BCM4311
[14e4:4312] BCM4311
[14e4:4313] BCM4311
[14e4:4315] BCM4312
[14e4:4727] BCM4313
[14e4:4328] BCM4321
[14e4:4329] BCM4321
[14e4:432a] BCM4321
[14e4:432b] BCM4322
[14e4:432c] BCM4322
[14e4:432d] BCM4322
[14e4:4353] BCM43224
[14e4:4357] BCM43225
[14e4:4358] BCM43227
[14e4:4359] BCM43228

A more up-to-date list may be found here.

If your card is not in the above lists, you may need to use the b43 or b43legacy drivers. A somewhat more complete list of supported hardware can be found here. Note that several cards are supported by more than one driver.

Getting the driver


The brcm80211 driver is included in the kernel since 2.6.37. No further action is necessary on the part of the user.


The drivers are included in the kernel since 2.6.24.

Loading the b43/b43legacy kernel module

Verify which module you need by looking up your device here. You can also check by computer model here. In Template:Filename, blacklist the other module to prevent possible problems/confusion:

MODULES=(... !b43legacy b43)


MODULES=(... !b43 b43legacy)

Install the appropriate b43-firmware or the b43-firmware-legacy package from AUR.

In a new folder, execute the following commands.

sudo pacman -S b43-fwcutter
export FIRMWARE_INSTALL_DIR="/lib/firmware"
tar xjf broadcom-wl-
cd broadcom-wl-
sudo b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o

Restart your computer and configure your device as normal.


For users of the broadcom-wl driver, there is a PKGBUILD available in AUR. You can also download this driver directly from Broadcom. However, the PKGBUILD method is strongly encouraged, as that way, pacman will track all the files.

Loading the wl kernel module

The wl module may need to be manually loaded if there are other usable modules present. Before loading the wl module, remove the b43 or other module that may have been automatically loaded instead:

# rmmod b43

Load the wl module

# modprobe wl

The wl module should autoload lib80211 or lib80211_crypt_tkip. Check with lsmod to see if this is the case. If not, you may need to add that module as well.

modprobe lib80211


modprobe lib80211_crypt_tkip

If you installed the driver directly from Broadcom, you may also need to update the dependencies:

# depmod -a

To make the module load at boot, add wl (and lib80211/lib80211_crypt_tkip, if needed) to your modules array in Template:Filename. You can also blacklist other modules to prevent them from loading:

MODULES=(... wl !b43 !ssb...)


Wifi card does not show up

  • If you use the broadcom-wl driver, check if you are loading the correct modules. You may need to blacklist the b43 and ssb modules to prevent them from loading automatically in the MODULES array in Template:Filename.
MODULES=( lib80211 wl !b43 !ssb )

Check if you updated your module dependencies:

# depmod -a
  • Be sure to try ifconfig -a, instead of just ifconfig since the latter only shows interfaces that are up.
  • You may need to restart to see the device appear in iwconfig

Wifi card does not work after a kernel upgrade (broadcom-wl)

Users of the wl module will find that the module does not work after a kernel upgrade. This is because the driver is compiled with the current kernel. Rebuild the broadcom-wl package with the new kernel installed and update the module.

Wifi card does not work when resuming from suspend (brcm80211)

The brcm80211 module needs to be unloaded before suspend and reloaded upon resume. The pm-utils page explains how to do this. If the file doesn't already exist, create a file called modules or config in /etc/pm/config.d/ and add/modify the following line:


Now, the card should resume working correctly.

Interfaces swapped (broadcom-wl)

Users of the broadcom-wl driver may find their ethernet and wifi interfaces swapped. The udev page explains how to solve this. Create a file called Template:Filename and bind the MAC address of each of your cards to a certain interface name:

SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="eth0"
SUBSYSTEM=="net", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="eth1"

Ensure that the interface name appears correctly in Template:Filename and other configuration files that refer to it.

Miscellaneous User notes

If you've followed the Speed_Up_udev advice, you'll see that the modules you try to prevent loading with a ! will load anyway. That's because the steps on that page (and I missed this reading it the first time) will effectively bypass the MODULES=() line in Template:Filename. Yeah, there's a section that explains what you need to do if you're blacklisting modules, but honestly I didn't notice any boot-time savings so I reverted to the original Template:Filename.

In my Dell Inspiron Laptop, i have a Broadcom BCM4401 Ethernet card and a Broadcom BCM4328 Wireless card. If I just remove b43, I can load the wl driver, but no wireless card shows up. However, if i first remove the b44 (and ssb) driver for my ethernet card, and THEN load the wl driver, I get a wireless eth0. Afterwards, I can load b44 again, to have an ethernet eth1.