How to Fix Broadcom WiFi Not Working on Fedora

Broadcom WiFi adapters on Fedora often fail because the required proprietary firmware is not included in the default repository due to licensing restrictions.

You installed Fedora and the WiFi icon is grayed out

You just finished installing Fedora on a laptop with a Broadcom WiFi card. The installer worked fine because it used Ethernet or a temporary driver, but now you are at the desktop and the WiFi icon is grayed out. Or you upgraded from Fedora 40 to 42, and NetworkManager shows "No WiFi adapter found." You run ip link and see eth0 but no wlan0. The hardware is physically present, but the kernel refuses to initialize the radio. This is a classic Broadcom firmware issue. The system sees the device ID but lacks the proprietary data required to make it transmit.

What is actually happening

Broadcom WiFi chips require proprietary firmware blobs to function. Fedora ships with a clean kernel that includes only open-source drivers by default. The b43 and bcma drivers in the kernel can handle some older Broadcom chips, but they often fail on newer hardware or leave performance on the table. The proprietary wl driver needs a firmware file that lives outside the main kernel tree due to licensing restrictions.

Without that firmware file, the driver loads but cannot initialize the hardware. The kernel logs a missing firmware error, and the network interface never appears. Think of the kernel driver as a translator who knows the language but does not have the dictionary. The firmware is the dictionary. You can have the best translator in the world, but without the dictionary, no conversation happens. Fedora separates these components to maintain a fully open default installation. You must explicitly opt-in to the proprietary stack.

Install the proprietary driver

Fedora provides the akmod-broadcom-wl package. The akmod prefix indicates the package contains kernel module source code that builds automatically when the kernel updates. This mechanism keeps the driver working across kernel upgrades without manual intervention. The package also pulls in the required firmware files. Run the install command with root privileges.

sudo dnf install akmod-broadcom-wl # Install the driver source and firmware, triggering the module build

The installation triggers a background build process. The akmods service compiles the module against the currently running kernel. This takes a few seconds. Watch the journal to confirm the build completes successfully.

journalctl -xeu akmods # Monitor the build service for errors or completion status

The x flag adds explanatory text to journal entries, and the e flag jumps to the end. This is the standard way to inspect service logs. If the build fails, the output will show compiler errors. A successful build ends with a message indicating the module is ready. Reboot the system to load the new module.

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

Handle Secure Boot

If your system uses Secure Boot, the kernel will reject the newly built module because it is not signed by a key the firmware trusts. The module installs, but modprobe fails silently or logs a signature error. The driver does not load, and the WiFi remains dead. You have two paths here. Disable Secure Boot in the UEFI settings, or enroll a Machine Owner Key to sign the module. Disabling Secure Boot is faster for troubleshooting. Enrolling a key is the secure long-term fix.

Check whether Secure Boot is active from the command line.

mokutil --sb-state # Query the kernel for the current Secure Boot status

If the output says SecureBoot enabled, the kernel is enforcing signature checks. The kernel log will show Loading module signed with unknown key when the system attempts to load wl. You can disable Secure Boot in the BIOS/UEFI setup menu. Look for the Secure Boot option and set it to Disabled. Save and reboot.

If you prefer to keep Secure Boot enabled, you must enroll a key. Fedora provides tools to generate and enroll a Machine Owner Key. Install the utilities and run the enrollment wizard.

sudo dnf install mokutil # Install tools for managing Secure Boot keys
sudo mokutil --import /etc/pki/akmods/certs/public_key.der # Start the key enrollment process

The wizard prompts for a password. You must enter this password during the next reboot when the MOK manager screen appears. Follow the on-screen instructions to enroll the key. After enrollment, the kernel will trust modules signed with that key.

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

Blacklist conflicting drivers

The open-source drivers often grab the hardware first. If b43 or bcma loads, the proprietary wl driver cannot bind to the device. You must blacklist the conflicting modules to force the system to use the Broadcom proprietary driver. Create a configuration file in /etc/modprobe.d/. Never edit files in /usr/lib/modprobe.d/ because package updates will overwrite them. Configuration files in /etc/ are user-modified and persist across updates.

Create the blacklist file with a text editor.

# /etc/modprobe.d/broadcom-blacklist.conf
blacklist b43 # Prevent the open-source driver from claiming the device
blacklist bcma # Block the bus driver that conflicts with wl
blacklist ssb # Stop the Sonics Silicon Backplane driver from loading
install b43 /bin/false # Hard block b43 even if another module requests it

The blacklist directive prevents automatic loading. The install b43 /bin/false line provides a hard block. If any other module tries to load b43 as a dependency, the system runs /bin/false instead, which fails immediately. This ensures b43 never interferes with wl. Save the file and reboot. The changes take effect on the next boot.

Run journalctl first. Read the actual error before guessing.

Verify the connection

After installing the driver and blacklisting conflicts, verify the module is active. The wl module should appear in the loaded modules list. Check the network interfaces to confirm the system recognizes the WiFi adapter.

lsmod | grep wl # Confirm the wl module is loaded and not blocked
ip link show # Look for wlan0 or wlpXsY interface

You should see an interface named wlan0 or similar, such as wlp2s0. The interface may show as DOWN initially. NetworkManager handles bringing the interface up and connecting to networks. Use nmcli to scan for available networks.

nmcli device wifi list # NetworkManager should now scan for available networks

If the list populates with SSIDs, the driver is working. Connect to your network using the desktop GUI or nmcli. If the interface exists but shows no signal, check for hardware blocks.

Common pitfalls

The hardware switch might be soft-blocked. Laptops often have a physical switch or a keyboard shortcut to disable WiFi. The kernel exposes this state through rfkill. A soft block prevents the radio from transmitting even if the driver is loaded. Check the block status.

rfkill list # Check for hard or soft blocks on wlan devices
sudo rfkill unblock wifi # Remove soft blocks if the radio is disabled

If rfkill shows Soft blocked: yes, run the unblock command. If Hard blocked: yes, check the physical switch on the laptop.

SELinux rarely blocks WiFi connectivity. The policy allows NetworkManager and wpa_supplicant to manage interfaces. If you suspect a policy denial, check the setroubleshoot logs. Do not disable SELinux to test. Disabling SELinux reduces security and is unnecessary for this issue.

journalctl -t setroubleshoot # Review SELinux denial summaries related to network services

Read the one-line summary in the log. If there is a denial, the message will indicate which process was blocked. In most cases, the denial is unrelated to the WiFi driver. If the driver is missing firmware, dmesg will show the error.

dmesg | grep -i firmware # Look for missing firmware messages in the kernel log

If you see Direct firmware load for brcm/bcm43xx-... failed, the firmware file is missing. Ensure the akmod-broadcom-wl package is fully installed. Sometimes the linux-firmware package needs an update. Run sudo dnf upgrade --refresh to fetch the latest packages. The --refresh flag forces metadata updates, ensuring you get the newest firmware files.

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

When to use this vs alternatives

Use akmod-broadcom-wl when you have a Broadcom chip that requires proprietary firmware and you want automatic rebuilds on kernel updates. Use b43 or bcma when your hardware is older and fully supported by open-source drivers, avoiding proprietary dependencies. Use iwlwifi when your laptop actually has an Intel card and the driver is just missing firmware from the linux-firmware package. Stay on the default kernel drivers when the hardware works out of the box and you prefer a fully open stack.

Where to go next