21:47 Friday, November 11 2007

atheros is a PITA, or why wifi in Linux is still a crapshoot

Up until our trip to Joshua Tree, I had a really nice laptop. It had an Intel Core Duo CPU, NVIDIA G7x GPU, 1600x1200 DFP, the works. Possibly most importantly, it had a built-in Intel 2945 wireless adapter which worked flawlessly in Linux. Sadly, this laptop started to uncontrollably overheat, most likely due to the CPU fan failing. Since every brand & model of laptop is virtually unique, I can't just go down to Fry's and get a replacement, so the thing is basically useless now. What made this suck even worse, is that I was using it in the living room to drive the TV over S-VIDEO, while streaming media content over NFS, over wifi from the system in my office. It was a great setup.
At this point, things get rather complicated. Denise laptop is over 5 years old, but would make a decent replacement hooked up to the TV, however its wireless is only 802.11b, so not fast enough to stream media content (TV shows, movies, etc). So to use it, I'd have to get an 802.11g PCMCIA card. Of course, if her laptop is hooked up to the TV, then she can't use it, so we'd still need another laptop. What we ended up deciding to do was get a new laptop, and an 802.11g PCMCIA card.
Denise's needs in a laptop are fairly limited. Mostly email, web surfing & watching some TV shows. So something low end would be quite sufficient. I found an Acer Travelmate 2480 on NewEgg for \$500. I did some research, and found several people stating that it worked well in Linux. I also found a D-Link DWL-G630 wifi card for \$20, which others stated worked well in Linux. I ordered them both, and they arrived this past Monday. At that point, I began 5 evenings of misery.
On paper, this should have been a fairly straightforward task. I immediately ditched vista, and started off with WinXP (Denise needed it for a game). That went about as well as any WinXP install can ever go. Installing Fedora 8 went very smoothly on the new laptop. I applied all the updates, and then got the WinXP drivers installed. At this point, I copied over Denise's \$HOME from the old laptop onto the new one, and figured that getting the built-in wireless working would take a few minutes, and I'd be done. Such a fool was I. I first attempted with ndiswrapper, because I've had good luck with it on David's computer. Unfortunately, as soon as I did a "modprobe ndiswrapper", I got an immediate kernel panic. I then tried again with the in-kernel ath5k driver, and while it appeared to recognize the hardware, it still failed to bring up the ath0 interface. I made a brief attempt at getting the DWL-G630 card working in the old laptop, using ndiswrapper, and also got a kernel panic. At this point, I started Googling like mad to figure out how anyone else got this hardware working, and much of what I was finding was either inconclusive or just plain discouraging. Yes, there were some people claiming success, but they never provided any useful details to back up their claims.
Eventually, I came across a few bits of information which ultimately confirmed what I was figuring out on my own. The Atheros AR5007EG chipset has zero native Linux support right now, but might eventually. At that point, I threw in the towel, and put an old 802.11 Linksys WPC11v3 PCMCIA wifi card into the new laptop, and got online immediately. While not the ideal solution, it was good enough for Denise's needs, and got her going.
Tonight, I returned to the old laptop, with the DWL-G630 card. After some more googling, I found some coherent instructions on how to get it working with the madwifi driver. After some moderate effort, I got it working. Its really this simple:

* Install madwifi.  I used livna, but just about any source with a recent version should be sufficient
* Blacklist the ath5k driver in /etc/modprobe.d/blacklist
* ensure that ath5k isn't loaded, either with 'modprobe -r ath5k' or by rebooting
* Add the following two lines to /etc/modprobe.conf:
alias ath0 ath_pci
alias wifi0 ath_pci