Installing Broadcom Wireless Internet Drivers on a Dell Inspiron 1525 with Debian Lenny
Wifi cards
This package should work for the following numbers:
- BCM4310
- BCM4311
- BCM4312
- BCM4321
- BCM4322
You can find out what yours is by typing this in a terminal:
lspci | grep Network
I also assume a 32-bit architecture.
Lenny
If you're using etch, I recommend you upgrade to lenny. It's still pretty stable and you get newer software with more features. Also there are less kernel problems and more hardware is supported.
Getting drivers
Unfortunately there are no open free drivers for this hardware, but Broadcom does provide a binary blob that works fairly well. Much better than ndiswrapper, anyways, which is also just wraps a Windows driver. However there is a strange problem that prevents ssh, telnet, ftp, and the like from working in the terminal, even though they work with packages such as PuTTY and FileZilla. This guide attempts to fix that problem.
Installation
Download the drivers
Grab the broadcom driver and unzip it into its own folder:
mkdir hybrid_wl cd hybrid_wl wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32_5_10_27_6.tar.gz tar -xzf hybrid-portsrc-x86_32_5_10_27_6.tar.gz
Apply the patches
Now we'll use the patch posted on the page for the connection blocking bug. There is one for src/wl/sys/wl_iw.c and one for src/wl/sys/wl_linux.c. Apply these diffs to your code with the patch tool. If you're too lazy to do it yourself, you can use this archive I created just for you, with the diff merged already. (If you do this, note that this replaces the one you downloaded in the first section, and you should redo that bit, using this package rather than broadcom's.)
Make sure you have the build tools
You're going to compile the kernel module, so you need to have the tools installed. You'll need build-essential as well as the headers for your kernel:
sudo apt-get install build-essential linux-headers-`uname -r`
Compile the kernel module
I'm ripping this part straight from the README.txt file Broadcom supplies. Make clean and then build:
make -C /lib/modules/`uname -r`/build M=`pwd` clean make -C /lib/modules/`uname -r`/build M=`pwd`
If you get any errors, read them and try to see if it is a dependency problem. If it is, search your repository and install it, and then try again. Sorry if I didn't list it above.
Test the kernel module
The build process created wl.ko, which we add to the kernel to enable wireless. Before we set it up to load automatically, let's test it out. First we remove conflicting modules:
sudo rmmod bcm43xx b43 b43legacy ssb wl
Next we make sure the kernel can decode TKIP encryptions:
sudo modprobe ieee80211_crypt_tkip
And finally we insert our module into the kernel:
sudo insmod wl.ko
If it works, great, move on. If not, uh oh, better go get some help. Don't do the rest of these steps if this test doesn't work.
Install the module so it loads automatically
Sweet, it works. But you really don't want to do that every time you boot your computer. Remove the module you just inserted. We'll put it back in later, don't worry.
sudo rmmod wl
Okay now we're back to a clean kernel. Let's put wl.ko somewhere logical and then insert it back again.
sudo mkdir -p /lib/modules/`uname -r`/misc sudo cp wl.ko /lib/modules/`uname -r`/misc/wl.ko sudo insmod /lib/modules/`uname -r`/misc/wl.ko
Now that we have the kernel module in a logical place, we use depmod to generate the module dependency information, which will probe ieee80211_crypt_tkip and wl when the system boots:
sudo depmod -a
We have one last thing to do. Remember those modules we removed so that they wouldn't conflict with wl? Let's blacklist them so that they never cause us problems in the future:
sudo echo "blacklist bcm43xx" >> /etc/modprobe.d/blacklist sudo echo "blacklist b43" >> /etc/modprobe.d/blacklist sudo echo "blacklist b43legacy" >> /etc/modprobe.d/blacklist sudo echo "blacklist ssb" >> /etc/modprobe.d/blacklist
That's it! Reboot to see if our configuration worked.
Comments
Post a comment
Feedback appreciated :)