b43 and b43legacy

The b43 drivers (bcm43xx in mainline kernels, b43 and b43legacy in wireless-2.6 and 2.6.24 and later) are drivers for the 802.11 B/G family of wireless chips Broadcom produces. The choice of which driver your card uses depends on the revision level of the 802.11 core. This number is read by driver ssb, and the correct choice for your device is made at that point. Note: If your card is a BCM4306 Rev 2, or only has 802.11b capability, it uses b43legacy. All other models use b43.

FAQ - Frequently asked questions

Please read this whole document and the FAQ before asking any questions to the developers.

caveats

All Broadcom chips require firmware that is loaded onto the wireless chip before it can operate. See below.

If you have an USB device with Broadcom chip, please try the RNDIS driver. The b43/b43legacy driver will never support this device.

Known PCI devices

Whether a PCI device is supported by the b43/b43legacy driver can be found out with the lspci command:

lspci -vnn | grep 14e4

The command will result in a string similiar to this example:

0001:01:01.0 Network controller [0280]: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller [14e4:4318] (rev 02)

You should ignore anything, except the last part inside of the [ ] brackets. In the table below you can check whether your device is supported.

PCI-ID

State

Chip

Driver

14e4:4301

supported

BCM4301?

b43legacy

14e4:4306

supported

BCM4306

b43legacy?

14e4:4307

supported

BCM4306

b43

14e4:4311

supported

BCM4311

b43

14e4:4312

supported (802.11g only)

BCM4312 802.11a/b/g

b43

14e4:4312

not supported - ID is duplicated

BCM4312 802.11b/g

b43

14e4:4315

in progress

BCM4312 802.11b/g - low power

b43

14e4:4318

supported

BCM4318

b43

14e4:4319

supported

BCM4311?

b43

14e4:4320

supported

BCM4306

b43

14e4:4321

not supported

?

b43

14e4:4324

not supported?

?

b43

14e4:4325

not supported

?

b43

14e4:4328

not supported

?

b43

14e4:4329

not supported

?

b43

14e4:432b

not supported?

?

b43

Note that the PCI-ID is _not_ in direct correlation with the Chip-ID. The Chip-ID is printed to the kernel log by the b43 driver on startup (example):

b43-phy0: Broadcom 4318 WLAN found

Often the PCI-ID equals the Chip-ID, but that's not always the case and it's a constant source of confusion.

Supported chip types

Supported in wireless-testing/compat-wireless-2.6

unsupported chips

available devices

Please see the device list.

features

working

not working yet

donations

Many people have donated money, hardware or other services to make this driver possible. Thanks! Please see the donations page for details.

support

IRC channel
irc.freenode.net #bcm-users (English please)
Mailing list

http://lists.berlios.de/mailman/listinfo/bcm43xx-dev

device firmware

firmware installation

The Broadcom wireless chip needs software, called "firmware", that runs on the wireless chip itself during operation. This firmware is copyrighted by Broadcom and it must be extracted from Broadcom's proprietary drivers. To get such firmware on your system, you must download the driver from a legal distribution point, as noted below. Then you must extract the firmware from that Broadcom driver by using b43-fwcutter (or bcm43xx-fwcutter) and install it in the special directory for firmware - usually /lib/firmware. Please note that the firmware from the binary drivers is Copyrighted by Broadcom Corporation and must not be redistributed.

Some distributions have special methods for installing the firmware. In general these consist of a special command entered at a terminal. Because the proprietary driver containing the firmware cannot be included in the distribution, you will need a working connection to the Internet. Please post details for distros that are missed at bcm43xx-dev@lists.berlios.de .

  1. Fedora 10/11/12/13 use the following commands:
    • su -

    • yum install b43-fwcutter wget

      • when you are asked "Is this ok [y/N]:" answer "Y" (and press "Enter)
      • Now you have installed b43-fwcutter tool for extracting firmware from windows driver and download tool called wget. Now you need to download windows driver.
    • wget http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2

      • Now decompress, extract and copy firmware to /lib/firmware directory.
    • tar xjf broadcom-wl-4.80.53.0.tar.bz2

    • cd broadcom-wl-4.80.53.0/kmod"

    • b43-fwcutter -w /lib/firmware/ wl_apsta.o

  2. openSUSE 11.0 and 11.1 use the following command:
    • sudo /usr/sbin/install_bcm43xx_firmware

  3. in latest versions of Ubuntu (all flavors) and Debian just need to install the b43-fwcutter package:
    • sudo apt-get install b43-fwcutter

      • when you are asked "Fetch and install firmware?" answer "Yes" (just press "Enter)
  4. Gentoo systems supply a pre-compiled binary for b43-fwcutter. You need to "emerge b43-fwcutter", and then follow the instructions below to download the Broadcom driver. The line that invokes b43-fwcutter will need to be changed to execute the program emerged above.
  5. Mandriva's graphical network card configuration tool, drakconnect, will extract the firmware from the Broadcom driver, which must be downloaded before configuring the card. For versions through 2008 Spring, you will need the V3 driver described below. Beginning with 2009, you will need either the V3 or V4 driver depending on whether your device uses b43legacy or b43. Either the wget command below, or a browser download will get the appropriate file.

Note: If you cannot use your distribution's packages, you need to have a compiler and headers for libc installed. The reason for this requirement is that you will have to build fwcutter.

There are different versions of firmware and tools you may need:

Driver

Kernel

Firmware

Firmware extractor

Instructions

b43

Linux-2.6.24, including 2.6.24-rcX and 2.6.24.Y

4.80.53.0

b43-fwcutter v. 12

Go

b43

Linux-2.6.25 and newer, compat-wireless-2.6 package, current GIT trees

4.150.10.5

b43-fwcutter v. 12

Go

b43

Linux-2.6.31 and newer, compat-wireless-2.6 package, current GIT trees - for LP-PHY cards

4.174.64.19

b43-fwcutter from Git tree

Go

b43legacy

Any

3.130.20.0

b43-fwcutter v. 12

Go

bcm43xx (deprecated)

Any

3.130.20.0

bcm43xx-fwcutter v. 6

Go

To accomplish this task, do the following:

You are using the b43 driver from linux-2.6.24

If you are using the b43 driver from linux-2.6.24, follow these instructions.

Use version 012 of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:

wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-012.tar.bz2
tar xjf b43-fwcutter-012.tar.bz2
cd b43-fwcutter-012
make
cd ..

Use version 4.80.53.0 of Broadcom's proprietary driver.
Download and extract the firmware from this driver tarball:

export FIRMWARE_INSTALL_DIR="/lib/firmware"
wget http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2
tar xjf broadcom-wl-4.80.53.0.tar.bz2
cd broadcom-wl-4.80.53.0/kmod
sudo ../../b43-fwcutter-012/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o

Note that you must adjust the FIRMWARE_INSTALL_DIR path to your distribution. The standard place where firmware is installed to is /lib/firmware. However some distributions put firmware in a different place.

You are using the b43 driver from linux-2.6.25 or newer

Follow these instructions if you are using the b43 driver from linux-2.6.25 and newer or compat-wireless-2.6, or from any current GIT tree.

Use version 012 of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:

wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-012.tar.bz2
tar xjf b43-fwcutter-012.tar.bz2
cd b43-fwcutter-012
make
cd ..

Use version 4.150.10.5 of Broadcom's proprietary driver.
Download and extract the firmware from this driver tarball:

export FIRMWARE_INSTALL_DIR="/lib/firmware"
wget http://mirror2.openwrt.org/sources/broadcom-wl-4.150.10.5.tar.bz2
tar xjf broadcom-wl-4.150.10.5.tar.bz2
cd broadcom-wl-4.150.10.5/driver
sudo ../../b43-fwcutter-012/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta_mimo.o

Note that you must adjust the FIRMWARE_INSTALL_DIR path to your distribution. The standard place where firmware is installed to is /lib/firmware. However some distributions put firmware in a different place.

You are using the b43 driver with an LP-PHY card (e.g. BCM4312)

Follow these instructions if you are using the b43 driver from linux-2.6.32 and newer or compat-wireless-2.6, or from any current GIT tree, and have a device with a low-power PHY.

Use the current Git version of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:

git clone http://git.bu3sch.de/git/b43-tools.git
cd b43-tools/fwcutter
make
cd ..

Use version 4.174.64.19 of Broadcom's proprietary driver. (The tarball is mislabeled as "4.178.10.4", but it is actually 4.174.64.19.)
Download and extract the firmware from this driver tarball:

export FIRMWARE_INSTALL_DIR="/lib/firmware"
wget http://downloads.openwrt.org/sources/broadcom-wl-4.178.10.4.tar.bz2
tar xjf broadcom-wl-4.178.10.4.tar.bz2
cd broadcom-wl-4.178.10.4/linux
sudo ../../fwcutter/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o

Note that you must adjust the FIRMWARE_INSTALL_DIR path to your distribution. The standard place where firmware is installed to is /lib/firmware. However some distributions put firmware in a different place.

You are using the b43-legacy driver

If you are using the b43legacy driver, follow these instructions.

Use version 012 of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:

wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-012.tar.bz2
tar xjf b43-fwcutter-012.tar.bz2
cd b43-fwcutter-012
make
cd ..

Use version 3.130.20.0 of Broadcom's proprietary driver.
Download and extract the firmware from this driver:

export FIRMWARE_INSTALL_DIR="/lib/firmware"
wget http://downloads.openwrt.org/sources/wl_apsta-3.130.20.0.o
sudo ./b43-fwcutter-012/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta-3.130.20.0.o

Note that you must adjust the FIRMWARE_INSTALL_DIR path to your distribution. The standard place where firmware is installed to is /lib/firmware. However some distributions put firmware in a different place.

You are using the deprecated bcm43xx driver

If you are using the old deprecated bcm43xx driver, follow these instructions.

Use version 006 of bcm43xx-fwcutter.
Download, extract the bcm43xx-fwcutter tarball and build it:

wget http://bu3sch.de/b43/fwcutter/bcm43xx-fwcutter-006.tar.bz2
tar xjf bcm43xx-fwcutter-006.tar.bz2
cd bcm43xx-fwcutter-006
make
cd ..

Use version 3.130.20.0 of Broadcom's proprietary driver.
Download and extract the firmware from this driver:

export FIRMWARE_INSTALL_DIR="/lib/firmware"
wget http://downloads.openwrt.org/sources/wl_apsta-3.130.20.0.o
sudo ./bcm43xx-fwcutter-006/bcm43xx-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta-3.130.20.0.o

Note that you must adjust the FIRMWARE_INSTALL_DIR path to your distribution. The standard place where firmware is installed to is /lib/firmware. However some distributions put firmware in a different place.

bug reporting

You should send a message to the b43/b43legacy mailing list at bcm43xx-dev@berlios.de containing ALL of the following:

uname -a

lspci -vvn|grep 43 -A7

dmesg

In addition the following may be of interest to developers:

bcm43xx, b43legacy, b43, softmac,... the full story

The bcm43xx is the old deprecated driver. It is using the ieee80211 + softmac libraries of code shared with other drivers. This stack is deprecated and being replaced by the new mac80211 stack. A new stack implies brand new, re-written driver(s): here come b43 and b43legacy.

What's the difference between b43legacy and b43?

b43 offers a newer codebase and hardware crypto support. Broadcom did not release any version 4 firmware files for some older boards, possibly due to memory constraints on the cards themselves. Stuck with firmware version 3, these cards must use b43legacy which doesn't have hardware crypto support because that has not been reverse engineered completly for version 3 firmware.

bcm43xx

b43legacy

b43

needs firmware

version 3

version 4

extracted by

bcm43xx-fwcutter

b43-fwcutter

depends on

softmac

mac80211

b43legacy should be used on all 4301 and 4303 cards. 4306 and 4309 cards with a MAC core revision of 4 or less should also use b43legacy. b43 should be used on all other cards. You can safely have both versions built on the same system. The full MAC core version is printed in the kernel logs when "SSB debugging" is enabled in KConfig and the driver finds a board. Type "dmesg" to see it. If you are unsure and don't know what we are talking about here, always build both b43 and b43legacy (and get firmware for both too). The kernel autoloader will automatically do the right thing and load the correct driver for your device.

related tools

SPROM WRITING IS BROKEN ON RECENT KERNELS.

external links