How to Install Broadcom WiFi Drivers (wl/b43) on Fedora

Fedora does not include proprietary Broadcom drivers in the default repositories due to licensing restrictions, so you must enable the RPM Fusion repository and install the `broadcom-wl` package for most modern cards or `b43-fwcw` for older ones.

The grayed-out WiFi icon

You boot into a fresh Fedora install and the network icon shows a crossed-out globe. The wired connection works fine. You run nmcli device status and see your wireless interface listed as unavailable. You know the hardware works because it ran on your previous operating system. Fedora just refuses to load the driver. This happens because Broadcom ships its WiFi firmware under a proprietary license, and Fedora sticks to a strict free-software policy for its default repositories.

What is actually happening

The Linux kernel includes open-source drivers for many Broadcom chips, but they often lack full feature support or struggle with power management. The proprietary wl driver provides better stability and supports more chipsets. Fedora excludes it from the main repos to maintain compliance with the Fedora Project's licensing guidelines. You need to pull the driver from RPM Fusion, a community-maintained repository that hosts non-free software.

The kernel also loads open-source modules like bcma or ssb by default. Those modules will fight the proprietary driver for control of the hardware. You have to tell the kernel to ignore them. The package manager handles the download, the kernel build system compiles the module against your running kernel, and the module loader skips the conflicting open-source alternatives.

Run the repository setup first. Trust the package manager. Manual file edits drift, snapshots stay.

Enable RPM Fusion and install the driver

RPM Fusion splits its packages into two categories. The free repository contains software that complies with Fedora's strict licensing rules. The nonfree repository contains software that violates those rules but is still useful for hardware support. You need both. The nonfree repo holds the Broadcom driver.

Here is how to add both repositories in a single transaction.

sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
# $(rpm -E %fedora) expands to your current release number automatically
# Installing both .rpm packages registers the repos with dnf
# dnf will now check RPM Fusion alongside the official Fedora mirrors

After the repositories are registered, install the driver package. The akmod-broadcom-wl package is the standard choice for modern hardware.

sudo dnf install akmod-broadcom-wl
# akmod stands for automatic kernel module
# This package contains the source code and build scripts
# dnf triggers a background build against your running kernel

The installation will download the package, extract the source, and run a background compilation job. You will see output indicating that akmods are being built. Wait for the transaction to finish. Do not interrupt the build. The system needs to compile the kernel module against the exact version of the kernel you are running.

Reboot after the build completes. The new module will load on the next boot cycle.

How akmod keeps the driver alive across updates

Static kernel modules ship pre-compiled for a specific kernel version. When Fedora pushes a kernel update, the static module stops working until you reinstall it. The akmod system solves this by storing the driver source in /usr/src/. Every time dnf upgrade --refresh pulls a new kernel, the akmods service automatically recompiles the driver against the new kernel headers. You never have to manually reinstall the package after a kernel update.

This behavior mirrors how Fedora handles other out-of-tree drivers. The build system hooks into the package manager's post-install scripts. The compilation runs in the background and drops the finished .ko file into /lib/modules/$(uname -r)/extra/. The module loader picks it up on the next boot.

Run dnf upgrade --refresh weekly to keep your system current. The akmod system handles the rest.

Block the conflicting open-source modules

The kernel will still try to load bcma or ssb if it detects a Broadcom device. Those modules will claim the hardware and prevent wl from attaching. You must blacklist them in /etc/modprobe.d/. Configuration files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/.

Here is how to create the blacklist file.

sudo tee /etc/modprobe.d/broadcom.conf <<EOF
blacklist bcma
blacklist ssb
EOF
# blacklist tells modprobe to skip loading these modules
# The file lives in /etc/modprobe.d/ so it survives package updates
# tee writes the content to the file and prints it to stdout

The blacklist does not remove the modules from the system. It simply tells the module loader to ignore them during automatic startup. You can still load them manually if you ever need to debug the open-source stack. The blacklist persists across reboots and kernel updates.

Reboot before you debug. Half the time the symptom is gone.

Verify the driver loaded correctly

After the system comes back up, check whether the kernel recognized the hardware and attached the correct driver. dmesg shows the kernel ring buffer. nmcli shows the network manager state.

Here is how to confirm the module is active and the interface is ready.

dmesg | grep -i wl
# grep filters the kernel log for lines containing wl
# Look for messages like wl: module loaded or wl0: Broadcom BCM43xx
# If you see nothing, the driver failed to attach to the hardware
nmcli device status
# nmcli queries NetworkManager for all network interfaces
# The wireless interface should show as wifi and available
# If it shows unavailable, the driver is not ready or SELinux blocked it

If the interface shows as available or connected, the driver is working. NetworkManager will automatically scan for networks and handle authentication. You can click the network icon in GNOME or run nmcli device wifi list to see available access points.

Run journalctl -xeu NetworkManager if the interface stays unavailable. Read the actual error before guessing.

Common pitfalls and exact error messages

The installation fails in predictable ways. Knowing the exact error string saves hours of guessing.

The dnf install command will refuse to proceed and print Error: GPG check FAILED if you skipped importing the RPM Fusion keys. Run sudo rpm --import https://mirrors.rpmfusion.org/keys/rpmfusion-free.asc and retry. The package manager enforces signature verification by default.

If you see [FAILED] Failed to start akmods.service during boot, your system lacks the kernel development headers. Install kernel-devel and kernel-headers matching your running kernel. The build system cannot compile the module without the header files.

SELinux denials show up in journalctl -t setroubleshoot with a one-line summary. Read those before disabling SELinux. The wl driver rarely triggers denials, but user-space utilities like wlmod or custom scripts might. If you see an AVC denial, run ausearch -m avc -ts recent to find the exact path. Restore the context with restorecon -Rv /etc/modprobe.d/ if the file permissions drifted.

Older laptops from 2006 to 2010 often use chipsets that require the b43 firmware instead of wl. The b43-fwcw package extracts firmware from Broadcom's proprietary installer and places it in /lib/firmware/. Install it with sudo dnf install b43-fwcw. The firmware extraction runs automatically during package installation.

Snapshot the system before the upgrade. Future-you will thank you.

Choose the right driver for your hardware

Broadcom ships dozens of chipsets across different product lines. The driver you need depends on the exact chip revision and the age of the device. Match the driver to your hardware profile.

Use akmod-broadcom-wl when you have a modern Broadcom WiFi card from 2010 onward and need full 802.11n/ac/ax support. Use b43-fwcw when you are running legacy hardware from the mid-2000s that relies on the older firmware extraction method. Use the open-source brcmfmac or brcmsmac modules when you want a fully free stack and your chipset is listed in the kernel documentation. Stay on the upstream open-source driver if you only deviate from the defaults occasionally.

The open-source modules live in the main kernel tree. They receive updates with every kernel release. They lack some power management features and may struggle with certain enterprise authentication methods. The proprietary wl driver covers more chipsets and handles roaming better. The b43 stack is mature but limited to older hardware.

Check your chipset with lspci -nn | grep -i network. Match the PCI ID to the driver documentation. Install the matching package. Reboot.

Trust the package manager. Manual file edits drift, snapshots stay.

Where to go next