最近因为需要,要在Zedboard上移植一个无线网卡驱动,因为以前在友善之臂上面移植过,所以以为很简单,没想到这件事情却花了我将近一周才搞好,中间就因为内核的一个小的疏忽,特在此将中间遇到的问题写下来,留作以后谨记。
开发板:Zynq Zedboard
操作系统:Ubuntu 12,04
交叉编译器:arm-Xilinx-linux-gnueabi gcc
WIFI 模组:TP-LINK TL-WN725N 2.0
移植步骤与友善之臂类似,难点主要是在编译内核那块,我在编译内核的时候的出现了各种各样的错误:error: unknown field 'private' specified in initializer; drivers/usb/host/ehci-hcd.c:1436:2:#error "missing bus glue for ehci-hcd"
我刚开始是按照这些错误来改,结果发现怎么编译都无法通过,最后才发现是我在配置内核的时候有问题,配置内核我们一般使用的是make menuconfig,但是这个命令默认的是i386的,也就是配的是X86上面的,自然当我们用交叉编译器编译的时候会出现各种问题,正确的做法应该是指定编译ARM内核。即make ARCH=arm menuconfig。在进入配置页面的时候可以看看是不是留意是不是进入的ARM的,如下所示,
可以看到这个配置就是arm的,保存退出。
然后用交叉编译器编译网卡驱动,注意,一定要用同一个交叉编译器编译,编译过程中可能会出现error:'struct net_device' has no member named 'wireless_handlers'。出现这个错误的原因是因为WIRELESS_EXT没有选上,而要选上这个选项,我们需要勾选Device Drivers -> Network device support -> Wireless LAN里面的IEEEE802.11 for Host Ap(Prism2/2.5/3 and WEP/TKIP/CCMP) 。重新编译,然后其他其他步骤类似友善之臂,当可以看到wlan0的时候,恭喜,已经成功了!