How to get ath5k working on Jaunty with Compat-wireless and a self-compiled kernel
I used to have some trouble while setting up my Atheros PCI card on Ubuntu Linux 9.04. It worked natively on Ubuntu 8.04, where it was detected as ath0. I upgraded from 8.04 to 8.10 whereby I noticed my wireless PCI card didn't work natively anymore. Someone suggested me to upgrade from 8.10 to 9.04 Jaunty, and I did that immediately. After the system upgrade I noticed again that my wireless device was gone in Ubuntu 9.04. When I ran iwconfig I didn't see wlan0 or ath0 anymore.
Here you can see some details of my PCI card:
7 [email protected] $ lspci | grep Atheros
04:00.0 Ethernet controller: Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter (rev 01)
Now I'll confirm that I'm running Ubuntu 9.04 Jaunty:
8 [email protected] $ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 9.04
In the beginning I only saw the following on Jaunty. Here you can see that a wireless device doesn't show up.
24 [email protected] $ iwconfig
lo no wireless extensions
eth0 no wireless extensions
pan0 no wireless extensions
wmaster0 no wireless extensions.
I've tried stuff like madwifi, ndiswrapper and previous modules like ath_pci . None of them was able to fix my problem, the wireless device was still missing.
Then I've heard that I need the ath5k FOSS Linux Wireless driver, something that is provided by the compat-wireless package.
I downloaded a compat-wireless tarball from orbit-lab.org but I was unable to get it working. While compiling I received several errors, one of these errors reported something like “You need to have mac 08211 enabled in your kernel ...”. After trying different versions of the compat-wireless tarball on the Ubuntu Generic kernel I realized that it was impossible to compile this on a default Ubuntu generic kernel.
So you have to compile your own kernel. While I'm writing this tutorial I see that 18.104.22.168 is the latest version of the Linux kernel. Keep in mind that this version might be old now, so is the wget link. Start a konsole/terminal and enter this as root:
tar xjf linux-22.214.171.124.tar.bz
ln -s linux-126.96.36.199 linux
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
You must first enable mac80211 in order to enable ath5k!
Now as root, run: (You still have to be in /usr/src/linux)
You can eventually load your alternate configuration file, but this isn't compulsory. Now you have to commit some very important changes. Use your arrow keys to navigate:
Improved wireless configuration API
M Generic IEEE 802.11 Networking Stack (mac80211)
Make sure that you see the “M” like above. Now you've enabled mac80211.
Now you can enable ath5k in the kernel configuration.
Device Drivers --->
[*] Network device support --->
Wireless LAN --->
M Atheros 5xxx wireless cards support
Make sure it looks like this.
Now you're finished and you simply have to select Exit. You say YES when you the following question appears. (Do you wish to save your new kernel configuration?)
Ok, now you can start with compiling your kernel.
fakeroot make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_header
Depending on your CPU speed, this will take a certain time. When it's all finished you have to install your new kernel.
dpkg -i linux-image*.deb
dpkg -i linux-headers*.deb
Your GRUB bootloader configuration file should be modified automatically. Make sure that your now kernel entries are visible in your /boot/grub/menu.lst file. If not, you have to insert the necessary lines by modifying your /boot/grub/menu.lst file.
Reboot now, and boot in your new self-compiled kernel.
Download a compat-wireless tarball from orbit-lab.org. Extract the tarball, go into the newly created map and install compat-wireless.
tar jxvf compat-wireless*.tar.bz2 or tar zxvf compat-wireless*.tar.gz
make && make install
Now you should be able to load the necessary module.
And wow, a wireless device appears while you run iwconfig
Check your /etc/network/interfaces file and restart the service with /etc/init.d/networking restart and it should be working.