Currently Linux wireless development has been focusing on two completely different wireless stacks, the SoftMAC stack and the Devicescape (dscape) stack. The bcm43xx driver has been traditionally using SoftMAC, and that is what will be included in the 2.6.17 kernel. However, there has been a fork of the project using the dscape stack. I've written this howto largely because I've found the behavior of the SoftMAC stack highly annoying (on my rig you only have a short time window to obtain an IP address or it turns off the radio) so I dove into building the kernel with the dscape stack. This has worked for me, but as always, YMMV.
Oh, and don't forget to have a functioning backup kernel available and that you know how to boot to it. If you're like me, you're gonna screw this up a few times before you get it right and you don't want to be left kernelless. You have been warned.
Dependencies:
The
git tool
wpa_supplicant version 0.4.9 or later
fwcutter and your broadcom Windows driver
fwcutter
The instructions in the fwcutter tarball are actually pretty good. Basically you just need to compile it and then run it against your Windows driver to extract the firmware files. Finally, running
make installfw will copy those files to /lib/firmware
Use git to download the latest kernel tree
Code:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6
This will create a directory call ./linux-2.6 and will download the whole kernel, so it may take a bit.
Patch the kernel source
Drop into the linux-2.6 directory. Git needs two environment variables set in order to apply the patch, so do that first:
Code:
export GIT_AUTHOR_NAME=yourname
export GIT_COMMITTER_NAME=yourname
Note that the name you give is irrelevant, git just needs them.
Now patch with John Linville's git tree:
Code:
git pull git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-dev.git
If you get no errors, move on to kernel compiling
Compiling the kernel
Configure your kernel as you normally would, but to activate the Dscape stack and the bcm43xx driver, you need a few things:
In NETWORKING select Generic IEEE802.11 Networking Stack (dscape).
In Device Drivers> Network device support> Wireless LAN (non-ham radio) select the bcm43xx driver. Note that this will not appear until you've selected the dscape stack in Networking.
Personally, I compile both the networking stack and the driver as modules.
Finish configuring the rest of your kernel, compile and install as you normally do.
wpa_supplicant
If you have 0.4.9 or later, you don't need to patch it. As far as I can tell, the only required driver in wpa_supplicant is the wext driver, so you need this in your .config:
DEVICE_DRIVER_WEXT=y
You can have other drivers in wpa_supplicant, but I think you must have wext for dscape to work. Compile and install, and then configure /etc/wpa_supplicant.conf to support your network.
Now reboot and keep your fingers crossed........
If you can boot into the new kernel, check to see if wlan0 is in ifconfig. If it isn't bring it up with
ifconfig wlan0 up. Then, start wpa_supplicant:
Code:
wpa_supplicant -Bw -Dwext -c/etc/wpa_supplicant.conf -iwlan0
You should be able to see wlan0 associating with your network, and you should be able to request an IP address with a DHCP client. Slackware uses dhcpcd, but not all distros do.
Good Luck!