硬件:TQ2440,USB RT3070
编译环境:ubuntu、TQ提供的EABI-4.3.3、网上下载的2010_0203_RT3070_SoftAP_v2.4.0.1_DPA包
配置好编译环境,解压2010_0203_RT3070_SoftAP_v2.4.0.1_DPA
移植过程:
1、修改配置相关文件
进入2010_0203_RT3070_SoftAP_v2.4.0.1_DPA
下面有3个文件夹MODULE、NETIF、UTIL
分别修改3个Makefile文件
将PLATFORM = SMDK打开,其他注释掉
然后配置平台,LINUX_SRC是内核的绝对路径
ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /opt/EmbedSky/linux-2.6.30.4
CROSS_COMPILE = arm-linux-
endif
另外需要修改的地方
NETIF/os/linux/usb_main_dev.c中添加MODULE_LICENSE("GPL");
MODULE/common/rtmp_init.c中的MODULE_LICENSE("RALINK");改为MODULE_LICENSE("GPL");
2、编译
用make或者make ARCH=arm KBUILD_NOPEDANTIC=1编译都行
但是make编译时没有生成rtnet3070ap.ko
进入NETIF文件夹直接make也可以生成ko文件
3、拷到开发板上的文件
上述三个文件夹的os/linux下的ko文件rtutil3070ap.ko、rt3070ap.ko、rtnet3070ap.ko
再加一个MODULE下的RT2870AP.dat文件
四个文件copy到u盘,插到开发板上
4、开发板配置
在开发板的/etc/Wireless下创建一个文件夹RT2870AP,将RT2870AP.dat放到此文件夹下
将另外三个ko文件放到/usr下,这个可以自己定义
5、加载
按顺序加载
#insmod rtutil3070ap.ko
#insmod rt3070ap.ko
#insmod rtnet3070ap.ko
如果不允许加载
用lsmod查看目前存在的模块
如果有rt5370就卸载再上述顺序加载,TQ开发板默认安装了这个ko文件,卸载命令rmmod rt5370sta.ko
6、可能遇到问题
如果上述一切正常
下面继续
问题一:
[root@EmbedSky /usr]# ifconfig ra0 up
<-- ERROR in Alloc TX TxContext[3] HTTX_BUFFER !!
<-- RTMPAllocTxRxRingMemory, Status=3
ERROR!!! RTMPAllocDMAMemory failed, Status[=0x00000003]
!!! rt28xx Initialized fail !!!
ifconfig: SIOCSIFFLAGS: Operation not permitted
解决:
修改MODULE NETIF UTIL三个目录下的include/os/rt_linux.h中BULKAGGRE_SIZE参数,将100改为60
问题二:
[root@EmbedSky /usr]# ifconfig ra0 up
<-- RTMPAllocTxRxRingMemory, Status=0
-->RTUSBVenderReset
<--RTUSBVenderReset
RtmpOSFileOpen(): Error 2 opening /etc/Wireless/RT2870AP/RT2870AP.dat
Open file "/etc/Wireless/RT2870AP/RT2870AP.dat" failed!
1. Phy Mode = 0
ERROR!!! RTMPReadParametersHook failed, Status[=0x00000001]
---> RTMPFreeTxRxRingMemory
<--- RTMPFreeTxRxRingMemory
!!! rt28xx Initialized fail !!!
ifconfig: SIOCSIFFLAGS: Operation not permitted
解决:
应该是没有创建RT2870AP文件夹,创建好再把RT2870AP.dat烤过去,因为我先移植过RT3070STA,所以以为这个RT2870××.dat是通用的
7、正常工作
下面是正常打印
[root@EmbedSky /]# ifconfig ra0 up
<-- RTMPAllocTxRxRingMemory, Status=0
-->RTUSBVenderReset
<--RTUSBVenderReset
Key1Str is Invalid key length(0) or Type(0)
Key2Str is Invalid key length(0) or Type(0)
Key3Str is Invalid key length(0) or Type(0)
Key4Str is Invalid key length(0) or Type(0)
1. Phy Mode = 9
2. Phy Mode = 9
NVM is Efuse and its size =2d[2d0-2fc]
3. Phy Mode = 9
MCS Set = ff 00 00 00 01
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
SYNC - BBP R4 to 20MHz.l
Main bssid = 7c:dd:90:56:6d:84
<==== rt28xx_init, Status=0
0x1300 = 00064320
配置IP命令:
ifconfig ra0 192.168.8.25
#iwconfig ra0
ra0 RTWIFI SoftAP ESSID:"RT2860AP" Nickname:""
Mode:Managed Channel=11 Access Point: 7C:DD:90:56:6D:84
Bit Rate=150 Mb/s
用android手里可以查到RT2870AP的wifi信号
8、关闭模块
结束后,可以通过以下命令卸载模块:
#ifconfig ra0 down
#rmmod rtnet3070ap.ko
#rmmod rt3070ap.ko
#rmmod rtutil3070ap.ko
修改后的源码包可以到下面地址下载,注意内核路径的设置
http://download.csdn.net/detail/stephen_yu/7179827