http://wireless.kernel.org/en/users/Drivers/b43
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.
supported
- bcm4303 (802.11b-only chips, uses b43legacy)
- bcm4306 (Rev. 2 uses b43legacy, Rev. 3 uses b43)
- bcm4309 (only the 2.4GHz part)
- bcm4311 rev 1 / bcm4312
- bcm4311 rev 2 / bcm4312 (needs patches for 2.6.24)
- bcm4312 (only the 2.4GHz part)
- bcm4318
- Note:
Broadcom has used some of the BCM43XX designations for more than one
flavor of card. To tell for sure if your card is supported, use the
command 'lspci -n' and find the line that has the string "14e4:XXXX'.
If XXXX is 4301, 4307, 4311, 4312, 4318, 4319, 4320, 4321, 4324, or
4325, the card is supported. All others are NOT supported.
unsupported
- The 802.11a part of the 4309 and 4312 is not supported.
- BCM
4310 USB - This device has an LP PHY. We think that means low power. In
any case, previous code does not work. The reverse engineers have
translated a great deal of the code and are currently generating specs
for the code writers. Note: This card uses the PCI buss, despite its
name.
- BCM
4322 802.11a/b/g/n (Has PCI-ID 0x432B) - This device has an N Phy.
There is no support for any Draft 802.11n features. We are working on
it.
- BCM
4321 (Has PCI-IDs 0x4328 and 0x4329) - These devices have N Phys. There
is no support for any Draft 802.11n features. We are working on it.
available devices
Please see the device
list.
features
working
- Station mode
- Mesh networking mode
- Access Point mode (not quite yet, blocked by proper support in
mac80211 and hostapd)
- Ad-Hoc (IBSS) mode
- 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.
- Packet
injection (with radiotap; no FCS injection currently though hardware
supports it - a radiotap flag is being discussed for this)
- Probably something we forgot to add here.
not working yet
- Interference mitigation.
- Bluetooth coexistance (most code implemented, but untested)
- Probably something else that's not listed under "Works".
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 propietary 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-...@lists.berlios.de.
- openSUSE 11.0 and 11.1 use the following command:
- Ubuntu (all flavors) and Debian use the following
command:
- 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.
- 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. 011
|
Go
|
b43
|
Linux-2.6.25 and newer, compat-wireless-2.6
package, current GIT trees
|
4.150.10.5
|
b43-fwcutter v. 011
|
Go
|
b43legacy
|
Any
|
3.130.20.0
|
b43-fwcutter v. 011
|
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 011 of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:
wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2
tar xjf b43-fwcutter-011.tar.bz2
cd b43-fwcutter-011
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-011/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 011 of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:
wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2
tar xjf b43-fwcutter-011.tar.bz2
cd b43-fwcutter-011
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-011/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-legacy
driver
If you are using the b43legacy
driver, follow these instructions.
Use version 011 of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:
wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2
tar xjf b43-fwcutter-011.tar.bz2
cd b43-fwcutter-011
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-011/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-...@berlios.de
containing ALL of the following:
- A description of the problem at hand
- When it happens
- How to reproduce
- The output of the following commands:
uname -a
lspci -vvn|grep 43 -A7
dmesg
- wlan configuration, authentication/encryption type
In addition the following may be of interest to
developers:
- If you have built the kernel from git, tell which tree, and the
output of "git describe"
- If the driver worked with earlier kernels, but has
since stopped working, a bisection is of great value.
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.
- ssb-sprom
- A
tool for the modification of the Broadcom Sonics Silicon Backplane
SPROM (e.g. you can permanently change the MAC address or the PCI IDs
of your wireless card – useful on some (e.g. Compaq/HP) laptops where
the BIOS checks these at boot. It's now part of b43-tools:
git clone http://git.bu3sch.de/git/b43-tools.git
- To
use the sprom tool, it is necessary to get a disk copy of your sprom
from the /sys file system. The file path for the sprom contents depends
on the bus layout of the specific computer being used and will be
something like
/sys/devices/pci0000:00/0000:00:0d.0/0000:04:00.0/ssb_sprom
- It is not
recommended that you try to type the name. Instead, you should use the
following commands to get the working copy:
SSB_SPROM=$(find /sys/devices -name ssb_sprom)
echo $SSB_SPROM
- If
the echo command only results in a single instance of "/sys/...", you
may proceed. For systems with more than one SSB-based interface, there
will be such a string for each, and the command that sets the SSB_SPROM
symbol will have to be changed. In the name above, the sequence states
that this device is attached to the 0'th PCI bus via bridge 0d.0 and is
device 04:00.0 on that bridge. To find which of your SSB devices to
select, use the 'lspci -v' command. On my system, the first line of
such output for my interface is "04:00.0 Network controller: Broadcom
Corporation BCM94311MCG wlan mini-PCI (rev 02)". For this device, one
would use
SSB_SPROM=$(find /sys/devices -name ssb_sprom | grep 04:00.0)
echo $SSB_SPROM
- Of
course, the "04:00.0" needs to match your system, and check the output
value to determine that there is now a single instance of "/sys..." and
that the path matches the device whose SPROM is to be changed. If not,
adjust the string after 'grep' accordingly.
- Once the SSB_SPROM
variable matches the path to ssb_sprom for your device, get a working
copy of the sprom contents with
sudo cat $SSB_SPROM > ssb_sprom_copy
- You may now look
at the contents of your sprom with the command
ssb-sprom -i ssb_sprom_copy -P
- As
an example, let us suppose that you have purchased a Dell mini-pci card
to use in an HP laptop. The HP BIOS refuses to use the card when the
pcivendor is Dell (code 0x1028), not HP (code 0x103C). From the
information provided by an "ssb-prom –help" command, we learn that the
switch needed to change this vendor code is "–subv". To change that
code, we use the command
ssb-sprom -i ssb_sprom_copy -o new_ssb_sprom_copy --subv 0x103C
- to
write the HP vendor ID to our working copy. I use different input and
output files so as not to destroy the original. If further changes are
needed, for example the PCI product ID, the command
ssb-sprom -i new_ssb_sprom_copy -o new_ssb_sprom_copy --subp 0x137C
- would be used.
Note that the input and output files may be the same.
- Once you think you
have updated correctly, use the following to check the contents:
ssb-sprom -i ssb_sprom_copy -P
- Once the sprom
contents are the way you want them, and presumably correct, you are
ready to rewrite the file. First, use
echo $SSB_SPROM
- to ensure that
this symbol still contains the SPROM path. If not, then it will have to
be reloaded as discussed above.
- You are then ready
to rewrite the sprom with
sudo cp new_ssb_sprom_copy $SSB_SPROM
- Once
again, you are urged to be absolutely certain of the contents of the
working copy BEFORE taking this step. If your interface becomes
unusable as a result of writing incorrect data into the sprom, the
responsibility is YOURS. Once again, you have been warned.
- A firmware assembler/disassembler can be found in the
git repository at
- There
are more development and debugging tools available in the b43-tools git
repository. Just clone it and read the shipped documentation files.
- wpa_supplicant
- A tool for enabling WPA and
full IEEE 802.11i/RSN/WPA2 WPA-PSK and WPA2-PSK (pre-shared key)
("WPA-Personal") WPA with EAP.
- wpa_supplicant
may have a 'broadcom' driver that is used with the proprietary Broadcom
driver. The bcm43xx, b43 and b43legacy drivers use the linux wireless
extensions properly and so need the wext driver. This is set using the
-D option like this:
-
wpa_supplicant -iwlan0 -Dwext -c/etc/wpa_supplement.conf
-
Of course, you don't need this if you're
using NetworkManager.
external links
Broadcom Wireless-LAN
section