0

When booting a fresh install of Debian 12 Bookworm I'm met with a message saying I need to go to https://wireless.wiki.kernel.org/en/users/Drivers/b43#devicefirmware and download the correct firmware for this driver version and to carefully read all instructions. Very well, here's the introduction on that page:

b43 and b43legacy are wireless drivers for Broadcom SoftMAC chipsets. Kernel will automatically pick a proper module for you:

  • b43 for any new (supported) hardware
  • b43legacy for BCM4301 and early BCM4306 versions

Summary

You need to have firmware files (usually in /lib/firmware/) so b43(legacy) can upload them to the card and run properly. For FullMAC devices support see brcmfmac and rndis_wlan

That's good to know I guess. The other sections of that page are: Known problems & limitations, Solved problems, List of Hardware, Contact. What instructions am I supposed to follow here, though? I don't see any.

On the top of the page there's a link to the page's "old content", so I then take a look at the Device firmware installation section in that old content:

Ubuntu/Debian

In recent versions of Ubuntu and Debian, installing the firmware-b43-installer package will handle everything for you:

1 sudo apt-get install firmware-b43-installer

You will be asked to automatically fetch and install the firmware into the right location. Again, you will need an internet connection.

My reaction here was more or less "haha, very funny". I then went and searched for some more promising instructions. I found https://wiki.debian.org/wl#Installation which lists my chip in the title (BCM43228). Finally, this looks promising!

Installation

Add a "non-free" component to /etc/apt/sources.list for your Debian version, for example:

Debian 9 "Stretch"

deb http://deb.debian.org/debian stretch-backports main contrib non-free

Debian 10 "Buster"

deb http://deb.debian.org/debian buster-backports main contrib non-free

Debian 11 "Bullseye"

deb http://deb.debian.org/debian bullseye contrib non-free

...really? The solution again seems to be to have internet access. Also, Debian 12 is not mentioned. Regardless, the instructions continue with the critical section:

Update the list of available packages. Install the relevant/latest linux-image, linux-headers and broadcom-sta-dkms packages:

# apt-get update
# apt-get install linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms

This will also install the recommended wireless-tools package. DKMS will build the wl module for your system.

I've read in more than one place that Debian 12 includes firmware on the install medium (I used the i386 DVD image) — including in their own news feed, about them voting on this — but I certainly did not end up with working WiFi after the installation, nor was I prompted to install anything during the OS install process (or did I miss it?), so I don't know what to make of it exactly.

Now, assuming I misunderstood something, what was I supposed to have done differently in this process?

The only thing that comes to mind as a solution at this point is to manually do dependency resolution of broadcom-sta-dkms and the other packages, download all those packages from debian.org, put them on a USB stick and install them manually. Surely that's not how it's designed to be done?

2
  • 1
    Yup, you got it in the last paragraph. To be honest this is no different from any OS, even MS Windows. If it doesn't ship with the drivers for your specific network hardware you have to either get another network connection into your machine (USB Ethernet?) or manually download on another machine and transfer the files on storage such as USB stick. Sep 18 at 22:53
  • @PhilipCouling Thanks! Too bad. I guess I'll take "instructions" in the systemd output with a grain of salt from now on... — Manual dependency resolution of an arbitrary number of packages through manual deep traversal of a link hierarchy on debian.org? Downloading lots of separate files while taking care not to accidentally download an incompatible version by mistake (thereby ruining the entire install process)? Yes, that sounds indistinguishable to the Windows experience. Seriously though, that doesn't sound like the most well-designed use case — regardless of what Windows does.
    – Andreas
    Sep 18 at 23:07

1 Answer 1

1

Unfortunately the licensing situation around Broadcom firmware and drivers means that it’s rather difficult to get all the necessary pieces, even with the recent changes to firmware distribution in Debian. The existence of three (or even four, depending on how you count) different drivers doesn’t help, nor does the relicensing of the kernel wiki (which is why the message shown by the kernel doesn’t point to a page that’s directly useful).

The first message you saw comes from the b43 driver. This is a driver that’s shipped in the Linux kernel. Like many wifi drivers, it needs firmware files to upload to the device itself; unfortunately, unlike most wifi drivers in Linux, that firmware isn’t redistributable. This means that, to get the driver working, you need to extract the firmware from a file downloaded from Broadcom. I think this is the easiest approach in your case, because you can use these tools on any system running Debian with Internet access, not just your laptop:

  1. Enable the contrib section of the repository — edit /etc/apt/sources.list so that it reads (at least)

    deb http://deb.debian.org/debian bookworm main contrib
    
  2. Install the firmware installation tool, confirming during installation that you want to run this even if the system doesn’t have a Broadcom chip

    sudo apt update
    sudo apt install firmware-b43-installer
    
  3. Copy all the files in /lib/firmware/b43 to the same directory on your laptop (creating it if necessary).

  4. Optionally, remove the installer (assuming it’s not on your laptop):

    sudo apt purge --autoremove firmware-b43-installer
    

This should allow the b43 driver to load, and should give you Internet access on your laptop.

The second available driver is the STA driver, which is the one described on the wl page. This is a proprietary driver, and isn’t shipped in the kernel, which is why it isn’t available even when you install using a “firmware-enabled” disk image. It can be installed without Internet access on the target system, but it’s painful to do so, as you’ve discovered. Once you have Internet access on your laptop you can give it a go.

The third driver is the brcm80211 driver, for Broadcom PCIe devices, but presumably that doesn’t match your laptop.

You didn’t do anything wrong during installation. If you can get your laptop online in any other way (Ethernet, tethering a phone, etc.), even temporarily, you’ll find it much simpler to get everything configured properly.

5
  • Excellent answer. I would much rather have arrived at a page that explained the situation the way you've done here. It passed me by that there were multiple drivers that could drive my chip. It doesn't help that the wiki page doesn't have a clear title, making the "list of hardware" anchored to...nothing. I was expecting an extra table column telling me which driver handles which chip, as well as a column with links to the required firmware. Though, I don't fully understand why the easiest way to acquire the firmware is through commands, instead of a link.
    – Andreas
    Sep 19 at 12:48
  • I copied the files and rebooted but there was no immediate difference. After modprobe b43 WiFi started working, but it's not detecting 5 GHz networks. I can't say why. It's also not starting automatically upon boot, which is weird since it had no problem giving me that message on every boot earlier.
    – Andreas
    Sep 21 at 17:46
  • 1
    Ah, so the b43 driver might not be the best for your system. While you’re online, you could try the sta driver: enable non-free (in the same way as contrib), then run sudo apt-get install broadcom-sta-dkms linux-headers-$(uname -r). That will build the module; you can then remove the b43 module and load the newly-built module instead. Sep 21 at 18:58
  • You're absolutely right, again. The sta driver was the way to go to get 5 GHz support. Thank you for the accurate suggestions!
    – Andreas
    yesterday
  • Thanks for the feedback, I’ll try to update the wiki pages accordingly. I was actually discussing all this with one of the wireless kernel developers last week, and he agreed it’s rather messy — brcm80211 is much nicer but only supports a few devices (not including yours). yesterday

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .