写在前面
由于项目的需要,实现了在Arm平台间实现wifi的点对点,点对多点的传输。
实现时的具体环境:完wifi 模块芯片:雷凌3070芯片;嵌入式平台:E9(ARM);交叉编译环境:arm-none-linux-gnueabi。
下面讲介绍wifi模块移植到Arm的具体步骤。
编译移植
一、首先下载了wifi模块的驱动
搜索2011_0719_RT3070_RT3370_RT5370_RT5372_RT2070_Linux_STA_V2.5.0.3_DPO,进行下载。
二、对驱动进行交叉编译
1 打开驱动文件解压后的文件,如果需要WPA等功能,可打开./os/linux/config.mk进行编,如果不需要直接进入2步;
2 打开驱动文件根目录下的Makefile进行修改,首先CHIPSET 改为3070,然后对交叉编译环境进行配置,默认的PLATFORM = PC,我们对PC那块代码进行改动,改动后如下
ifeq ($(PLATFORM),PC)
# Linux 2.6
LINUX_SRC = /opt/E9_CD/Linux/linux_E9_3.0.35_for_Linux
# Linux 2.4 Change to your local setting
#LINUX_SRC = /usr/src/linux-2.4
LINUX_SRC_MODULE = /opt/E9_CD/Linux/linux_E9_3.0.35_for_Linux/drivers/net/wireless/
CROSS_COMPILE = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-none-linux-gnueabi-
endif
保存后进行sudo make。
其中 linux_E9_3.0.35为linux内核的源码所在目录。
三、拷贝到Arm开发板
编译成功后将根目录下的RT2870STA.dat和./os/linux/目录下的rt30870.sta.ko拷贝进板子中。
mkdir –p /etc/Wireless/RT2870STA/
cp RT2870STA.dat / etc/Wireless/RT2870STA/
cp rt3070sta.ko /usr
四、加载并启动
首先进行加载
insmod /usr/rt3070sta.ko
然后可以通过ifconfig -a 可以看到系统已经正确识别网卡,名称为ra0。
启动网卡
ifconfig ra0 up
看到有数据输出,成功移植。
常见问题
一、rtmp_chip.c:470:error: implicit declaration of function 'RT33xx_Init'
解决方法:注释掉chips目录下rtmp_chip.c中第470行的RT33xx_Init(pAd)。
二、insmod的时候出问题
解决方法:一般这里的问题都是板子内核版本与交叉编译时所用的内核版本不一致导致,可以uname -a查看板子内核版本,modinfo rt3070sta.ko查看生成的驱动版本号,看是否一致。我遇到这个问题解决了一上午,发现版本号一个armv5,一个armv7,最后是先对linux源码进行了编译(设置交叉编译环境后,运行所带的build.sh),再编译wifi模块解决的。编译内核的时候,注意设置交叉编译环境。
参考文献
[1] http://blog.chinaunix.net/uid-28599023-id-3483821.html
[2] http://www.linuxidc.com/Linux/2011-03/33483.htm
[3] http://blog.csdn.net/zhuqing_739/article/details/6259686#