HOW TO Use Broadcom Wireless Cards in Fedora 14 through 20

THIS IS HOW I GOT MY WIRELESS CARD TO WORK THERE ARE MANY WAYS TO DO THIS, AND THIS IS HOW I ACCOMPLISHED IT. 

 

Look in the lspci report for a Broadcom wireless network controller and find its chipset number which will be in the format of BCM43xx. If there is no such wireless device revealed in the lspci report, then it may be a USB device listed in the lsusb report. The wireless device may be less obvious in the lsusb report which identifies USB devices by their vendor ID and device ID numbers (venderID:deviceID) and may not have much other information. Nevertheless, the information in the lsusb report is still something that may be helpful in deciding what to do next. If nothing at all is found to identify the wireless card, then it may be disabled by BIOS, a software switch or hotkey, or a physical on-off switch.

Once the chipset is identified, maybe one of the driver methods described next will work with it in Fedora. The following Broadcom wireless chipsets are known to be capable of working in Fedora with one or more of those driver methods. There may be other Broadcom wireless chipsets that also can work in Fedora, but these are the ones commonly discussed around here and that I know about…

BCM4301
BCM4303
BCM4306
BCM4309
BCM4310 USB (but it uses the PCI bus)
BCM4311
BCM4312
BCM4313
BCM4318
BCM4320 USB
BCM4321
BCM4322
BCM43224
BCM43225
BCM43227
BCM43228
BCM4328
BCM43XG

IMPORTANT NOTE: There have been reports that the Fedora kernel now includes the brcmsmac driver which supports a few of the chipsets listed above. Go tolinuxwireless.org for details about this new driver. If you have a chipset supported by brcmsmac, then try updating to the latest available kernel. You may have nothing more to do than that.



Step 2: Choose the right driver

All versions of all chipsets in that list above are known to work in Fedora with at least one of the driver methods described next. Many of them are known to work with more than one of the driver methods described next. But none of the chipsets in that list work with all of the driver methods described next. So choose a driver method below that is known to work with your chipset. The section for each driver method below lists which chipsets are known to work with that driver method. For additional help with deciding which driver method to start out with, study the following algorithm.

Install the driver

IMPORTANT NOTE: The steps and examples below are intended for use with NetworkManager managing the wireless connection. For other connection managers or techniques, adapt the information as appropriate for the particular situation. The steps and examples below also require the Fedora system to have an Internet connection via a wired NIC for the steps that involve wget or yum. For a Fedora system with no Internet connection, the relevant files can be downloaded using another computer or operating system and manually installed. For help with that, start a new thread in the Networking forum and mention your running kernel and Broadcom chipset.

How to install and use b43 and b43legacy

History and background

The b43 Linux driver is the current descendant of the now obsolete bcm43xx driver. The bcm43xx driver was the result of reverse engineering of proprietary Broadcom drivers. The process involved manually translating machine code back into C from which a guide to writing drivers for the Broadcom chipsets could be written. The bcm43xx driver module began shipping with Fedora Core 5 kernels in 2006, but it required firmware that had to be extracted from proprietary drivers using a software application for that purpose. That application was named bcm43xx-fwcutter and was also available in the Fedora Core 5 Extras repository. During the life cycle of Fedora 7 in 2007, the bcm43xx driver module was replaced by two new driver modules: b43 and b43legacy. They both still required the installation of firmware. The b43legacy module was for use with some older cards which also have to use an older version of firmware. The b43 and b43legacy driver modules and b43-fwcutter to extract their firmware are still included in Fedora today. They are known to work with the following Broadcom wireless chipsets:

BCM4301
BCM4303
BCM4306
BCM4309
BCM4311
BCM4312
BCM4318

IMPORTANT NOTE: Not all wireless modes are supported for all of those chipsets. And some chipsets in that list may exist in more than one version that may each require a different driver or driver method or firmware. The official “home” of the b43 and b43legacy drivers is now Linux Wireless. Go there for additional details about the current status of support and the driver/firmware requirements for Broadcom chipsets. If you do not have success trying b43 for one of those listed chipsets, then it’s reasonable to try an alternate driver or driver method known to work with your chipset. 

Firmware installation

The firmware required by b43 and b43legacy is extracted from proprietary Broadcom drivers. The best results nowadays are obtained by extracting the firmware from source object files of Broadcom drivers available from a legal distribution point such as OpenWrt.org. The firmware is copyrighted and cannot be redistributed. The b43 module requires so-called version 4 firmware which can be extracted from a broadcom-wl tarball from OpenWrt, and probably any of the version 4 broadcom-wl tarballs can used as a firmware source for the b43 driver in the latest Fedoras. But if the wireless card must use the b43legacy driver, then it must use older version 3 firmware extracted from an older driver file. The version 3 firmware is maintained at OpenWrt not as a broadcom driver tarball but as a single object file named wl_apsta-3.130.20.0.o. In both cases, as explained next, the firmware is extracted from the driver file with b43-fwcutter which is a software package available from the Fedora repository.

IMPORTANT NOTE: The following steps are ones often used successfully around here. If they don’t work for a particular Broadcom wireless card, then go to linuxwireless.org for more complex explanations and specialized instructions for the various chipsets and versions. These steps assume that the Fedora system has a wired NIC connection to the Internet for the download steps. If the Fedora system does not have an Internet connection, then all of the packages and files mentioned can be downloaded using another computer or operating system and transferred to the Fedora filesystem. Modify the steps accordingly for that scenario.

  1. Install b43-fwcutter. This is the software package that does the extraction of the firmware from the proprietary driver.
    Code:
    su
    yum install b43-fwcutter
  2. Determine which native driver is being used by the wireless card (b43 or b43legacy). The kernel is generally good about detecting a Broadcom wireless card and loading the correct driver module for it. The following terminal command will list the loaded kernel modules in alphabetical order. Look for b43 or b43legacy.
    Code:
    lsmod | sort
  3. Do this step only if you need to install version 4 firmware for the b43 driver module. Copy and execute the following command lines one after the other in a Fedora terminal.
    Code:
    wget http://downloads.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
    su
    b43-fwcutter -w /lib/firmware wl_apsta_mimo.o
  4. Do this step only if you need to install version 3 firmware for the b43legacy module.
    Code:
    wget http://downloads.openwrt.org/sources/wl_apsta-3.130.20.0.o
    su
    b43-fwcutter -w /lib/firmware wl_apsta-3.130.20.0.o
  5. Now reboot or restart NetworkManager and look in the NetworkManager panel icon for available networks (left-click the icon).

Some things to try if it doesn’t work

  1. Check the firmware files. There should be about three dozen .fw files in /lib/firmware/b43 (or /lib/firmware/b43legacy). If they’re not there, then review the steps and re-install the firmware.
    Code:
    ls /lib/firmware/b43
  2. Check the loaded kernel modules again. The b43 or b43legacy module should be loaded, and potentially conflicting modules such as wl or ndiswrapper should not be loaded.
    Code:
    lsmod | sort
  3. If a conflicting module is being loaded from a previous driver effort, then either undo the steps from that previous effort, or blacklist the unwanted module. Example…
    Code:
    su
    echo "blacklist ndiswrapper" >> /etc/modprobe.d/blacklist.conf