Sat, 16 Sep 2006
I decided retire my heavily tweaked debian installation on my laptop in favour of a nice friendly ubuntu installation with logins for all the family. Installing ubuntu was easy enough, rather impressively so in fact, but then it got to the stage of getting the wireless to work.
On my debian installation I had installed ndiswrapper, and I forgot about that until after I had overwritten it. So here's what I did, just in case I need to do it again for some reason.
I'm using a Linksys WPC54GS card. lspci tells me it is a Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03) and lspci -n tells me that the PCI ID is 14e4:4320 (rev 03). The ndiswrapper list tells me to get the driver from ftp://ftp.linksys.com/pub/network/wpc54gs_driver_utility_v1.0.zip driver (it seems that kwiki turns ftp links into http) and from there I can extract the files lsbcmnds.inf and bcmwl5.sys.
Ubuntu 6.06.1 didn't come with ndiswrapper-utils installed, so that needs to be done, and then I can run ndiswrapper -i bcmwl5.sys. ndiswrapper -l confirms everything is OK. modprobe ndiswrapper loads the module, and dmesg confirms all has gone well.
But dmesg also showed problems: bcm43xx: Failed to switch to core 0 and bcm43xx: Error: Microcode "bcm43xx_microcode5.fw" not available or load failed. rmmod bcm43xx ndiswrapper and then module ndiswrapper fixed things, and dmesg showed more interesting stuff.
Adding blacklist bcm43xx to /etc/modprobe.d/blacklist fixes that permanently. And ndiswrapper -m adds alias wlan0 ndiswrapper to /etc/modprobe.d/ndiswrapper. Since ubuntu wants to use eth1 instead of wlan0 I just edited that file to add alias wlan0 eth1.
Then the essid and key can be set up in the networking tool, and it all works. Sometimes. For some reason I need to specify the key in hex - the ASCII string gives an incorrect value. Then I added /etc/init.d/networking restart to /etc/rc.local to make sure things come up correctly. Everything seems OK now.