Other Developer Subscription options: Supported versions of Red Hat Enterprise Linux Developer Subscriptions are also available. See this complete list to choose from. If you’re a Red Hat technology partner (e.g. An ISV), no-cost (Not for Resale - NFR) subscriptions are available by joining Red Hat Connect for Technology Partners.

This is the web site for the Third Edition of Linux Device Drivers,by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman. For themoment, only the finished PDF files are available; we do intend to make anHTML version and the DocBook source available as well.
  • Oracle Linux is free to download, use and distribute and is provided in a variety of installation and deployment methods. The developer preview releases are for development and test purposes only and are not covered by Oracle Linux support. Oracle does not recommended using preview releases in.
  • Installation and Use Rights.For installation and use of the Software on any non-Windows platform, including but not limited to macOS and Linux, you may install and use one copy of the Software on any device running such non-Windows platform.

This book is available under the terms of the Creative CommonsAttribution-ShareAlike 2.0 license. That means that you are free todownload and redistribute it. The development of the book wasmade possible, however, by those who purchase a copy from O'Reilly orelsewhere.

LDD3 is current as of the 2.6.10 kernel. See the LWN 2.6 API changes page forinformation on subsequent changes.

LDD3 chapter files

Title pagePDF
Copyright and creditsPDF
Table of ContentsPDF
PrefacePDF
Chapter 1: An Introduction to Device DriversPDF
Chapter 2: Building and Running ModulesPDF
Chapter 3: Char DriversPDF
Chapter 4: Debugging TechniquesPDF
Chapter 5: Concurrency and Race ConditionsPDF
Chapter 6: Advanced Char Driver OperationsPDF
Chapter 7: Time, Delays, and Deferred WorkPDF
Chapter 8: Allocating MemoryPDF
Chapter 9: Communicating with HardwarePDF
Chapter 10: Interrupt HandlingPDF
Chapter 11: Data Types in the KernelPDF
Chapter 12: PCI DriversPDF
Chapter 13: USB DriversPDF
Chapter 14: The Linux Device ModelPDF
Chapter 15: Memory Mapping and DMAPDF
Chapter 16: Block DriversPDF
Chapter 17: Network DriversPDF
Chapter 18: TTY DriversPDF
IndexPDF

Downloads

Also available:
  • A tarball of the LDD3 PDF files (11MB).

Download Linux Developer Community Others Drivers

b43 and b43legacy are drivers for the 802.11b/g/n family of wireless chips that Broadcom produces.

Note: Broadcom USB devices are handled by the brcmfmac driver.

  • 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

  1. Features
  2. Device firmware installation
  • The b43/b43legacy drivers require proprietary firmware to be loaded onto the wireless chip before it can operate, see below.

  • If you have a Broadcom USB device, it's most likely a FullMAC device. See rndis_wlan for 14e4:4320 and brcmfmac for others. The b43/b43legacy driver is not meant to support such a 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.

  • 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).
  • G-PHY devices: not working with kernels 3.15 and 3.16-rc1 (a regression). This was fixed in 3.15.5 (6f3f164) and 3.16-rc3 (2fc68eb).

To find out whether a PCI device is supported by the b43 or b43legacy drivers, issue this lspci command:

The command will output a string similar to this example:

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

a/b/g/n

?

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

no

BCM4313

b/g/n

LCN (r1)

wl/brcm80211

14e4:4315

yes

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:4321

partially

BCM4321

?

N (r2)

14e4:4322

not tested

BCM4322

b/g/n

N (r4)

14e4:4324

yes (b43legacy)

BCM4306

a/b/g

G (r1)

yes

BCM4306/3

a/b/g

G (r5)

14e4:4325

yes (b43legacy)

BCM4306/2

b/g

G (r1)

14e4:4328

partially

BCM4321

a/b/g/n

N (r2)

wl

14e4:4329

partially

BCM4321

b/g/n

N (r1)

wl

14e4:432a

not tested

BCM4321

a/n

N

wl

14e4:432b

partially

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

a/b/g/n

HT (r1)

wl

14e4:4350

yes (3.8+)

BCM43222

a/b/g/n

N (r6)

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

yes (3.17+)

BCM43227

b/g/n

N (r16)

wl

14e4:4359

yes (3.17+)

BCM43228

a/b/g/n

N (r16)

wl

14e4:4360

no

BCM4360

?

AC (r1)

14e4:4365

no

BCM43142

b/g/n

LCN40 (r3)

wl

14e4:43a0

no

BCM4360

a/b/g/n/ac

AC?

wl

no

BCM4352

a/b/g/n/ac

?

wl

14e4:43a9

yes (3.17+)

BCM43217

b/g/n

N (r17)

14e4:43aa

yes (3.17+)

BCM43131

b/g/n

N (r17)

14e4:43b1

no

BCM4352

a/b/g/n/ac

AC?

14e4:4727

no

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)

yes (3.6+)

BCM43225

?

N (r6)

14e4:a8db

not tested

BCM43217

b/g/n

N (r17)

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.

For a list of available devices, please see the device list.

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

Download

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.
  • 802.11n: HT
  • 802.11n: aggregation
  • 802.11n: 40MHz channels
  • 5 GHz band

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:

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:

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 018 of b43-fwcutter.
Download, extract the b43-fwcutter tarball and build it:

If verification of the GPG signature fails due to an unknown key, you need to import the following key:

Download Linux Developer Community Others Driver

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.

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.

Basic info

b43

STA (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

There is also b43legacy driver for some old cards: B-PHY and early G-PHY ones. These cards can't run new firmware, so hardware encryption is unsupported on them.

Please note b43 developers don't offer support for the STA (wl) driver due to the fact that it's mainly proprietary. Contact Broadcom's support.

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:

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.

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:

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.

Download Linux Developer Community Others Driverpack

See developers page for some advanced info, tools.

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

  • Broadcom Wireless-LAN section

  • Proprietary Broadcom wl driver