Broadcom proprietary wireless driver on Mandriva Linux 2009

Shortly before the release of Mandriva Linux 2009, Broadcom released a proprietary driver for their widely used (but somewhat troublesome on Linux) wireless adapters. This came too late to include it in the release of 2009, but since then, I've tested it and come to the conclusion that it's probably the best driver available for the devices it supports.

The alternatives

The alternatives are the kernel b43 driver, and using Ndiswrapper with the Windows driver. Both of these are somewhat problematic, though. Neither works out of the box; in both cases you have to feed them an external file before they'll work.

The b43 driver needs a file to extract the device firmware from. This file is not freely redistributable, so distributions cannot include it. We can only include a mechanism to prompt the user to provide a file. However, it's possible to provide a file that will be processed but won't produce a usable set of firmware files for the particular driver version in use. Mandriva's handling mechanism is in fact broken on Mandriva Linux 2009, which doesn't help matters. Finally, b43 still doesn't work perfectly on most adapters. For me it works quite reliably, but is significantly slower than either ndiswrapper or the proprietary driver. In theory, b43 is the 'freest' driver, but in practice, Broadcom's own driver is more or less as free; both use a free software 'shell' wrapped around proprietary firmware.

ndiswrapper needs a Windows driver for the card. As with the file for b43, a distribution can't include a Broadcom Windows driver for legal reasons, and it can be tricky for users to know how to actually provide the right driver for their device in the form ndiswrapper understands: the raw .inf and .sys files. Users also often get confused between the instructions for using b43 and ndiswrapper, which doesn't help matters.

Using the proprietary Broadcom driver

So, if you've been struggling with getting a Broadcom card working on 2009, try using the proprietary driver. Here's how. First, using the Mandriva repository configuration tool (which you can access from within the graphical software installation tool or from the Mandriva Control Center), ensure the 'Non-free Backports' repository is enabled. Then install the dkms-broadcom-wl file. You should also ensure you have the kernel-something-devel package that matches your running kernel installed. There's a trick you can use to do this, in a console as root (it's all one command, wrapped to fit the screen here):

urpmi kernel-`uname -r |cut -d- -f2`-devel-latest kernel-`uname -r | 
cut -d- -f2`-devel-`uname -r | cut -d- -f1`

Finally, make sure all the alternative drivers for the card are 'blacklisted', to prevent them being loaded in preference. Edit the file /etc/modprobe.d/blacklist-mdv and add these lines to it:

blacklist ssb
blacklist b43
blacklist ndiswrapper

Also edit the file /etc/modprobe.conf and remove any line which mentions ssb or b43. Finally, reboot the system, and run the Mandriva network configuration tool, drakconnect. It should now see the interface and allow you to configure it as usual.