|
Sad is the world of Linux wireless Ethernet. Sure, the "traditional"
chipsets like Orinoco/WaveLAN, Prism, and Aironet work as well as they
always have, but newer hardware like the Atheros chipset, the new MPI-350
card from Cisco, and the infamous Centrino chipset are all only supported
by broken/outdated closed-source drivers, or are not supported at all.
My new Thinkpad is "wireless-ready" meaning it has a built-in antenna
and a mini-PCI slot for a wireless card. Nifty, right? The niftiness of
having internal wireless hardware combined with the advantage of being able
to select a NIC with good Linux drivers. But naturally, IBM doesn't make
it this easy. For "regulatory" reasons, which I guess are understandable
considering the anal retentiveness of the FCC, the BIOS is programmed to
accept only one of three cards in the mini-PCI slot. You can guess which
three cards they are based on the previous paragraph.
The Thinkpad shipped with a Centrino card, which wasn't looking
promising as Intel has been promising Linux drivers for over a year now
without delivering anything. The best option seemed to be the Aironet
card, since older Aironet cards have been supported under Linux since the beginning of
time. The "official" Cisco Linux driver for the
MPI-350 was a closed source module last updated over a year ago, but kernel
2.6.3 was released with experimental support for the card in the airo
module, so I figured my odds of getting it working were good.
I priced out the MPI-350 in the usual places, coming up with about $70,
but then it occurred to me that the IBM OEM cards might have a different PCI
ID and only the IBM-supplied MPI-350s would make it past the Nazi BIOS.
So I bit the bullet and ordered an Aironet MPI-350 for $120 from IBM.
The day before my new card showed up, Intel announced the first release
of their Linux Centrino wireless driver. Open-source and everything. I
tried it out and it worked. But a bit buggy and no WEP, so I decided not
to return the Aironet card.
So today I finally got around to installing the new card. Hardware
installation was painless, of course. Then I booted up and found that the
airo module had been loaded, but the card wasn't associating with the
access point. A Google search revealed that my card's firmware was too
new, and that I needed to downgrade to 5.00.03 to get it to work. No
problem, I can download that from Cisco, and flash it into the card with...
oops.
The open-source driver won't talk to the new firmware at all. The Cisco
Linux driver also requires an older firmware, so there were zero
options for flashing the card on Linux.
Two hours later, Windows XP was restored on the laptop. Three minutes
after that, the card had been downgraded. An hour later, Linux was
back.
One final issue. Although Linux could now talk to the card, it wouldn't
associate with an access point. It seemed to be a problem with the WEP
configuration due to messages like:
Setting key 0
airo: Max tries exceeded waiting for command
PC4500_writerid: Write rid Error 65535
PC4500_writerid: Cmd=0121
airo: WEP_PERM set ffff
The solution was to download the Cisco Linux Aironet Configuration
Utility (ACU), which actually works with the open-source kernel module as
well as Cisco's kernel module, and use that to set the WEP key. Since the
card stores the key in non-volatile memory, this only needs to be done
once. Now when I boot the system, I use iwconfig eth1 enc on to
enable WEP without trying to set a key, and this uses the stored key to
associate with the access point. Success!
I believe at this point, my laptop is now fully functional. All I need
to do now is figure out how to do some of the fancier power management to
squeeze the maximum life possible out of my battery.
|