Search for BCM4332 and Linux and you’ll find years of forum threads with the same discouraging pattern: someone asks for help, someone replies “that chip doesn’t work on Linux anymore,” and the thread dies. That conclusion is wrong, and it’s been wrong every time someone wrote it.

The BCM4332 chip works on modern Linux. Ubuntu 22.04, Ubuntu 24.04, Linux Mint, Debian 12 — all of them. But it requires steps that the default package manager doesn’t take automatically, and if you skip any of them, you’ll end up with a chip that either doesn’t appear at all, or worse — works right now but vanishes silently after the next reboot.

That second scenario is actually useful diagnostic information. If your Wi-Fi works after running modprobe wl manually but disappears after rebooting, the driver is not broken — the driver works fine. The issue is that it’s not being loaded persistently, or a conflicting driver is claiming the hardware first. These are configuration problems, not hardware failures. This guide fixes them all.

By the end you will have working, persistent Wi-Fi through reboots, kernel updates, and system upgrades. If you reach the end and it still doesn’t work, this guide tells you exactly what to conclude and what to do next.


Understanding the Situation First

The BCM4332 (PCI ID 14e4:432b) is a Broadcom chip found in 2010–2013 MacBook Pro and Air models, and various HP and Acer laptops from the same era. It’s old hardware, but perfectly functional.

The problem is drivers. Linux has three kernel modules that might try to claim this hardware, and they conflict with each other:

DriverTypePackageBCM4332 Support
wlProprietary (Broadcom STA)bcmwl-kernel-sourceFull — this is the target
b43Open-sourcefirmware-b43-installerPartial — slower, less stable, but works
brcmsmacOpen-sourceBuilt into kernelBCM4332: not supported — causes confusion

When Linux boots, it tries to load the most appropriate driver automatically. Because brcmsmac and b43 are in-kernel modules that look like reasonable candidates to the hardware database, they can load first — sometimes silently failing to provide a working interface, while also blocking wl from loading.

This is the core of almost every BCM4332 problem on Linux. The hardware is fine. The wl driver can load and work. The issue is that other modules get there first, and the fix is to explicitly ensure wl loads and that its competitors are blacklisted.


Before You Start — Confirm Your Chipset

Don’t assume. Verify:

lspci -nn | grep -i network

You must see the PCI ID 14e4:432b in the output. For example:

02:00.0 Network controller [0280]: Broadcom Inc. and subsidiaries BCM4332 802.11a/b/g/n <wireless> [14e4:432b] (rev 03)

If you see a different ID, this guide is for the wrong chip. Other BCM chips need different drivers and different blacklists.


Step 1 — Get Temporary Internet Access

You need internet to install the driver packages. Use one of:

  • Ethernet cable — most reliable
  • USB tethering from your phone — plug your phone in, enable USB tethering in settings, plug into the laptop. Linux detects it as a network interface automatically.

Once you have connectivity, confirm it:

ping -c 4 8.8.8.8

Step 2 — Update System and Reboot

This is not optional housekeeping — it ensures your kernel headers will match your running kernel. Installing headers for a stale kernel that doesn’t match what you boot into is one of the most common silent failure modes in this whole process.

sudo apt update
sudo apt upgrade -y
sudo reboot

After rebooting, confirm the kernel version you’re running:

uname -r

Note this output. You’ll need it to verify the headers you’re about to install.


Step 3 — Install Exact-Match Kernel Headers

The wl driver is compiled against your kernel using DKMS (Dynamic Kernel Module Support). For this to succeed, headers for your exact running kernel version must be installed.

sudo apt install -y build-essential dkms linux-headers-$(uname -r)

The $(uname -r) substitution is intentional — it grabs your exact running kernel version. Do not install linux-headers-generic here and assume it matches. It often doesn’t, and DKMS will fail silently.

Verify the headers installed correctly:

dpkg -l | grep linux-headers

You should see a package matching your uname -r output exactly.


Step 4 — Debian Only: Enable Non-Free Repos

Ubuntu users skip this step.

On Debian, the bcmwl-kernel-source package lives in the non-free section of the repos, which isn’t enabled by default.

sudo nano /etc/apt/sources.list

Find your deb lines and add contrib non-free non-free-firmware to the end if not already present. For example:

deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware

Then update:

sudo apt update

Step 5 — Clean Out Any Broken Previous Attempts

If you’ve tried to install the driver before and it half-worked or left broken state, clean it out now. This is a safe reset that doesn’t touch the b43 fallback.

sudo apt purge bcmwl-kernel-source broadcom-sta-dkms -y
sudo apt autoremove -y

Do not remove firmware-b43-installer here — keep the fallback intact in case you need it.


Step 6 — Install the Broadcom wl Driver

sudo apt install -y bcmwl-kernel-source

This triggers a DKMS build — you’ll see it compile the wl module for your kernel. The output looks like:

Building for 6.8.0-52-generic
Build succeeded.

If you see a build error instead, stop here and go to the DKMS Build Failure section.


Step 7 — Handle Secure Boot

Secure Boot is a UEFI feature that requires kernel modules to be signed with a trusted key. The wl driver is proprietary and out-of-tree — it’s not signed by default. If Secure Boot is enabled, the module will be silently blocked from loading, which looks identical to a driver installation failure.

Check:

mokutil --sb-state

If Secure Boot is DISABLED

Good. Move on to Step 8.

If Secure Boot is ENABLED

You have two options:

Option A — Disable Secure Boot in BIOS (simplest, most reliable): Reboot, enter your BIOS/UEFI settings (usually F2, F10, F12, or Del on startup), find the Secure Boot setting, and disable it. Save and reboot. This is the recommended path for a personal machine where you control the hardware.

Option B — Enroll the Module Key (keeps Secure Boot active):

If DKMS prompted you to create a MOK (Machine Owner Key) password during install, use it:

  1. Reboot
  2. The blue MOK Manager screen should appear — select Enroll MOK
  3. Enter the password you set
  4. Reboot again

If install did NOT prompt for a MOK password, enroll the DKMS-generated key manually:

sudo mokutil --import /var/lib/dkms/mok.pub

Enter a password when prompted. Reboot, and enroll via the MOK Manager screen.

After enrolling, verify:

mokutil --list-enrolled | grep -i dkms

Step 8 — Unload Conflicting Modules

Before loading wl, force-unload any other Broadcom modules that may currently be running:

sudo modprobe -r b43 brcmsmac bcma ssb wl 2>/dev/null || true

The || true prevents this from failing if some modules aren’t currently loaded. Now load wl:

sudo modprobe wl

Check that it loaded:

lsmod | grep wl

If wl appears in the output, the driver loaded. Move to Step 9.

If nothing appears, don’t continue — go to Troubleshooting.


Step 9 — Bring Up the Interface

ip a

Look for wlan0, wlp2s0, or similar. If the interface exists but shows DOWN:

sudo ip link set wlan0 up   # replace wlan0 with your interface name

Check for RF kill (hardware or software Wi-Fi block — common on laptops):

rfkill list

If anything shows Hard blocked: yes — press the physical Wi-Fi button or Fn+F2 (varies by laptop). Soft blocked: yes can be cleared:

sudo rfkill unblock wifi

Step 10 — Restart Network Manager

sudo systemctl restart NetworkManager
nmcli radio wifi on

Wait a few seconds and check for networks:

nmcli dev wifi list

You should now see available Wi-Fi networks. Connect through your desktop’s network applet or:

nmcli dev wifi connect "Your Network Name" password "yourpassword"

Step 11 — The Most Important Step: Make It Persistent

This is what separates “it works right now” from “it works forever.” This is the step most guides miss or skip.

If you stop here, Wi-Fi will work until you reboot. On next boot, Linux will load whichever Broadcom module comes first — usually b43 or brcmsmac — which will grab the hardware before wl gets a chance, resulting in broken or missing Wi-Fi. You’ll run modprobe wl and it’ll “magically” work again — until the next reboot. This cycle is a well-known gotcha on Broadcom hardware.

The fix has two parts: tell the kernel to load wl on boot, and tell it to never load the conflicting modules.

Part A: Load wl at Boot

echo "wl" | sudo tee /etc/modules-load.d/wl.conf

This creates a config file that tells systemd to load the wl module during every boot sequence.

Part B: Blacklist Competing Broadcom Modules

sudo tee /etc/modprobe.d/blacklist-broadcom.conf <<'EOF'
# Blacklist competing Broadcom drivers that conflict with the wl DKMS module
blacklist b43
blacklist b43legacy
blacklist brcmsmac
blacklist bcma
blacklist ssb
EOF

These modules all look at the same hardware. Blacklisting them ensures wl gets exclusive access to the chipset without a fight.

Part C: Rebuild initramfs

This bakes your new module loading rules into the initial ramdisk — the environment Linux uses before it mounts the full filesystem at boot.

sudo update-initramfs -u

Reboot and verify:

sudo reboot

After reboot, confirm without any manual intervention:

lsmod | grep wl          # should show wl loaded
ip a                     # should show your wifi interface
nmcli dev wifi list      # should show available networks

If all three look good — you’re done. Wi-Fi is working and persistent.


Troubleshooting and Decision Tree

DKMS Build Failures

Check DKMS status:

dkms status

You should see something like:

bcmwl/6.30.223.271+bdcom, 6.8.0-52-generic, x86_64: installed

If it shows build error or your kernel version is missing:

sudo dkms install bcmwl/$(dkms status | grep bcmwl | awk '{print $1}' | cut -d'/' -f2 | head -1) -k $(uname -r)

Force a rebuild manually and watch the output for errors:

sudo dkms remove bcmwl --all
sudo apt install --reinstall bcmwl-kernel-source

Check kernel headers again if the rebuild fails:

ls /usr/src/linux-headers-$(uname -r)

If this directory doesn’t exist, install:

sudo apt install linux-headers-$(uname -r)

Then retry the DKMS build.


modprobe wl Fails With “Required key not available”

This is Secure Boot blocking the module. The driver isn’t signed. Go back to Step 7 and either disable Secure Boot or enroll the MOK key.


wl Loads but No Wi-Fi Interface Appears

dmesg | grep -i "wl\|broadcom\|bcm" | tail -30

Look for error messages. Common causes:

  • “No networks adapters found” — the driver loaded but didn’t find compatible hardware. Double-check your PCI ID with lspci -nn.
  • Module conflict — unload everything and retry:
sudo modprobe -r wl b43 brcmsmac bcma ssb
sudo modprobe wl

Wi-Fi Interface Appears but No Networks Show

rfkill list        # check for hardware/software blocks
dmesg | grep wl    # check for errors

Try cycling:

sudo ip link set wlan0 down
sudo ip link set wlan0 up
sudo systemctl restart NetworkManager

Works After Reboot But Drops Frequently

Broadcom adapters are notorious for aggressive power-saving that causes the interface to drop. Fix:

sudo mkdir -p /etc/NetworkManager/conf.d
sudo tee /etc/NetworkManager/conf.d/wifi-powersave.conf <<'EOF'
[connection]
wifi.powersave = 2
EOF

sudo systemctl restart NetworkManager

wifi.powersave = 2 disables power management for Wi-Fi connections, keeping the link stable.


Fallback: Open-Source b43 Driver

If wl absolutely will not load — DKMS build fails on your kernel and there’s no fix available yet — the b43 open-source driver is the fallback. It’s slower and less stable than wl, but it works on newer kernels where wl sometimes lags behind.

First, remove wl:

sudo apt purge bcmwl-kernel-source -y
sudo rm -f /etc/modprobe.d/blacklist-broadcom.conf
sudo rm -f /etc/modules-load.d/wl.conf

Install b43 firmware:

sudo apt install -y firmware-b43-installer

On Debian, if firmware-b43-installer isn’t found, ensure non-free repos are enabled (Step 4).

Load it:

sudo modprobe b43
sudo systemctl restart NetworkManager

To make b43 persistent through reboots:

echo "b43" | sudo tee /etc/modules-load.d/b43.conf
sudo update-initramfs -u

b43 is a workable fallback. Connection speeds will be lower, and on some systems the driver is less stable than wl over long periods. But it works, and on newer kernels where the wl DKMS build is broken, b43 is often the better immediate choice while waiting for a package update.


Kernel Compatibility Notes

The wl driver is an out-of-tree module — Broadcom doesn’t actively maintain it for bleeding-edge kernels, and Ubuntu/Debian maintainers patch the bcmwl-kernel-source package to keep it building. There can occasionally be a window where a new kernel version breaks the build before a patch is released.

Ubuntu VersionKernelwl Status
20.04 LTS5.4 / 5.15Works well
22.04 LTS5.15 / 6.2 HWEWorks well
24.04 LTS6.8Works — package is patched for 6.8
24.04 + newer HWE kernel6.11+Check dkms status after any kernel update

After any kernel update (apt upgrade sometimes includes a new kernel), run:

uname -r
dkms status

If dkms status shows your new kernel isn’t listed, run:

sudo apt install --reinstall bcmwl-kernel-source

DKMS will rebuild the module for the new kernel.


The Real Conclusion

At this point, one of these is true:

  1. wl is loaded and persistent — you’re done, enjoy your Wi-Fi.
  2. b43 is loaded and persistent — workable fallback, consider checking if wl can be fixed after a future package update.
  3. DKMS is failing on your specific kernel + distro combination — wait for a package update, or pin your kernel version (sudo apt-mark hold linux-image-$(uname -r)), or use b43 as a bridge.
  4. Both drivers fail to load — not a software problem. Check dmesg for hardware errors. The physical card may be failing or seated incorrectly.

The BCM4332 is not a chip that “doesn’t work on Linux.” It’s a chip that requires you to do five minutes of setup that Ubuntu’s automatic driver detection doesn’t do for you. That’s it.


Nuclear Option: USB Wi-Fi Adapter

If you’re six hours in, nothing works, and you just need a working machine — a $15 USB Wi-Fi adapter using a native Linux chipset (Realtek RTL8188/RTL8812, MediaTek MT7601) will plug in and work with zero setup. The entire Linux driver situation for USB Wi-Fi adapters with in-kernel drivers is dramatically simpler than Broadcom.

Recommended chipsets for “just works” USB Wi-Fi on Linux:

  • TP-Link Archer T2U Nano — popular, Realtek chipset, generally plug-and-play
  • Panda Wireless PAU05 — Ralink RT3070 chipset, fully in-kernel, widely verified

These aren’t a defeat — they’re a pragmatic choice you can make alongside fixing the internal adapter. The USB adapter gets you online while you troubleshoot; the internal Broadcom is genuinely worth fixing for daily use.