AR9271在linux 2.6.34 mips macarthur上的驱动
1、 relation work
首先需要下载AR9271相关的驱动和相应的fw。
驱动源码下载地址:http://www.orbit-lab.org/kernel/compat-wireless/2012/12/
Fw下载地址:http://linuxwireless.org/download/htc_fw/1.3/
驱动我选择的是compat-wireless-2012-12-01.tar.bz2,fw为htc_9271.fw和htc_7010.fw。
2、 install
a)将compat-wireless-2012-12-01.tar.bz2解压缩;
b)进入解压缩的目录compat-wireless-2012-12-01;
c)命令行下输入./scripts/driver-select ath9k_htc选择驱动类型
d)命令行下输入:
make ARCH=mips CROSS_COMPILE=mips-linux- KLIB=$(KERNEL_PATH) KLIB_BUILD=$(KERNEL_PATH)
KERNEL_PATH为你要安装驱动的内核根目录,这个可以根据你的需要自行设定;
需要注意的是需要开启内核的以下选项:
CONFIG_ATH_COMMON=m
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K_HTC=m
e) make没有错误(最好也没有警告,有些警告在加载模块时会找不到一些内核符号),则会生成相应的ko档。
如果不出意外会生成以下ko档(可能还会有一些其它的ko档,但至少应包括以下ko)
Compat.ko
ath9k_htc.ko
mac80211.ko
ath9k_common.ko
ath9k_hw.ko
cfg80211.ko
ath.ko
3、 load modules
a)模块的加载使用insmod和modprobe,这两个命令应该都会,不会的问度娘。
b)模块的加载顺序和依赖关系如下(lsmod命令):
i. ath9k_htc
ii. mac80211 ath9k_htc
iii. ath9k_common ath9k_htc
iv. ath9k_hw ath9k_htc,ath9k_common
v. ath ath9k_htc,ath9k_common,ath9k_hw
vi. cfg80211 ath9k_htc,mac80211,ath
vii. compat ath9k_htc,mac80211,ath9k_common,ath9k_hw,cfg80211
c) 将fw copy到/usr/local/ firmware目录下,有的系统为/lib/firmware目录,不然会出现如下的错误
ath9k_htc: Failed to get firmware htc_9271.fw
usb 1-2: ath9k_htc: USB layer deinitialized
4、 advance
更多情况下,我们需要我们的驱动支持hotplug,那这个怎么办呢?首先系统得支持hotplug,这个在大多数的操作系统中都不是问题,所以只需要将我们的模块的依赖写入相应的配置文档就ok了,这可以手动写入,也可以使用自动化的工具。
其实自动化的工具只要一条命令就搞定:
/bin/depmod -v $(KERNELRELEASE) -b $(OUTPUT_PATH)
OUTPUT_PATH为你ko档所在的目录。
当插入ar9271的网卡时,hotplug检测到设备,将会自动的加载模块。你将会看到以下信息:
usb 1-2: ath9k_htc: Firmware htc_9271.fw requested
usb 1-2: firmware: requesting htc_9271.fw
usbcore: registered new interface driver ath9k_htc
usb 1-2: ath9k_htc: Transferred FW: htc_9271.fw, size: 51272
ath9k_htc 1-2:1.0: ath9k_htc: HTC initialized with 33 credits
那恭喜你,说明你的驱动已经成功加载并开始work了。