UPDATE: I spoke too soon! I'm leaving this full post for reference purposes, however, before trying to implement it - please seem comment below about how it didn't work after all.

It has nearly killed me, but it finally seems to be working on the fix is not so difficult.

For starters - here are the details on the laptop I was using:

Dell Vostro 1000 Broadcom Wireless card (bcm94311MCG revision 1)

teacher@frick:~$ lspci | grep "Network controller"
05:00.0 Network controller: Broadcom Corporation BCM94311MCG wlan mini-PCI (rev 01)
teacher@frick:~$

There are two "things" that make the wireless card work. Often they are both referred to as "drivers." One is the firmware. Firmware is software that is loaded into the wireless card by the kernel (at boot time). The other is the "driver." The driver is the software that the kernel uses to communicate with the wireless card.

The firmware has to be copied to /lib/firmware. I don't know any other way to load the firmware other than to reboot the machine, but there probably is a way to do it.

The driver is packaged as a kernel module and is loaded by the kernel.

Driver

The kernel I'm using (2.6.22-14) has drivers that work for me. They are called bcm43xx and you can see if they are properly loaded by running:

lsmod | grep bcm43xx

There's a lot of directions out there saying that you shouldn't use this driver and instead you should use ndiswrapper. I didn't use those directions - the driver worked fine for me.

Firmware

Broadcom publishes the firmware, and it's not free software. Therefore, one has to download the firmware from a web site that is authorized to distribute it and then run a program on your linux machine that can "cut" it into firmware files that your linux machine can use.

There are several versions of the firmware out there.

I started by using the Restricted drivers interface provided by Ubuntu, which installed bcm43xx-fwcutter and a shell script that downloads the firmware and "cuts" it into the right firmware files and puts them in /lib/firmware for you.

This didn't work.

I then discovered a good site on linuxwireless.org which explained the difference between b43 and bcm43xx. I first moved the broadcom files that were in /lib/firmware to a backup directory. Then, I followed the directions on the linuxwireless.org, running the steps for b43, not bcm43xx (which is what the Ubuntu restricted drivers interface installed). Following the directions on that page are a pain in the butt. Wouldn't it be nice if I could just post the extracted firmware files on this blog and you could just download them and put them in place instead of dealing with all that install this run that business? Too bad they are proprietary.

Anyway, it still didn't work.

Then, on a random page about bcm43xx and Dapper I read:

VERY IMPORTANT: MOST PEOPLE NEED TO USE THE FOLLOWING COMMAND TO GET CONNECTED

sudo iwconfig ethX rate 11M

On my laptop, the wireless card was called eth0, so I ran:

sudo iwconfig eth0 rate 11M

Aha! Now it works. I'm still not sure if I needed the different firmware. Maybe the other firmware would have worked.

As the aforementioned page points out, you can add that iwconfig line to your /etc/network/interfaces file such that it looks somethin like this:

iface eth0 inet dhcp
wireless-rate 11M
wireless-essid My network
wireless-key 1234-5678-blah-blah-blah