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, 2023 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, 2023 at 23:07

2 Answers 2

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, 2023 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, 2023 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, 2023 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
    Sep 30, 2023 at 12:56
  • 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). Sep 30, 2023 at 13:09
0

Thanks for the guidance provided. It's similar - but not identical - to how - somewhat over a year ago (late 2022) I got WiFi working on my Lenovo X140e with Debian 11 (Bullseye).

A few days ago, upgrading the Lenovo X140e from Debian 11 to Debian 12 (Bookworm), first I tried what's presented in Stephen Kitt's Sep 19, 2023 answer which is echoed and slightly updated on the referenced Debian page https://wiki.debian.org/wl#Installation dated 2023-12-14 17:28:10.

No joy.

I found one additional step (which I had included in my successful 2022 installation) to be essential: after completing step 2,

I REBOOTED MY COMPUTER.

I found REBOOTING at this step to be ESSENTIAL.

After rebooting I skipped (optional) steps 3 and 4 and successfully enabled WiFi.

Also, while my ignorance of most things linux is vast, but my experience suggests: each of the instructions should be prefixed with sudo

This worked for me.

Again, thanks for the post and link to the Debian page which, with my level of ignorance, eased the completion of my Debian 12 (Bookworm) upgrade.

2
  • "each of the instructions should be prefixed with sudo" Ah yes. Unfortunately in the Linux world it's still common for instructions meant for ordinary users to require what in design is (seriously) called "knowledge in the head", as opposed to "knowledge in the world". In this case the former means that you're supposed to already know that commands preceded with a # means "run it as root (e.g. with sudo)". An example of the latter would be to explicitly mention this detail as part of the instructions (putting the knowledge "in the world"). Easily overlooked on manually written pages.
    – Andreas
    Feb 4 at 22:58
  • It's also interesting to think about why this is the case. I'm of the opinion that many Linux users have gone through lots of pain learning a lot of this implied knowledge during the years. I know I have struggled. The thought that newer users can have an easier life is sometimes bittersweet in such a situation: "I went through all this, but these newbies shouldn't be expected to? → Why not? → Why change this?" I don't blame anyone for such feelings — it's natural to want to preserve the perceived value of any accomplishment. In short: there's some evolutionary pressure to keep that culture.
    – Andreas
    Feb 4 at 23:07

You must log in to answer this question.

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