最近在做wifi数据采集的东西,需要做rt3070的驱动移植,目标板是AM3517的ARM板(cortex-A8的核心)。
中间遇到很多问题。需要准备的东西。rt3070的驱动,linux内核源码,还有固件。
arm-none-linux-gnueabi-后空格,识别错误,command no found
驱动直接在官网下的最新的,是tar.bzip2格式的。以前碰到的都是tar格式的,直接最常用的tar -zxvf ***.tar就可以解压。这个格式的解压搜了好一会也没解压了。直接用常用的tar -zxvf 解压不了。网上有说是先用bzip2 -d 解压,再用tar解压。但是第一步就不对,说是非bzip格式。最后直接用的旧版本的。后来偶然发现有人建议用 tar -xvf 解压。OK解决了。查了一下书,发现z代表的是使用gzip来压缩/解压缩文件。
Building modules, stage 2.
MODPOST 1 modules
/bin/sh: scripts/mod/modpost: not found
make[2]: *** [__modpost] Error 127
make[1]: *** [modules] Error 2
make scripts 否则提示:MODPOST 1 modules/bin/sh: scripts/mod/modpost: not found
出现这个错误你只需要在内核目录下 make scripts 一下在编译驱动就行了。
今天终于编译的差不多了,现在就是加载是固件有问题。先总结一下前面遇到的问题吧,前面遇到的很多编译错误,比如缺少文件,没有定义的变量,没有相关的头文件等等,基本都是内核配置不对产生的问题。
配置无线usb网卡时,你先要配置网络参数,之后需要配置设备驱动中的无线设备,即使他里面没有包含你需要的驱动你至少也要加载一个上去,不然他不会编译需要的文件,你在编译驱动是当然也报错。最后你还需要配置你用的接口,现在用的是usb的,如果你用的pci的,你还需要配置pci的编译选项。
下面是今天遇到的问题,之前配置已经通过了,但是这次却不行。重新配置了几次还是不行,后来看论坛有人说这是没有用make clean的问题。因为之前编译通过的文件不会再编译了,所以可能里面当时是错误的,虽然后面改过编译选项了,但是这些文件仍然保留,所以还是会报错。
所以你在改过编译选项后,记住最好是make clean 一下。
错误信息:
error: unknown field ‘private’ specified in initializer /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2225:2: warning: initialization from incompatible pointer type /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2226:2: error: unknown field ‘num_private’ specified in initializer /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2226:2: warning: excess elements in struct initializer /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2226:2: warning: (near initialization for ‘rt28xx_iw_handler_def’) /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2227:2: error: unknown field ‘private_args’ specified in initializer /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2227:26: warning: excess elements in struct initializer /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2227:26: warning: (near initialization for ‘rt28xx_iw_handler_def’) /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2228:2: error: unknown field ‘num_private_args’ specified in initializer /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2228:2: warning: excess elements in struct initializer /usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.c:2228:2: warning: (near initialization for ‘rt28xx_iw_handler_def’) make[2]: *** [/usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux/../../os/linux/sta_ioctl.o] Error 1 make[1]: *** [_module_/usr/src/2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO/os/linux] Error 2 make[1]: Leaving directory `/usr/src/linux-3.0.6-gentoo' make: *** [LINUX] Error 2
另外,在编译驱动前,先要把内核编译好,不然驱动会没有版本信息。有以下错误 "no symbol version for module_layout"
固件加载不了的问题。
错误信息:
rt2870usb 1-1:1.0: firmware: requesting rt2870.bin
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
或者