b43 and b43legacy
b43 and b43legacy are drivers for the 802.11 B/G/N family of wireless chips that Broadcom produces.
b43legacy: supports BCM4306 Rev 2 and cards that have only 802.11b capability
b43: supports all other models
Kernel automatically loads correct driver for the present hardware (it checks for revision of the 802.11 core).
Please read this whole document and the FAQ before asking questions to the developers.
Contents
Caveats
The b43/b43legacy drivers require proprietary firmware to be loaded onto the wireless chip before it can operate, see below.
If you have an Broadcom USB device, please use the rndis_wlan driver. The b43/b43legacy driver is not meant to support this device.
It is possible to use only one driver at a moment, they are conflicting each other. See Switching between drivers for howto on choosing driver.
Known issues
- LP-PHY devices: DMA errors on some machines with kernel 2.6. Problem was fixed in 3.0. Using PIO (module param) can be used as workaround for 2.6.
BCM4318 chipset: AP mode does not work because of packet loss in high transmission rates. Hard to debug & fix.
- BCM4321: some cards do not work in DMA mode with kernel 3.1 and older. Problem was fixed in 3.2. A workaround for older kernel is to use PIO mode (b43.pio=1 module param).
Supported devices
To find out whether a PCI device is supported by the b43 or b43legacy drivers, issue this lspci command:
lspci -vnn -d 14e4:
The command will output a string similar 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)
Ignore everything, except the last part inside of the [ ]. Find that phrase in the below table to determine support.
PCI-ID |
Supported? |
Chip ID |
Modes |
PHY version |
Alternative |
14e4:0576 |
not tested |
BCM43224 |
? |
? |
wl/brcm80211 |
14e4:4301 |
yes (b43legacy) |
BCM4301 |
b |
B |
|
14e4:4306 |
yes (b43legacy) |
BCM4306/2 |
b/g |
G |
|
14e4:4307 |
yes |
BCM4306/3 |
b/g |
G |
|
14e4:4311 |
yes |
BCM4311 |
b/g |
G |
wl |
14e4:4312 |
yes |
BCM4311 |
a/b/g |
G (r8) |
wl |
14e4:4313 |
not tested |
BCM4311 |
a |
? |
wl |
14e4:4315 |
yes (2.6.33+) |
BCM4312 |
b/g |
LP (r1) |
wl |
14e4:4318 |
yes |
BCM4318 |
b/g |
G (r7) |
|
14e4:4319 |
yes |
BCM4318 |
a/b/g |
G |
|
14e4:4320 |
yes (b43legacy) |
BCM4306/2 |
b/g |
G (r1) |
|
yes |
BCM4306/3 |
? |
G (r2) |
|
|
14e4:4320 (USB) |
no (USB device) |
BCM4320 |
a/g |
? |
|
14e4:4321 |
partially in 2.6.39+ |
BCM4321 |
? |
N (r2) |
|
14e4:4322 |
no |
BCM4322 |
b/g/n |
N (r4) |
|
14e4:4323 (USB) |
no (USB device) |
BCM4323 |
a/b/g/n |
? |
ndiswrapper |
14e4:4324 |
yes (b43legacy) |
BCM4309 |
a/b/g |
G (r1) |
|
yes |
BCM4309 |
a/b/g |
G (r5) |
|
|
14e4:4325 |
yes (b43legacy) |
BCM4306/2 |
b/g |
G (r1) |
|
14e4:4328 |
partially in 2.6.39+ |
BCM4321 |
b/g/n |
N (r2) |
wl |
14e4:4329 |
partially in 2.6.39+ |
BCM4321 |
b/g/n |
N (r1) |
wl |
14e4:432a |
not tested |
BCM4321 |
a/n |
N |
wl |
14e4:432b |
partially in 2.6.39+ |
BCM4322 |
a/b/g/n |
N (r4) |
wl |
14e4:432c |
yes |
BCM4322 |
b/g/n |
N |
wl |
14e4:432d |
not tested |
BCM4322 |
a/n |
N |
wl |
14e4:4331 |
yes (3.2-rc3+) |
BCM4331 |
b/g |
HT (r1) |
|
14e4:4346 |
no |
BCM43236 |
a/b/g/n |
? |
|
14e4:4347 |
no |
BCM43236 |
a/b/g/n |
? |
|
14e4:4353 |
yes (3.1+) |
BCM43224 |
a/b/g/n |
N (r6) |
wl/brcm80211 |
14e4:4357 |
yes (3.1+) |
BCM43225 |
b/g/n |
N (r6) |
wl/brcm80211 |
14e4:4358 |
no (WIP) |
BCM43227 |
b/g/n |
? |
wl |
14e4:4359 |
not tested |
BCM43228 |
a/b/g/n |
LC NXN (r0) |
wl |
14e4:435a |
not tested |
BCM43228 |
? |
? |
wl |
14e4:4365 |
no |
BCM43142 |
? |
LCN40 (r3) |
|
14e4:4727 |
no (WIP) |
BCM4313 |
b/g/n |
LCN (r1) |
wl/brcm80211 |
14e4:a8d6 |
not tested |
BCM43222 |
? |
N (6) |
|
14e4:a8d8 |
yes (3.6+) |
BCM43224 |
a/b/g/n |
N (r6) |
|
14e4:a99d |
not tested |
BCM43421? |
? |
? |
wl |
Note that the PCI-ID is not in direct correlation with the Chip ID. Often the PCI-ID equals the Chip ID, but that is not always the case and it is a constant source of confusion.
Chips that are not supported include:
- 802.11a/n (5GHz) modes and power management are not yet supported HT phy cards (4331)
- The 802.11a part of the 4311 is not supported
BCM4320 (USB) - try rndis_wlan
- BCM4313 - chipset uses unsupported LCN PHY, we work on it
- All Full MAC chips with either SDIO or USB interfaces use brcmfmac
- All other Broadcom chipsets not listed above are not supported. Feel free to notify the devs via mailing list and/or IRC channel of newer chipsets.
For a list of available devices, please see the device list.
Support
Please note that we do not support wl or brcm80211 drivers.
- IRC: server is irc.freenode.net, channel is #bcm-users (English please)
Mailing list: http://lists.infradead.org/mailman/listinfo/b43-dev
Features
Working
- Station mode
- Mesh networking mode (b43 only)
- Access Point mode
- Ad-Hoc (IBSS) mode (b43 only)
- Monitor and Promisc mode.
- "Monitor while operating" and multiple monitor interfaces.
- In-Hardware traffic de/encryption (relieves your CPU).
- LEDs to signal card state and traffic.
- In-Hardware MAC address filter (b43 only; impossible on b43legacy hardware)
- Packet injection (with radiotap; no FCS injection currently though hardware supports it - a radiotap flag is being discussed for this)
- Bluetooth coexistence protection, if the bluetooth card is physically connected to the wireless chip. (Does not protect against external BT dongles)
- Probably something we forgot to add here.
Not working yet
- Interference mitigation.
- HT
- 40MHz channels
- 5GHz for N-PHY cards
- Probably something else that's not listed under "Works".
Device firmware installation
The Broadcom wireless chip needs proprietary software (called "firmware") that runs on the wireless chip itself to work properly. This firmware is copyrighted by Broadcom and 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, extract it, and install it. This is accomplished different ways by different Linux distributions, so please read the section for yours for the best results. You will need an alternate working internet connection (by Ethernet cable, for example) since the firmware cannot be included with the distro itself.
Post details for missing distributions at b43-dev@lists.infradead.org. Note: the firmware from the binary drivers is copyrighted by Broadcom Corporation and cannot be redistributed.
Fedora
With Fedora 10 and above, you should install wget and the b43-fwcutter tool (which will extract firmware from the Windows driver):
Next use the instructions here, skipping b43-fwcutter installation part.
openSUSE
openSUSE 11.3 and above includes a utility that will automatically download the firmware and install it into its proper location. With working Internet access, run the following commands:
Ubuntu/Debian
In recent versions of Ubuntu and Debian, installing the firmware-b43-installer package will handle everything for you:
1 sudo apt-get install firmware-b43-installer
You will be asked to automatically fetch and install the firmware into the right location. Again, you will need an internet connection.
Ubuntu Community Documentation
Ubuntu also has a page detailing the process of installing Broadcom wireless drivers on their community documentation. If you have internet access on the device that you want to install the b43 driver onto, follow this link: https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx#b43%20-%20Internet%20access . If you do not have internet access on the device that has a b43 supported broadcom wireless chipset and would like to use b43, follow this link instead: https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx#b43%20-%20No%20Internet%20access.
Note that you can only follow one of the two guides, not both.
Gentoo
Gentoo systems supply a pre-compiled binary for b43-fwcutter. You need to:
1 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.
Mandriva
See the instructions at http://wiki.mandriva.com/en/Installing_wireless_network_cards_using_the_b43_driver
Other distributions not mentioned above
Note: You need to have a compiler and headers for libc installed, since you will have to build fwcutter from source
Install b43-fwcutter
Use version 017 of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:
The integrity of the tarball should be verified with the PGP signature: http://bues.ch/b43/fwcutter/b43-fwcutter-017.tar.bz2.asc
If you are using the b43 driver from 3.2 kernel or newer:
After installing b43-fwcutter, download version 5.100.138 of Broadcom's proprietary driver and extract the firmware from it:
If you are using the b43 driver from older kernel:
After installing b43-fwcutter, download version 5.10.56.27.3 of Broadcom's proprietary driver and extract the firmware from it:
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.
If you are using the b43legacy driver:
After installing b43-fwcutter, download version 3.130.20.0 of Broadcom's proprietary driver and extract the firmware from it:
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.
bcm43xx, b43legacy, b43, softmac,... the full story
Many different drivers are or have been in use to support Broadcom chipsets, so the terminology is very confusing. The sections below aim to help you understand what is what.
Comparison of recent drivers
Basic info |
b43 |
wl |
brcmsmac |
Open source |
yes |
no |
yes |
In kernel |
yes |
no |
yes |
Supported buses |
b43 |
wl |
brcmsmac |
ssb |
yes |
yes |
no |
bcma |
yes |
yes |
yes |
usb |
no |
no |
no |
Supported PHYs |
b43 |
wl |
brcmsmac |
G |
yes |
yes |
no |
N |
yes |
yes |
yes |
LP |
yes |
yes |
no |
HT |
yes |
no |
no |
LCN |
no |
yes |
yes |
Supported modes |
b43 |
wl |
brcmsmac |
Managed |
yes |
yes |
yes |
Ad-Hoc |
yes |
yes |
unknown |
Monitor |
yes |
yes |
no |
AP |
yes |
no |
no |
What's the difference between b43legacy and b43?
b43 offers a newer codebase and hardware cryptography support. However, 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 it has not been reverse engineered completely.
|
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 BCM4301 cards and BCM4306 cards with a 80211 core revision of 4 or less. b43 should be used on all other cards. You can safely have both versions built on the same system. Info about cores is printed by ssb when the driver finds a board; type "dmesg" to see it. If you are unsure or don't know what we are talking about here, get both of the firmwares and both b43 and b43legacy and the kernel autoloader will automatically load the correct driver for your device.
What about broadcom-wl/sta?
Broadcom has elected to create their own proprietary driver for Linux. This is possibly due to various portable computer manufacturers like Dell including Broadcom's wireless chipsets in their devices. Also, many users/owners have expressed concerns and the pain of using ndiswrapper to use b43 so the driver was created to alleviate such issues.
However, broadcom-wl does not support some things that b43/b43legacy does. broadcom-wl can only offer connection to AP or Ad-Hoc networks, it does not offer AP modes and Monitor modes. Furthermore, the driver does not cooperate well with iw tools because it has its own ieee80211 stack. This stack is both outdated and does not work with the mac80211 stack which b43/b43legacy is based on.
Users of unsupported Broadcom devices wanting more functionality out of the broadcom-wl driver will have no choice but to continue emailing Broadcom. There will be no support offered by the b43 developers due to the fact that the driver is mainly proprietary. This is not the developers' faults but Broadcom's conflicts with the Linux community.
Open-source driver from Broadcom (brcm80211)
On 09/09/2010, Broadcom released an open driver for their SSB-less chipsets. However, it only supported three chips (bcm4313, bcm43224, bcm43225). The driver is merged into kernel 2.6.37 under brcm80211. More information is available on this release at http://lwn.net/Articles/404248/.
On 27/11/2010, Broadcom added staging support for bcm4329 via brcmfmac under brcm80211. The included documentation noted 4329 (SDIO) support. However, this may work with other variants of the bus interconnection apart from SDIO.
Switching between drivers
If you have few drivers installed, system may auto-load different driver than the one you wanted to use. Manual (un)loading drivers can be done with modprobe tool.
To unload all known drivers (you can pick only one command, if you know which driver is in use) perform:
To load specific driver use one of the following commands:
It is possible to prevent system from auto-loading some drivers by blacklisting them. This can be done with the following command:
1 echo "blacklist drivername" >> /etc/modprobe.d/blacklist
If you plan to use wl, you should blacklist b43 and brcmsmac as well as bcma. Unfortunately wl does not use bcma bus driver, so this additional step is required.
Bug reporting
If you encounter a bug, you should send a message to the b43/b43legacy mailing list at b43-dev@lists.infradead.org containing ALL of the following:
- A description of the problem at hand
- When it happens
- How to reproduce
- wlan configuration and authentication/encryption type
- The output of the following commands:
1 uname -a
1 lspci -vvn|grep 43 -A7
1 dmesg
In addition the following may be of interest to developers:
- If you have built the kernel from git, tell which tree, the output of "git describe"
- If the driver worked with earlier kernels, but has since stopped working, a bisection is of great value.
Developers
See developers page for some advanced info, tools.
Donations
Many people have donated money, hardware or other services to make this driver possible. Thanks! Please see the donations page for details.