Fedora 44 Wi-Fi and Webcam fix on Mid-2014 MacBook Pro
I installed Fedora 44 on the $100 MacBook Pro I bought recently just to test Linux on it, and Wi-Fi simply didn't exist – no network, no wlan interface, and literally nothing in NetworkManager. And after spending a lot of time, here's the short version of how it was fixed.
I discovered, the MacBook has a Broadcom BCM4360 Wi-Fi chip 14e4:43a0 and the open-source b43 driver that Fedora loads by default doesn't support this 802.11ac chip, so the card sits there unable to do anything. It needs the proprietary broadcom-wl driver, which lives in the RPM Fusion nonfree repo, and obviously doesn't automatically get installed.
So the fix starts with enabling the nonfree repo and installing the driver.
sudo dnf install https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install akmod-wl kernel-devel-$(uname -r)
The akmod-wl package builds the wl kernel module for your running kernel and rebuilds it automatically after future kernel updates. Next, needed to stop the open drivers from claiming the card by creating /etc/modprobe.d/broadcom-wl.conf with these lines.
blacklist b43
blacklist b43legacy
blacklist brcmsmac
blacklist ssb
blacklist bcma
blacklist bcm43xx
And make sure wl loads at boot by putting a single line in /etc/modules-load.d/wl.conf.
wl
Then build the module and reboot.
sudo akmods
sudo reboot
After the reboot Wi-Fi showed up in the toolbar and in GNOME settings and connected without any issues. By the way, USB tethering via my Android device got me through the setup, because that was the only way to use internet on the Fedora device.
Apart from this, the webcam also didn't work and needed more work. This MacBook has a Broadcom 720p FaceTime HD camera (14e4:1570) with no open driver at all, so /dev/video0 never appears. The fix has two parts, and I also installed lm_sensors along the way to read fan speeds and temperatures.
First the driver. It's out-of-tree and built via DKMS, which already has kernel-devel available from the Wi-Fi setup.
sudo dnf install dkms
git clone --depth 1 https://github.com/patjak/bcwc_pcie.git
sudo cp -r bcwc_pcie /usr/src/facetimehd-0.7.0.1
sudo dkms add facetimehd/0.7.0.1
sudo dkms build facetimehd/0.7.0.1
sudo dkms install facetimehd/0.7.0.1
Then the firmware. The camera needs Apple's proprietary firmware extracted from the macOS 10.12.6 update, and there's a script that pulls only the needed chunks from Apple's CDN and verifies them by SHA256.
git clone --depth 1 https://github.com/patjak/facetimehd-firmware.git
cd facetimehd-firmware
sudo ./facetimehd-firmware-install.sh
The script drops firmware.bin and eleven sensor calibration files into /usr/lib/firmware/facetimehd/. Then load the module and the camera appears.
sudo modprobe facetimehd
ls /dev/video0
I verified it with a one-frame ffmpeg capture, which produced a proper 122 KB JPEG. To make it persistent across reboots, add facetimehd to /etc/modules-load.d/facetimehd.conf and /etc/dracut.conf.d/facetimehd.conf, then rebuild the initramfs.
echo "facetimehd" | sudo tee /etc/modules-load.d/facetimehd.conf
echo 'add_drivers+=" facetimehd "' | sudo tee /etc/dracut.conf.d/facetimehd.conf
sudo dracut --force
DKMS rebuilds the camera module automatically on kernel updates, the same way akmods handles the Wi-Fi driver. Secure Boot is a non-issue on this machine since Apple's EFI doesn't support it, so the unsigned modules load without any key enrollment.
By the way, for all of this I took help from OpenCode as it was easy to install and use in terminal, and it worked great. It researched the problems and told me what to do.
Some links here are affiliate or referral links. Buying through them supports this site at no extra cost to you, and it doesn't affect my opinions.