NOTE: this page is for archival only, see the note at the end of the page.

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.

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)
  • bcm4306
  • bcm4311 rev 1 / bcm4312
  • bcm4311 rev 2 / bcm4312 (needs patches for 2.6.24)
  • bcm4318

unsupported

  • The 802.11a part of the 4309 and 4312 is not supported.
  • There is no support for any Draft 802.11n features. We are working on it.
  • BCM 4328/4329

available devices

Please see the device list.

features

working

  • Station mode
  • Access Point mode (not quite yet, blocked by proper support in mac80211)
  • 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)
  • 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.

Note: You need to have a compiler and headers for libc installed. If you don't know what this means, why are you not using your distribution's packages?

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, 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 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.

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

  • bcm43xx-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 cryptic like
      /sys/devices/pci0000:00/0000:00:02.0/0000:01: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 -name ssb_sprom)
      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 dump above, we learn that the pcivendor code is a 16-bit quantity stored at 0x06. To change that code, we use the commands
      ssb-sprom -i ssb_sprom_copy -o ssb_sprom_copy -s 0x06,0x3C
      ssb-sprom -i ssb_sprom_copy -o ssb_sprom_copy -s 0x07,0x10
    • to write the two bytes separately. The documentation implies that these data could be written as a single 16-bit quantity; however, that doesn't work at the moment.
    • 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. If you have logged out since the working copy of the sprom contents was obtained, the symbol containing the location of the file in sysfs will have been lost. In any case, it is safe to reload that symbol again and rewrite the sprom with
      SSB_SPROM=$(find /sys -name ssb_sprom)
      sudo cp ssb_sprom_copy $SSB_SPROM
    • 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. You have been warned.
  • A firmware assembler/disassembler can be found in the git repository at
    • git clone http://git.bu3sch.de/git/b43-tools.git
  • 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


This is a static dump of the old wiki, taken after locking it in January 2015. The new wiki is at https://wireless.wiki.kernel.org/.
versions of this page: last, v385, v384, v383, v382, v381, v380, v379, v378, v377, v376, v375, v374, v373, v372, v371, v370, v369, v368, v367, v366, v365, v364, v363, v362, v361, v360, v359, v358, v357, v356, v355, v354, v353, v352, v351, v350, v349, v348, v347, v346, v345, v344, v343, v342, v341, v340, v339, v338, v337, v336, v335, v334, v333, v332, v331, v330, v329, v328, v327, v326, v325, v324, v323, v322, v321, v320, v319, v318, v317, v316, v315, v314, v313, v312, v311, v310, v309, v308, v307, v306, v305, v304, v303, v302, v301, v300, v299, v298, v297, v296, v295, v294, v293, v292, v291, v290, v289, v288, v287, v286, v285, v284, v283, v282, v281, v280, v279, v278, v277, v276, v275, v274, v273, v272, v271, v270, v269, v268, v267, v266, v265, v264, v263, v262, v261, v260, v259, v258, v257, v256, v255, v254, v253, v252, v251, v250, v249, v248, v247, v246, v245, v244, v243, v242, v241, v240, v239, v238, v237, v236, v235, v234, v233, v232, v231, v230, v229, v228, v227, v226, v225, v224, v223, v222, v221, v220, v219, v218, v217, v216, v215, v214, v213, v212, v211, v210, v209, v208, v207, v206, v205, v204, v203, v202, v201, v200, v199, v198, v197, v196, v195, v194, v193, v192, v191, v190, v189, v188, v187, v186, v185, v184, v183, v182, v181, v180, v179, v178, v177, v176, v175, v174, v173, v172, v171, v170, v169, v168, v167, v166, v165, v164, v163, v162, v161, v160, v159, v158, v157, v156, v155, v154, v153, v152, v151, v150, v149, v148, v147, v146, v145, v144, v143, v142, v141, v140, v139, v138, v137, v136, v135, v134, v133, v132, v131, v130, v129, v128, v127, v126, v125, v124, v123, v122, v121, v120, v119, v118, v117, v116, v115, v114, v113, v112, v111, v110, v109, v108, v107, v106, v105, v104, v103, v102, v101, v100, v99, v98, v97, v96, v95, v94, v93, v92, v91, v90, v89, v88, v87, v86, v85, v84, v83, v82, v81, v80, v79, v78, v77, v76, v75, v74, v73, v72, v71, v70, v69, v68, v67, v66, v65, v64, v63, v62, v61, v60, v59, v58, v57, v56, v55, v54, v53, v52, v51, v50, v49, v48, v47, v46, v45, v44, v43, v42, v41, v40, v39, v38, v37, v36, v35, v34, v33, v32, v31, v30, v29, v28, v27, v26, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1