How to install the development version of atk9k

From ThinkWiki
Revision as of 09:10, 7 August 2008 by Kevmitch (Talk | contribs) (Configure the kernel)
Jump to: navigation, search

ath9k is the new open source driver for newer atheros cards including those with 11n hardware support.

At the time of writing, ath9k will not compile against the current kernel release 2.6.26. Thus, in order to get it running, you will need to download and compile the current wireless testing branch of the kernel which follows the current release candidate for the next kernel (2.6.27). Previous instructions for downloading and compiling the ath9k driver separately from wireless testing are deprecated as it has now been added in to wireless testing. This howto will outline the entire process without assuming any prior knowledge of git or kernel compilation.

Install git and other stuff

You will need to have git up and running to access both the wireless testing branch, and the ath9k driver itself which is not yet included. Git is the revision control system used for the Linux kernel and associated projects. Your distribution will most likely have a package for it so install that using aptitude, yum or portage or whatever first. Additionally, compiling your kernel is at a minimum going to require "gcc" and "make" and you're also going to need either the qt3 development libraries to run the x-configuration utilities or ncurses development libraries to run the menuconfig utility. The names of these packages and how to install them will vary from distro to distro.

Debian

# aptitude install git-core build-essential kernel-package libqt3-mt-dev fakeroot

Get the wireless-testing branch

It does not appear that you can take the easy way out and use the compat-wireless tree. Instead we have to compile the entire wireless-testing kernel to successfully build ath9k. Once you've got git installed, you can follow the linux wireless git-guide and download the wireless testing branch

$ cd /usr/src
$ git-clone git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git

Copy your current kernel's config

This is the part most people are afraid of. However, you can use your current kernel's configuration as a baseline to help ease the pain. Most self-respecting distributions keep a copy of your kernel configuration in the /boot directory alongside the kernel itself. If this is not the case, you might find a copy of the kernel config at /proc/config.gz (which will of course needs to be gunziped). Whatever the case, you will want to copy the the current config file to /usr/src/wireless-testing/.config

Debian

$ cp /boot/config-`uname -r` /usr/src/wireless-testing/.config

Configure the kernel

Now run

$ make xconfig

You'll likely see some messages in the terminal about unset or unrecognized configuration variables which should be automatically either added or removed respectively. You might want to make sure the following are enabled

Networking → Networking Options → [Y]QoS and/or fair queueing (CONFIG_NET_SCHED)
Networking → Networking Options → QoS and/or fair queueing → [M]Multiband Priority Queueing (PRIO) (CONFIG_NET_SCH_PRIO)
Networking → Wireless Networking → [M]Improved wireless configuration API (CONFIG_CFG80211)
Networking → Wireless Networking → Improved wireless configuration API → [Y]nl80211 new netlink interface support (CONFIG_NL80211)
Networking → Wireless Networking → [Y]Wireless Extensions (CONFIG_MAC80211)
Networking → Wireless Networking → [M]Generic IEEE 802.11 Networking Stack (mac80211) (CONFIG_WIRELESS_EXT)
Wireless Networking → Generic IEEE 802.11 Networking Stack (mac80211 Networking) → Rate control algorithm selection → Default rate control algorithm → [Y]PID controller based rate control algorithm (CONFIG_MAC80211_RC_DEFAULT_PID)
Networking → Wireless Networking → Generic IEEE 802.11 Networking Stack (mac80211) → Rate control algorithm selection → [Y]PID controller based rate control algorithm (CONFIG_MAC80211_RC_PID)

and most importantly

Device Drivers → [Y]Network Device Support (CONFIG_WLAN80211)
Device Drivers → Network Device Support → Wireless LAN → [Y]Wireless LAN (IEEE 802.11) (CONFIG_WLAN80211)
Device Drivers → Network Device Support → Wireless LAN → Wireless LAN (IEEE 802.11) → [m]Atheros 802.11n wireless cards support (CONFIG_ATH9K)

Make sure you save any changes you make before you exit.

Compilation

Now it's time to compile your kernel. The generic way to do this is

$ make
$ su
# make modules_install
# cp arch/<your architecture>/boot/bzImage /boot/linux-2.6.26-wl

Where <your architecture> will be x86 if you're running a 32-bit system or x86_64 if you're running 64-bit.

Then you'll have to set your bootloader to load the new kernel. If you're using grub, you'll add this to /boot/grub/menu.list or /etc/grub.conf or whatever

title	        Wireless testing Linux kernel 2.6.26-wl
root		(hd#,#)
kernel		/boot/linux-2.6.26-wl root=/dev/<your root device> ro 

You're going to have to set (hd#,#) and root=/dev/<your root device> to reflect your boot device configuration. The best bet is probably to just copy and modify an existing entry.

NOTE!
If you compiled the drivers needed to access your root device (filesystem and hardware driver) as modules rather than building them directly into the kernel, you're going to have build an initrd, using something like mkinitramfs and add the resulting initrd to the above grub stanza as follows:

initrd /boot/initrd.img-2.6.26-wl

Now reboot into your new kernel.

Debian

Debian has a system to help you build kernels as Debian packages.

$ fakeroot make-kpkg --append-to-version=.mykernel linux_image
$ su
# dpkg -i /usr/src/linux-image-2.6.26.mykernel-wl_2.6.26.mykernel-wl-10.00.Custom_amd64.deb
or if you're running 32-bit i386

# dpkg -i /usr/src/linux-image-2.6.26.mykernel-wl_2.6.26.mykernel-wl-10.00.Custom_i386.deb

which should take care of all of the above for you.


Ok, now see if it worked

Once you have your kernel compiled and install, reboot and choose it from your grub or lilo menu. Hopefully it boots Ok, and you can open a command line and # modprobe ath9k
# iwconfig
The first command should hopefully generate no errors and the second is purely diagnostic and should show you a working wireless device. You can then proceed to use wpa_supplicant or network manager or iwconfig to setup your wireless networking.

Keeping up to date

If you want to keep up to date with the latest developments, you can always check the git tree of the wireless-testing kernel for code changes.

$ cd /usr/src/wireless-testing && git-pull

Of course you will have to repeat the necessary steps above to recompile and reinstall any changes.