从一开始了解这件事情,到网卡选型,驱动下载,一直到现在Atheros的网卡在IXP435上边正常工作,已经挺长时间了。过程磨难多多,但终于拨开云雾见彩虹。现在把过程详细写一下吧,作为工作的总结,也作为想做这方面工作朋友的参考。刚接触到这件事情的时候导师提出了三条要求:1、网卡选用芯片为Atheros系列;2、支持802.11a/b/g;3、选用madwifi的驱动。根据这三点要求我从http://madwifi.org/下载了官方发布的最新驱动程序源码-madwifi-0.9.4.tar.gz。并根据前两条要求选择了Atheros 5212这款网卡。(但这款网卡为Atheros早期作品,市面基本为二手网卡或者库存产品,如果现在选的话,我会选择5416)。
接下来的事情就是要交叉编译了,包括Linux kernel(2.6.16),madwifi-0.9.4。首先,按照IXP435软件手册上的说明cp SDK到PC机上的/home/MonteGole/目录下,将各个压缩包解压缩,命令如下:
# cd /
# tar xPvfz /home/MonteGold/timesys_toolchain.tar.gz
# cd /home/MonteGold
# tar xzvf /home/MonteGold/timesys-ixp435.tar.gz
# unzip BSD_ixp400AccessLibrary-2_4.zip
# unzip IPL_ixp400NpeLibrary-2_4.zip
# unzip GPL_ixp400LinuxEthernetDriverPatch-1_7.zip
# vim ixp400_xscale_sw/buildUtils/environment.linux.sh (修改这个.sh文件以设置一系列环境变量,具体修改如下)
linuxbe_KERNEL_DIR=/home/MonteGold/timesys-ixp435
LINUX_SRC=/home/MonteGold/linux
CROSSCOMPILER_DIR=/opt/timesys/toolchains/armv5b-Linux/bin
IX_XSCALE_SW=/home/MonteGold/ixp400_xscale_sw
IX_DEVICE=ixp43X
IX_PLATFORM=kixrp43x
# . ixp400_xscale_sw/buildUtils/environment.Linux.sh (. 和ixp之间有一个“空格”)
然后打上一些补丁
# cd timesys-ixp435
# patch -p1 < ../ixp400LinuxEthernetDriver-1_7.patch
# mv ../ixp400_eth.c drivers/net
# patch -p1 < ../ monte_gold-pci.patch
# make ARCH=arm menuconfig (定制内核,可以参考网上资料,例如http://www.host01.com/article/se ... 621409102845293.htm,关键是要使内核支持无线)
# make ARCH=arm V=1 CROSS_COMPILE=armv5b-Linux- zImage
# make ARCH=arm V=1 CROSS_COMPILE=armv5b-Linux- modules
# cd ../ixp400_xscale_sw
# make all (用于生成ixp400.ko)
至此内核编译完成,主要用到的是在Image文件,放到tftp文件夹备用。
# cp zImage /var/lib/tftpboot
然后将下载的madwifi-0.9.4.tar.gz解压缩,编译:
# tar –vxzf madwifi-0.9.4.tar.gz
# cd madwifi-0.9.4
# make KERNELPATH=/home/MonteGold/timesys-ixp435 CROSS_COMPILE=armv5b-linux- TARGET=xscale-be-elf
如没有错误,会在ath ath_hal ath_rate/sample ath_rate/amrr ath_rate/onne net80211文件夹下生成相应的.ko文件:
ath_pci.ko Atheros driver for PCI/Cardbus devices
ath_hal.ko Atheros HAL
wlan.ko 802.11 support layer
wlan_wep.ko WEP cipher support
wlan_tkip.ko TKIP cipher support
wlan_ccmp.ko AES-CCMP cipher support
wlan_xauth.ko external authenticator
wlan_acl.ko MAC ACL support for AP operation
wlan_scan_ap.ko AP scanning support
wlan_scan_sta.ko station scanning support
ath_rate_onoe.ko ONOE rate control
ath_rate_amrr.ko AMRR rate control
ath_rate_sample.ko SAMPLE rate control
拷贝到一个文件夹待用。
# cd /home/MonteGole
# mkdir file_ko
# cd /home/MonteGold/madwifi-0.9.4/ath
# cp *.ko /home/monteGold/file_ko
# cd ../ath_hal
# cp *.ko /home/monteGold/file_ko
# cd ../ath_rate/sample
# cp *.ko /home/monteGold/file_ko
# cd ../amrr
# cp *.ko /home/monteGold/file_ko
# cd ../onne
# cp *.ko /home/monteGold/file_ko
Cd ../../net80211
# cp *.ko /home/monteGold/file_ko
接下来就是修改IXP435自带的ramdisk了。(什么是ramdisk,如何创建和修改见http://www.99net.net/study/system/linux/1084931637.html )
# cd /heme/MonteGold
# gunzip ramdisk_32M.gz
# mkdir ramdisk
# mount –o loop ramdisk_32M ramdisk
# cd ramdisk/lib/modules/2.6.16/kernel/net
# cp /home/MonteGold/file_ko.ko .
# cd /home/MonteGold
# umount ramdisk
#gzip ramdisk_32M
# cp ramdisk_32M.gz /var/lib/tftpboot
未完待续