Update 15 November 2008: Just a note to mention that I’ve packaged this up into an RPM and so this driver is now available as an RPM in the rpmfusion repos for Fedora 8, 9 and 10.
See this post for instructions of how to install using the RPM version (much easier!).
Update 26 January 2009: These instructions are now fairly outdated. The latest releases of the broadcom driver don’t require the same patches as mentioned here to make them build correctly against recent kernels. I highly recommend using the RPM installation instructions linked above, or if you require help with building the latest drivers please drop me a message or leave a comment below.
Happy, happy days! At long last, a Linux Broadcom driver for the BCM4328 chipset that doesn’t require ndiswrapper and Windows drivers. For me, this is really, really huge: ndiswrapper has never worked properly with NetworkManager using WPA security but this new Broadcom driver seems bullet-proof. It is even supposed to support 802.11n standard but I can’t verify that just yet.
The source packages currently available from Broadcom (version 126.96.36.199) don’t build on the current Fedora 9 kernel (188.8.131.52-45) and probably won’t compile on any newer kernel either. Digging around a bit I found a patch that makes the driver build successfully.
Great, but that’s not the whole story: I then found that with the new driver I was unable to SSH or telnet into any remote servers – bummer. However, some more digging turned up another patch that fixes this problem. With these two patches in place the new driver really rocks. For the first time in 10 months (since I bought my MacBook) I can actually connect to WPA secured networks using NetworkManager – no more fiddling around with wpa_supplicant scripts for me!
Anyhow, here’s a little how-to guide to install the new Broadcom driver in Fedora 9. Note: I’m a little unsure of which Broadcom chipsets this driver actually supports but I can confirm that it works beautifully with the BCM4328 which is standard on MacBook 3,1 and 4,1 versions.
Important note: Since writing this guide Broadcom have released an updated driver (v 184.108.40.206). The updated driver and updated patches can be downloaded here along with the original driver/patches mentioned in this guide. Adjust the instructions below according to the version you are using.
Ensure you have the kernel-headers package installed for your current kernel (I presume you already have make and gcc etc installed):
su - yum install kernel-headers
2) Patching the source yourself
If you want to patch the driver yourself, download the original driver file from the broadcom website here. Make sure to get the 32 or 64 bit version depending on your installed kernel. I’ve made the patches available at my Fedora 9 page so go there and grab the patches then patch the source code.
3) Using my pre-patched source (easier)
If you’re not sure how to patch the source code or just can’t be bothered, then go grab my ready-patched tarballs from my Fedora 9 page and untar them. Here’s how:
wget http://www.cenolan.com/fedora9/broadcom-patched-x86_32-220.127.116.11.tar.gz tar zxvf broadcom-patched-x86_32-18.104.22.168.tar.gz cd broadcom-patched-x86_32-22.214.171.124/
wget http://www.cenolan.com/fedora9/broadcom-patched-x86_64-126.96.36.199.tar.gz tar zxvf broadcom-patched-x86_64-188.8.131.52.tar.gz cd broadcom-patched-x86_64-184.108.40.206/
4) Building the driver
Now we’ve got our patched source building the driver kernel module is easy:
make -C /lib/modules/`uname -r`/build M=`pwd`
This should create a file called wl.ko – this is the magic driver file.
5) Install the new driver
We need to copy the new kernel module to the correct location, add wlan0 as an alias for this driver so that it loads on boot and resolve the module dependencies:
su -c "cp wl.ko /lib/modules/`uname -r`/kernel/net/wireless/ su - echo "alias wlan0 wl" >> /etc/modprobe.conf depmod -a
6) Blacklist conflicting drivers
This new driver suffers the same conflicts as the ndiswrapper driver so we need to blacklist the b43, ssb, and bcm43xx drivers, as well as the ndiswrapper driver:
su - echo "blacklist bcm43xx" >> /etc/modprobe.d/blacklist echo "blacklist ssb" >> /etc/modprobe.d/blacklist echo "blacklist b43" >> /etc/modprobe.d/blacklist echo "blacklist ndiswrapper" >> /etc/modprobe.d/blacklist
7) Remove the old module and activate the new one
su - rmmod bcm43xx; rmmod b43; rmmod b43legacy; rmmod ndiswrapper modprobe ieee80211_crypt_tkip; modprobe wl
8) All done!
Reboot, or restart NetworkManager and you’ve hopefully got the new driver installed.
Say hello to faster and more robust connections, and say goodbye to ndiswrapper and crappy badly supported Windows drivers!