11AC ath10k的移植

来源:互联网 发布:unity3d 跳跃代码 编辑:程序博客网 时间:2024/05/29 03:50

最近公司要使用11ac的网卡,由我负责移植ath10k的驱动,这边做个笔记


网卡使用的是WLE900VX,芯片是QCA9880,是一颗3*3 11AC的网卡。主控是arm的海思芯片,SDK中的内核版本是3.0.y。由于之前也是用Atheros的2.4G芯片,使用内核自带的ath9k驱动。不过这个版本的内核肯定是不支持11AC的,于是直接去backports http://drvbp1.linux-foundation.org/~mcgrof/rel-html/backports/ 移植这个兼容驱动。(backports这是好东西,不过Linux世界好东西太多了,O(∩_∩)O~)在backports里边发现,3.19以下的版本中都没有11AC支持,只有3.19这个版本有。于是就编译这个版本的驱动。

由于之前搞ath9k,所以按照老路子,加载驱动,ifconfig查看设备。但是加载了驱动之后,ifconfig没有设备。但是有如下打印

ath10k_pci 0000:01:00.0: could not fetch firmware file 'ath10k/QCA988X/hw2.0/firmware-3.bin': -2
ath10k_pci 0000:01:00.0: could not fetch firmware file 'ath10k/QCA988X/hw2.0/firmware-2.bin': -2
ath10k_pci 0000:01:00.0: could not fetch board data (-2)
ath10k_pci 0000:01:00.0: could not fetch firmware files (-2)
ath10k_pci 0000:01:00.0: could not probe fw (-2)

原来它除了要加载驱动,还需要加载个固件。(⊙﹏⊙)b。去这个地方下载https://github.com/kvalo/ath10k-firmware,根据打印看应该是找firmware-3.bin,然后又去找firmware-2.bin。于是我就下载了firmware-3.bin。但是不知道怎么加载这个固件。于是网上找啊找,忘记在哪里找到了,Linux加载固件的脚本

当设备驱动加载之后,会在/sys/class/firmware/下面生成设备的目录

#ls -l /sys/class/firmware/
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 0000:01:00.0 -> ../../devices/pci0000:00/0000:00:00.0/0000:01:00.0/firmware/0000:01:00.0
-rw-r--r--    1 root     root          4096 Jan  1 00:00 timeout

这个目录中有几个文件比较重要,加载固件时先echo 1 >/sys/class/firmware/0000\:01\:00.0/loading

然后把下载的固件cat /lib/firmware/ath10k/QCA988X/hw2.0/firmware-3.bin >/sys/class/firmware/0000\:01\:00.0/data

完了再echo 0 >/sys/class/firmware/0000\:01\:00.0/loading

# ls -l /sys/class/firmware/0000\:01\:00.0/
-rw-r--r--    1 root     root             0 Jan  1 00:00 data
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 device -> ../../../0000:01:00.0
-rw-r--r--    1 root     root          4096 Jan  1 00:00 loading
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 subsystem -> ../../../../../../class/firmware
-rw-r--r--    1 root     root          4096 Jan  1 00:00 uevent

此时,还不可以。换了几个固件都不行

后来试着突然可以了,hostapd起来之后也是11ac,我的努比亚连上去之后433Mbps妥妥的。然后看了加载顺序,顺序是这样的

先加载两次固件,也就是执行两次下面的命令

echo 1 >/sys/class/firmware/0000\:01\:00.0/loading
cat /lib/firmware/ath10k/QCA988X/hw2.0/firmware-3.bin >/sys/class/firmware/0000\:01\:00.0/data
echo 0 >/sys/class/firmware/0000\:01\:00.0/loading

然后几秒后会有如下打印

ath10k_pci 0000:01:00.0: could not fetch board data 'ath10k/QCA988X/hw2.0/board.bin' (-2)

然后在加载两次固件,设备起来了,试了多次之后都是ok,然后写了个脚本先这样用。

至于为啥这么坑爹,继续找,可能是我哪里没搞好,知道的大神请不吝赐教。

0 0
原创粉丝点击