Broadcom wireless

From ArchWiki
(Redirected from Broadcom BCM4312)
Jump to: navigation, search

Related articles

This article details how to install and setup a Broadcom wireless network device.


Broadcom has a noted history with its support for Wi-Fi devices regarding GNU/Linux. For a good portion of its initial history, Broadcom devices were either entirely unsupported or required the user to tinker with the firmware. The limited set of wireless devices that were supported were done so by a reverse-engineered driver. The reverse-engineered b43 driver was introduced in the 2.6.24 kernel.

In August 2008, Broadcom released the 802.11 Linux STA driver officially supporting Broadcom wireless devices on GNU/Linux. This is a restrictively licensed driver and it does not work with hidden ESSIDs, but Broadcom promised to work towards a more open approach in the future.

In September 2010, Broadcom released a fully open source driver. The brcm80211 driver was introduced in the 2.6.37 kernel and in the 2.6.39 kernel it was sub-divided into the brcmsmac and brcmfmac drivers.

The types of available drivers are:

Driver Description
brcm80211 Kernel driver mainline version (recommended)
b43 Kernel driver reverse-engineered version
broadcom-wl Broadcom driver with restricted license

Driver selection

To know what driver(s) are operable on the computer's Broadcom wireless network device, the device ID and chipset name will need to be detected. Cross-reference them with the driver list of supported brcm80211 and b43 devices.

$ lspci -vnn -d 14e4:



The kernel contains two built-in open-source drivers: brcmfmac for native FullMAC and brcmsmac for mac80211-based SoftMAC. They should be automatically loaded when booting.

  • brcmfmac supports newer chipsets, and supports AP mode, P2P mode, or hardware encryption.
  • brcmsmac only supports old chipsets like BCM4313, BCM43224, BCM43225.


Two reverse-engineered open-source drivers are built-in to the kernel: b43 and b43legacy. b43 supports most newer Broadcom chipsets, while the b43legacy driver only supports the early BCM4301 and BCM4306 rev.2 chipsets. To avoid erroneous detection of your WiFi card's chipset, blacklist the unused driver.

Both of these drivers require non-free firmware to function. Install b43-firmwareAUR, b43-firmware-classicAUR or b43-firmware-legacyAUR from the AUR.

  • BCM4306 rev.3, BCM4311, BCM4312 noticed to have problems with b43-firmware. Use b43-firmware-classicAUR for these cards instead.
  • BCM4331 noticed to have problems with b43-firmware-classic. Use b43-firmwareAUR for this card instead.


There are two version in AUR of the restrictively licensed driver:

Tip: The DKMS variant broadcom-wl-dkmsAUR
  • is kernel agnostic. This means it supports different kernels you may use (e.g. linux-ckAUR).
  • is kernel release agnostic too. It will be rebuild after a kernel is upgraded to a new release. If you use broadcom-wlAUR or another kernel release dependant variant (e.g. broadcom-wl-ckAUR), it may happen that kernel upgrades break wireless from time to time until the packages are in sync again

Offline installation

An Internet connection is the ideal way to install the broadcom-wl driver; many newer laptops with Broadcom cards forgo Ethernet ports, so a USB Ethernet adapter or Android tethering may be helpful. If you have neither, you'll need to first install the base-devel group during installation. Then, use another Internet-connected computer to download linux-headers and the driver tarball from the AUR, and install them in that order.


Warning: This method is not recommended. Drivers that are un-tracked can become problematic or nonfunctional on system updates.

Install the appropriate driver for your system architecture from Broadcom's website. After this, to avoid driver/module collisions with similar modules and make the driver available, do:

# rmmod b43
# rmmod ssb
# modprobe wl

The wl module should automatically load lib80211 or lib80211_crypt_tkip otherwise they will have to be manually loaded.

If the driver does not work at this point, you may need to update dependencies:

# depmod -a

To make the module load at boot, refer to Kernel modules. It is recommending that you blacklist conflicting modules.


Setting broadcom-wl in monitor mode

To set broadcom-wl in monitor mode you have to set 1 to /proc/brcm_monitor0):

# echo 1 > /proc/brcm_monitor0

It will create a new network interface called prism0.

To work in monitor mode, use this newly created network interface.

Device inaccessible after kernel upgrade

Since the 3.3.1 kernel the bcma module was introduced. If using a brcm80211 driver be sure it has not been blacklisted. It should be blackisted if using a b43 driver.

If you are using broadcom-wlAUR, uninstall and reinstall it after upgrading your kernel.

Device with broadcom-wl driver not working/showing

Be sure the correct modules are blacklisted and occasionally it may be necessary to blacklist the brcm80211 drivers if accidentally detected before the wl driver is loaded. Furthermore, update the modules dependencies depmod -a, verify the wireless interface with ip addr, kernel upgrades will require an upgrade of the non-DKMS package.

Interfaces swapped with broadcom-wl

Users of the broadcom-wl driver may find their Ethernet and Wi-Fi interfaces have been swapped. See device naming for an answer.

Interface is showing but not allowing connections

Append the following kernel parameter:


Suppressing console messages

You may continuously get some verbose and annoying messages during the boot, similar to

phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 1 (implement)
enabled, active

To disable those messages, increase the loglevel of printk messages that get through to the console - see Silent boot#sysctl.

Device BCM43241 non-detected

This device will not display with either lspci nor lsusb; there is no known solution yet. Please remove this section when resolved.

Connection is unstable with some routers

If no other approaches help, install linux-lts, or use a previous driver version.