Fedora 44 OS freeze on 2011 MacBook Air with Broadcom BCM43224 WiFi card

Hello everyone!

It’s my first post in the Fedora forums, and before deciding to write this I tried every solution to my problem I could find online but to no avail. This will be a long post but I want to be as detailed as possible to make sure I don’t forget anything.

Long story short: I work in IT, I’m very proficient with Windows and I’m above beginner level with Linux and MacOS. I fix computers for work, but I don’t know Linux THAT much.

A client gifted me her old 2011 MacBook Air with an Intel chip, 8GB of RAM and an SSD, and I wanted to install Fedora 44 on it to turn it into a lightweight machine to take with me when I travel. Everything works great except the WiFi.

The problem? The infamous Broadcom WiFi adapter that MacBooks used in those years, which in my case is the BCM43224 model.

Since it’s kind of a known issue I’ll just say that, in my specific case, Fedora DOES recognize the chip and let me connect to WiFi, but whenever I connect to a network and do anything (load the software center, open Firefox, anything that requires WiFi to actually do something) the OS freezes and I’m forced to force reboot.

I tried to run lspci -vnn -d 14e4: and it shows this:

02:00.0 Network controller [0280]: Broadcom Inc. and subsidiaries BCM43224 802.11a/b/g/n [14e4:4353] (rev 01)
	Subsystem: Apple Inc. AirPort Extreme [106b:00e9]
	Flags: bus master, fast devsel, latency 0, IRQ 17
	Memory at a0400000 (64-bit, non-prefetchable) [size=16K]
	Capabilities: <access denied>
	Kernel driver in use: bcma-pci-bridge
	Kernel modules: bcma

I red that Fedora automatically installs this bcma driver which is NOT the correct one for my WiFi card, and that I need to do stuff like install akmod-wl, broadcom-wl, blacklist this old driver, reboot and so on, but the informations I found are a combination of replies to a situation similar to mine, but with older versions of Fedora, or with WiFi cards which are from the same family but are not mine, so I’m always back to the beginning with the same problem and the system keeps freezing.

Keep in mind that my MacBook does NOT have Secure Boot, and that I can access the internet with a USB to Ethernet dongle and a cable, so I can run commands and access the repos (I red something about drivers in RPM Fusion?) but I really need WiFi to work for this machine to be useful to me, but I also don’t want to sacrifice one of the two USB ports for a WiFi dongle.

Not only I’m quite desperate at this point (been trying to fix this on and off for a month now), but to add insult to injury I have a friend with a 2012 MacBook Pro which also wanted to try Linux, and he was in the opposite situation: out of the box the OS did NOT recognize WiFi for him, but launching one command from the terminal with the Ethernet cable installed the correct driver and he’s enjoying his MacBook with Fedora with zero WiFi problems.

I also thought about getting his same WiFi chip from eBay and swapping it in my 2011 Air (or an Intel one, but these Macs use the half size cards which Intel doesn’t make or I can’t find them), but the IT guy in me really wants to get this one to work and understand what is going on and how to fix it, especially because it’s perfectly recognized when I install Fedora 44 but it just freezes afterwards.

I would hate to give up on this perfectly working machine honestly, and I also tried other distros to no avail, so from Ubuntu to Fedora to Arch based distros the problem is always the same, and I want to run Fedora anyway.

Is there anyone that can tell me what’s going with this card, the drivers, the freeze and how to fix it?

Do you get the same freeze and locked up kernel when you perform these same processes when connected over Ethernet? i.e. have you proven to yourself that the Broadcom chipset is the definitive cause of the locked up kernel.

Yes, I forgot to specify it but everything works perfectly when I’m not connected to WiFi.

Ethernet just works, and I can comfortably download huge files from the software center at the network’s speed cap, do anything I want and I have 0 crashes.

I even tried playing SuperTuxKart online because I red some old posts mention that it might be a problem with the power saving functions, but with the default Balanced profile I can play a 3D game like this at medium settings while “stressing” both the GPU and the network and it just works, it never crashes, it doesn’t overheat and the system is still snappy.

The moment I connect to a WiFi network (I tried at home, at my office and at a friend’s place) the OS freezes even when it’s idling on the desktop doing absolutely nothing.

Splendid. At least now we know how to prove it’s fixed when you think you’ve fixed it.

brcmsmac is the usual open source driver:

modinfo brcmsmac

If that comes back as being found then sudo modprobe brcmsmac

then give the “this definitely causes the entire thing to lock up” process another try.

The first command gave me this:

filename:       /lib/modules/7.1.4-200.fc44.x86_64/kernel/drivers/net/wireless/broadcom/brcm80211/brcmsmac/brcmsmac.ko.xz
firmware:       brcm/bcm43xx_hdr-0.fw
firmware:       brcm/bcm43xx-0.fw
license:        Dual BSD/GPL
description:    Broadcom 802.11n wireless LAN driver.
author:         Broadcom Corporation
alias:          bcma:m04BFid0812rev18cl*
alias:          bcma:m04BFid0812rev17cl*
alias:          bcma:m04BFid0812rev11cl*
depends:        mac80211,bcma,rfkill,cfg80211,cordic,brcmutil
intree:         Y
name:           brcmsmac
retpoline:      Y
vermagic:       7.1.4-200.fc44.x86_64 SMP preempt mod_unload 
sig_id:         PKCS#7
signer:         Fedora kernel signing key
sig_key:        67:2C:67:C1:53:39:E0:54:75:22:0A:B6:36:8A:EB:24:39:92:92:19
sig_hashalgo:   sha256
signature:      18:7D:5B:99:66:62:43:01:18:7C:F7:43:9F:BF:CF:27:A1:80:E2:3B:
		3F:CC:3A:FF:D5:78:36:9E:6E:D3:8A:9A:97:0E:CC:8C:D2:54:50:9C:
		77:5E:51:C6:27:A7:EC:2C:02:C8:56:B8:F6:FA:07:0B:40:E4:3F:37:
		F6:29:5F:31:9F:7D:D3:86:F8:93:C7:37:83:E3:4A:0C:48:BA:F2:72:
		14:F9:2C:63:02:5B:11:05:65:E3:D3:A8:BA:86:A9:C2:E0:C1:77:53:
		DD:EA:B1:A8:6A:D1:AF:E5:15:31:68:8A:F9:2F:27:42:D3:C5:C2:9C:
		75:84:82:A1:A6:DA:E6:E2:E9:19:89:B0:06:16:58:2C:03:5D:2F:FB:
		03:EA:F9:7A:31:17:90:EE:A1:FD:D6:06:96:66:7E:07:7F:35:75:24:
		FB:56:12:AF:05:1B:C5:0F:32:48:7A:8A:89:80:38:0E:A8:E1:BB:AE:
		5D:7A:7E:DC:A3:31:23:69:9B:4D:0B:23:15:C8:EE:67:A6:A7:26:DE:
		1F:A6:CF:44:F7:09:04:98:4E:42:42:78:88:FE:3F:74:B3:B5:64:0D:
		4D:81:88:45:B8:2E:B3:17:5E:70:11:B4:92:B0:05:6D:29:DF:55:63:
		02:C0:9D:59:E0:DF:2B:A6:DC:0D:2F:5A:4D:41:6C:9B:E3:B5:38:A7:
		57:2E:FE:3B:23:E6:3B:5F:38:48:F7:9F:D3:1F:A7:3A:40:61:21:4F:
		F8:25:C5:2F:70:46:9B:22:DC:55:C4:0D:04:F9:75:5A:DF:F9:9B:6C:
		80:40:3A:E7:79:2A:0E:67:9F:57:22:55:58:2B:47:0A:39:8A:CD:C6:
		8A:77:EF:61:15:7A:2A:CA:A2:D0:EC:24:FF:67:64:12:D7:B4:28:1F:
		DA:01:76:9F:F9:A0:BE:D6:66:DD:E1:B5:9E:E7:2B:B9:8A:A7:D0:F1:
		C5:E8:B4:2F:7F:B9:34:D1:E2:05:9D:BD:F7:7D:68:6E:B0:E7:80:1B:
		13:20:4F:FB:73:82:83:61:D4:0D:F9:1B:F7:19:71:C1:E3:0E:21:AD:
		A4:B1:99:55:B4:05:5F:00:F2:D4:B5:F8:F6:A6:D3:48:B9:2D:E4:2A:
		3C:78:84:AF:63:EF:51:BC:E2:A8:59:27:3E:6A:1B:4F:94:A1:EA:5A:
		40:0B:BD:D1:EB:16:0A:16:BB:14:28:7C:52:1B:7E:3F:B1:57:7C:6D:
		D6:91:72:EB:BA:40:6F:D5:35:68:22:82:3F:D2:B4:3E:86:74:14:78:
		34:57:83:AE:AE:1C:A1:68:0B:AD:37:BA:DD:B8:EC:2B:4B:95:C9:03:
		FE:B3:9B:DF:48:DA:0C:26:18:5B:E0:69

I then ran the second command, connected to WiFi (obviously disconnecting the Ethernet cable) and at the moment it seems it’s not crashing!

I’ll test it a bit more intensively today, but I’ve just tried downloading GIMP from the software center and I’m writing this from Firefox, which is also running music from YouTube, and everything seems to work.

I already had some commands work until a reboot so I want to do some more tests before calling it a day, but this is the longest my WiFi has held up since I tried fixing this problem and I’m wondering what’s going on.

I’m honestly feeling a bit stupid now because I also tried this modprobe command before, but it was always after tinkering with the commands, the drivers and other things in the terminal so maybe it didn’t work because I messed the system up beforehand, but I had A LOT of distros reinstalls during this past month so I might have skipped the best procedures in some situations out of frustration.

I’ll get back here with an update after a few more hours of testing, but if this is actually the solution can you elaborate a bit on what was not working, and what this command did? I know modprobe loads extra stuff related to the driver you specifcy in the command, but I don’t know the technicalities.

Also, why do most people suggest to use the other akmods-wl/broadcom-wl drivers if this simple command fixes the open source driver?

Broadcom wl drivers are closed source and therefore could have anything in them; why people suggest it (assuming they do - I’ve never checked), I’ve no idea - maybe they are more performant?

The brcmsmac (which I can never spell consistently so if I typo it you know why!) is open source. People prefer that which they can inspect, look at and not trust that the binary blob isn’t full of some bollocks they can’t see or audit.

The bcma driver is not a wifi driver at all - it’s the driver for the bus - why the modprobe process stopped there… no idea.

In order to make this process survive a reboot, /etc/modules-load.d/brcmsmac.conf and stick

brcmsmac

in there. That should vigorously encourage the correct drivers to be installed at boot time.

Not all Broadcom chips are supported by the open source drivers. There used to be lists of supported devices, but most are outdated. The LHDB will show you what works for others on your hardware.

When you say “not supported” do you mean that the WiFi shouldn’t work at all, or that I might run in all these problems I’m having? Because it looks like WiFi is not working again after the reboot and despite following the steps in Steves’s post (the ones about the .conf file), so I’m wondering if I should use some of the proprietary ones or what.

Thanks for the insight about the drivers and yes, I think some people suggest them for being more performant because I’ve seen posts of people saying their MacBook had WiFi under Linux but the speed was atrocious.

That said I unfortunately had more freezes :pensive_face:

I came back from my lunch break and turned the Mac back on, and it wasn’t going past the black screen with the small Fedora logo at the bottom with the spinning thing in the middle. I had to force reboot, when I did that it asked me which firmware I wanted to load (and there was the extra option to edit the firmware settings), I chose the latest one and got back to the login screen.

Here I immediately disabled the WiFi before logging in.

I then removed the network I previously connected to, went into the folder you mentioned with admin privileges, created the brmcsmac.conf file in /etc/modules-load.d/ and simply added the line brmcsmac inside it without anything else, and saved it. Was this the correct way to do it?

After this I rebooted the computer again, re-connected to the WiFi network and it seemed to work…

…until I opened the software center and tried to apply an update that it was prompting me to do. It started downloading it, and after roughly 30 seconds another crash happened.

I tried rebooting AGAIN after re-running the modprob command (and with the .conf file still in that folder), re-added the WiFi network I had the computer forget once again and tried opening YouTube.

I searched for some random 1 hour music mix to test it, but as soon as I pressed on the first video I found it crashed again.

This is becoming a nightmare to fix. It’s already frustrating that it seemed to work with the first command you had me try, which for some reasons had no crashes, but after that one reboot it started crashing again as usual, but even more so that I’m genuinely confused on why such a simple thing is making my computer constantly freeze as soon as I want to do something as simple as watching a video or downloading an update.

Might this be one of the cards where the open source drivers won’t cut it? Is there anything else I can do/check to pin-point the problem even more?

EDIT: forgot to add that in my many online searches I found some people saying older and worn out batteries in these Macs MIGHT cause problems with modern versions of Linux, but that seems like a weird cause for my system freezing when I’m doing something with the WiFi.

“Not supported” for WiFi chips can mean some partial functionality as devs work towards full functionality, especially for older hardware where devs rely on users to test. With older hardware there may be confounding problems with erratic hardware faults. Have you done thorough memory tests (I run standalone memtest86+ overnight more than once)? You can also check https://linux-hardware.org/ to see what works for others with the same hardware. Issues with kernel drivers are generally reproducible across multiple distros, so there is often useful advice in forums for other distros.

Yep.

You can call that file anything you like by the way - there’s no magic about the name - it’s just so that you can tell which file is responsible for which module being loaded.

I’ve no idea about Mac hardware - I had a G5 which was poor at best and that was the last time I touched any apple tin.

I just checked that website, but there’s no probes for this model. Only a couple MacBook Pros from 2011 but no Air.

As for the memtest, I have it on a ready to use USB and will try to launch it asap and see which results it gives me. At this point I can try anything, even giving proprietary drivers another go even if I don’t remember the exact instructions for akmods-wl, broadcom-wl and the blacklisting part for the open source driver to avoid conflicts.

Ok then if I placed the file like that it should load the modules…and this confuses me even more on why it’s crashing now, especially given that if worked for over 30-40 minutes after I tried your first suggestion with modprobe.

I honestly don’t know what to try at this point, I’ll run the MemTest as suggested by George and but if it says the ram is ok I really don’t know what I could do next, besides maybe trying some other version of the closed source drivers (which I wouldn’t mind if they worked honestly).

Go for it - try the wl drivers and if they work better for you, then it’s a win.

Is there anything in the journal immediately prior to the crashes to give any indication of whether the wifi is collateral damage rather than the root cause? I presume you’ve checked, but one never knows.

Do you know the best way to install them? I’ve seen a bunch of very different commands for this, and it seems I need the RPM Fusion Nonfree repo, but as I mentioned most posts/commands I found seem to be from years ago and I’d like to know the best course of action for the current 44 edition of Fedora.

As for the journal, where can I check it? I did in fact not look at it, as I mentioned I know my way around computers but don’t know Linux so I don’t know where to look to see if there’s a log telling me exactly WHY it crashed.

Last but not least: I’m running the MemTest86 right now, it’s at the 3rd pass out of 4 and it’s given zero errors so far, so unless it finds some at very end (which from my experience is very rare with “modern” memories), I think I can rule the RAM being part of the problem out of the equation.

You want a full memtest pass of all memory and all patterns, as you know. I suspect you’ll get a clean bill of health, but you’ve at least ruled flaky ram out of the equation.

journalctl -b 0 will pull up the equivalent of event viewer but in an actually usable format rather than that horseshit Microsoft comes up with. -b -1 for the previous boot, -b-2 for the one before that and so on

journalctl -f will go into follow mode, so it tails the end of the journal in real time - might be useful to leave this running in a terminal you can watch whilst you faff about.

As for switching over to the wl drivers, I don’t off the top of my head - I don’t use wifi at all here and thus I’ve not got any idea if they are packaged in rpmfusion or not. Assuming they are though, there should be a guide alongside them on installing them.

I think the Broadcom drivet can be downloaded for rpmfusion-nonfree

root@P16v:~# dnf info b*-wl
Updating and loading repositories:
Repositories loaded.
Available packages
Name           : broadcom-wl
Epoch          : 0
Version        : 6.30.223.271
Release        : 28.fc44
Architecture   : noarch
Download size  : 24.2 KiB
Installed size : 38.4 KiB
Source         : broadcom-wl-6.30.223.271-28.fc44.src.rpm
Repository     : rpmfusion-nonfree
Summary        : Common files for Broadcom 802.11 STA driver
URL            : https://www.broadcom.com/support/download-search?pg=Legacy+Products&pf=Legacy+Wireless&pn=&pa=&po=&dk=&pl=
License        : Redistributable, no modification permitted
Description    : This package contains the license, README.txt and configuration
               : files for the Broadcom 802.11 Linux STA Driver for WiFi, a Linux
               : device driver for use with Broadcom's BCM4311-, BCM4312-, BCM4313-,
               : BCM4321-, BCM4322-, BCM43142-, BCM43224-, BCM43225-, BCM43227-,
               : BCM43228-, BCM4331-, BCM4360 and -BCM4352- based hardware.
Vendor         : RPM Fusion

I’m currently using the broadcom-wl WiFi driver with ethernt unplugged on an iMac::

% inxi -MN
Machine:
  Type: Desktop System: Apple product: iMac14,2 v: 1.0
    serial: <superuser required>
  Mobo: Apple model: Mac-27ADBB7B4CEE8E61 v: iMac14,2
    serial: <superuser required> Firmware: UEFI vendor: Apple v: 433.140.2.0.0
    date: 04/18/2022
Network:
  Device-1: Broadcom BCM4360 802.11ac Dual Band Wireless Network Adapter
    driver: wl
  Device-2: Broadcom NetXtreme BCM57766 Gigabit Ethernet PCIe driver: tg3

normally used with ethernet, but I do install a wifi driver to make sure it is available if needed (have had ethernet switches die a few times), so have used the wl driver in this system for for over a week while waiting to get a switch replaced. All the rpmfusion repos except testing and steam are enabled. Then sudo dnf5 install broadcom-wl and configure WiFI in NetworkManager or nmcli get working wifi and pull the ethernet cable to check that it is workiing.

I’ll leave the ethernet disconnected for a day or 2 to see if it keeps working.

Edit: wifi was still working this AM. I installed updates (using ssh and dnf5 update —offline) and got a new /lib/modules/7.1.4-202.fc44.x86_64/extra/wl module. Ethernet is still unplugged.

Here I am, sorry for the delay in the reply but I couldn’t check the tests until now.

I let the MemTest run for its entire default length and I confirm the RAM is ok, no issues whatsoever there and the SSD is healthy too.

I also tried running the journalctl command you suggested like this.

I booted my computer, re-connected the WiFi, had it freeze on me, rebooted it and then I ran the command you wrote, and I also did it with the -f option to see it in real time.

In the real-time one I was a red line error mentioning brcmsmac which I didn’t have enough time to read as it wrote a lot more lines before crashing, but after that I searched for the other options of this command and got this.


agonia@fedora:~$ sudo journalctl -p err -b -x
lug 22 15:50:42 fedora kernel: virt/tdx: TDX not supported by the host platform
lug 22 15:50:54 fedora kernel: brcmsmac bcma0:1: brcms_ops_bss_info_changed: qos enabled: false (implement)
lug 22 15:50:54 fedora kernel: brcmsmac bcma0:1: brcms_ops_config: change power-save mode: false (implement)
lug 22 15:50:58 fedora kernel: brcmsmac bcma0:1: brcms_ops_bss_info_changed: qos enabled: false (implement)
lug 22 15:50:58 fedora kernel: brcmsmac bcma0:1: brcms_ops_config: change power-save mode: false (implement)
lug 22 15:50:59 fedora kernel: brcmsmac bcma0:1: brcmsmac: brcms_ops_bss_info_changed: associated
lug 22 15:50:59 fedora kernel: brcmsmac bcma0:1: brcms_ops_bss_info_changed: qos enabled: true (implement)
lug 22 15:50:59 fedora kernel: brcmsmac bcma0:1: brcms_ops_bss_info_changed: arp filtering: 1 addresses (implement)
lug 22 15:50:59 fedora chronyd[719]: Could not add source 192.168.235.240 : Already in use
lug 22 15:51:14 fedora kernel: brcmsmac bcma0:1: brcmsmac: brcms_ops_bss_info_changed: disassociated
lug 22 15:51:14 fedora kernel: brcmsmac bcma0:1: brcms_ops_bss_info_changed: arp filtering: 1 addresses (implement)
lug 22 15:51:14 fedora kernel: brcmsmac bcma0:1: brcms_ops_bss_info_changed: qos enabled: false (implement)
lug 22 15:51:17 fedora gdm-password][2236]: gkr-pam: unable to locate daemon control file

Bear in mind that everything after the “fedora kernel:” is in red in my terminal. Does this make any sense to you (or the others) and could it be related to the freeze?

I’m pretty sure I tried adding the nonfree repo on one of my previous installations of Fedora on this machine, and I tried installing the broadcom-wl driver (which seem to include my BCM 43224 card), but it crashed anyway.

I can try installing it again now that I’m actually getting some knowledgeable help from you guys, I just wonder if broadcom-wl is enough or I need the other akmod stuff I saw being mentioned in many posts.