Edit: The things described in this how to are still working, but you’ll have some problems. Use this one instead.

Dell 1390 is a wireless network card used in some Dell notebooks. It is using the Broadcom 4311 chipset. Until a few days ago, everybody was using ndiswrapper and the Windows drivers to get it working under Linux. The bcm43xx driver is supporting it starting from the 2.6.20 kernel release, but it was quite buggy: random disconnects and very slow speed (actually, the best speed I got was something like 90 KB/s). Release candidate versions of the 2.6.21 kernel seem to resolve all this issues. This a guide to help you compile the latest kernel version (don’t worry, you don’t need to configure it) and use the native linux driver for you Dell 1390 wireless card. Why should you use it? Well, WPA works OK now (I couldn’t get it working with ndiswrapper), scanning and configuration are a little bit faster, the signal power seems to be improved (but I may be wrong) and it supports monitoring mode (wep cracking and stuff). Now, the actual how-to.

First, because most of the commands we’ll be running require root access, we are becoming root (sudo kind of sucks when you have to use it on every line):

sudo su

Now, you should update your package list and upgrade your system and install the packages required to compile the kernel.

apt-get update

apt-get dist-upgrade

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Next, we download the kernel source.

cd /usr/src

wget ftp://kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.21-rc7.tar.bz2

We extract and symlink it…

tar xjf ./linux-2.6.21-rc7.tar.bz2

ln -s ./linux-2.6.21-rc7 ./linux

Import the current kernel configuration (there may be some warnings displayed, not to worry).

cd linux

cp /boot/config-`uname -r` ./.config

make menuconfig

We import the configuration file with the “Load an Alternate Configuration File” option and choosing “.config”. Then we make sure MSI is disabled (we don’t want to use the pci=nomsi option, isn’t it?) by going to the Bus Options (PCI… ) menu and if necessary disabling Message Signaled Interrupts. Exit and save the configuration. Now we compile the kernel the Ubuntu way.

make-kpkg clean

fakeroot make-kpkg –initrd –append-to-version=-inspiron1501 kernel_image kernel_headers

Now get a cup of coffee or something like that because it takes some time. Next, we install the newly created packages.

cd ../

dpkg -i linux-headers-2.6.21-rc7-inspiron1501_2.6.21-rc7-inspiron1501-10.00.Custom_i386.deb

dpkg -i linux-image-2.6.21-rc7-inspiron1501_2.6.21-rc7-inspiron1501-10.00.Custom_i386.deb

We install the firmware files.

wget http://ubuntu.cafuego.net/pool/feisty-cafuego/bcm43xx/bcm43xx-firmware_1.3-1ubuntu2_all.deb

dpkg -i ./bcm43xx-firmware_1.3-1ubuntu2_all.deb

rm ./bcm43xx-firmware_1.3-1ubuntu2_all.deb

Then we restart the notebook and if we don’t know how to configure our wireless network we search for a tutorial.

Now everything should work ok. If it is not, you should try modprobe bcm43xx and then iwlist scan. If you still have problems, post a comment containing the output of dmesg.