RT3070移植祥解
工具:
1.EasyARM-iMX283 Linux开发板
2.M05-50模块(RT3070芯片)
软件
宿主机 VMware 10 + Linux ubuntu 3.2.0-29-generic-pae i686 i686 i386 GNU/Linux
开发板 Linux EasyARM-iMX283 2.6.35.3 armv5tejl GNU/Linux
GCC :gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2
指导文档:EasyARM-iMX283 Linux开发指南 V1.05.pdf
1.按照指导文档编译好HELLO可执行文件,复制到开发板中测试,确定GCC没有问题。
2.编译RT3070驱动
3、编译rt3070模块的驱动
https://blog.csdn.net/zhongli1994/article/details/77540454
在雷凌的官 下载linux版本的rt3070驱动2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2
,解压后的目录名称太长,所以可以对其做修改方便使用,然后进入到目录中
~#tar –jxvf 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2
mv2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO rt3070
~#cd rt3070
目录中的README_STA_usb文件介绍了编译和加载驱动的一些信息。需要对os/linux/目录下的conf.mk文件进行修改,
这里只贴出要修改的部分:
~#vim os/linux/config.mk
Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y
Support Native WpaSupplicant for NetworkMaganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
Makefile也要进行修改,芯片类型改为3070,默认的PLATFORM为PC,那么将后面的ifeq($(PLATFORM),PC)下的内核源
码路径指定为上述的交叉编译过的内核源码目录,交叉编译工具指定为/opt/arm-2009q1-203/bin/arm-none-linux-
gnueabi-gcc当然之前应该把交叉工具链安装好,这里不再详述。
~#vim Makefile
ifeq ($(CHIPSET),)
CHIPSET = 3070
endif
……
ifeq ($(PLATFORM),PC)
Linux 2.6
LINUX_SRC = /usr/src/kernels/linux-2.6.38(内核的路径)
Linux 2.4 Change to your local setting
#LINUX_SRC = /usr/src/linux-2.4
LINUX_SRC_MODULE = /lib/modules/$(shelluname-r)/kernel/drivers/net/wireless/(无线模块路径)
CROSS_COMPILE =/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-
endif
然后如果直接make,会 如下错误:
/home/cabbage/Desktop/rt3070/os/linux/…/…/chips/rtmp_chip.c:Infunction ‘RtmpChipOpsHook’:
/home/cabbage/Desktop/rt3070/os/linux/…/…/chips/rtmp_chip.c:470:error:implicit declaration of
function ‘RT33xx_Init’
make[2][/home/cabbage/Desktop/rt3070/os/linux/…/…/chips/rtmp_chip.o] Error 1
make[1][module/home/cabbage/Desktop/rt3070/os/linux] Error 2
make[1]: Leavingdirectory`/usr/src/kernels/linux-2.6.38’
make: ***[LINUX] Error 2
在 上查到似乎是因为改变了CHIPSET所导致的错误。修改chips/目录下的rtmp_chip.c文件,定位到470行,修改后
如下:
#ifdef RT30xx
#endif /* RT30xx */
然后再make,编译通过后会在os/linux/下生成rt3070sta.ko,这就是模块的驱动。 但是这里我出现了一个问题,查
看rt3070sta.ko这个文件的大小,居然达到了12m,这是不合理的,原因应该是包含了大量调试信息,用arm-linux-
strip可将它的大小裁剪为750k左右。
~#arm-linux-strip -S rt3070sta.ko
其中-S参数是必须的,否则在加载驱动的时候会 找不到版本信息的错误。
3.测试驱动
加载驱动模块
~#insmod /usr/rt3070sta.ko
rtusb init rt2870 —>
=== pAd = d1502000, size = 513400 ===
usbcore: registered new interfacedriverrt2870
然后可以通过ifconfig–a可以看到系统已经正确识别 卡,名称为ra0。
~#ifconfig –a
ra0 Linkencap:Ethernet HWaddr00:00:00:00:00:00
然后启动 卡,有如下信息输出,此时 卡已经可以正常工作了。
~#ifconfig ra0 up
(Efuse for 3062/3562/3572)Size=0x2d[2d0-2fc]
RTMP_TimerListAdd: add timer objd1549ba8!
RTMP_TimerListAdd: add timer objd1549bd8!
RTMP_TimerListAdd: add timer objd1549c08!
RTMP_TimerListAdd: add timer objd1549b78!
RTMP_TimerListAdd: add timer objd1549ae8!
RTMP_TimerListAdd: add timer objd1549b18!
RTMP_TimerListAdd: add timer objd151471c!
RTMP_TimerListAdd: add timer objd1503edc!
RTMP_TimerListAdd: add timer objd1503f14!
RTMP_TimerListAdd: add timer objd15147c0!
RTMP_TimerListAdd: add timer objd15146bc!
RTMP_TimerListAdd: add timer objd151478c!
–>RTUSBVenderReset
Key1Str is Invalid key length(0) orType(0)
Key2Str is Invalid key length(0) orType(0)
Key3Str is Invalid key length(0) orType(0)
Key4Str is Invalid key length(0) orType(0)
-
Phy Mode = 5
-
Phy Mode = 5
NVM is Efuse and its size=2d[2d0-2fc]
phy mode> Error! The chip doesnotsupport 5G band 5!
RTMPSetPhyMode: channel is out ofrange, usefirst channel=1
(Efuse for 3062/3562/3572)Size=0x2d[2d0-2fc]
- Phy Mode = 9
AntCfgInit: primary/secondary ant 0/1
MCS Set = ff 00 00 00 01
0x1300 = 00064300
至此 卡驱动移植成功。
4.编译和安装上层应用软件
4.1移植wireless_tools(AP扫描工具)
源码下载地址:http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz
~#tar zxvf wireless_tools.29.tar.gz
~#cd wireless_tools.29
~#vim Makefile
PREFIX = /usr/local/wirelesstool (生成文件的路径)
CC = /opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc
AR = /opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-ar
RANLIB = /opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-ranlib
~#make
~#make install
在/usr/local/wirelesstool/lib目录下找到libiw.so.29,下载到开发板的/lib/目录
下;/usr/local/wirelesstool/sbin目录下找到iwpriv、iwconfig、iwlist, iwevent, iwspy等命令,下载到开发板
的/usr/sbin目录下。这时就应该可以使用这些命令通过 卡搜索到环境中的无线 络。
~#ifconfig ra0 up
~#iwlist ra0 scan
Cell 06 – Address: 38:83:45:E5:CB:3E
至此wireliss_tools移植成功。
4.2
因为现在的无线wifi 络大多是wpa加密。所以需要移植wpa_supplicant工具。
一、下载源码
http://hostap.epitest.fi/wpa_supplicant/
http://w1.fi/releases/
下载wpa_supplicant-0.7.3.tar.gz (openssl用到0.7.3提供的补丁)
#tar xvfz wpa_supplicant-0.7.3.tar.gz
下载www.openssl.org/source/openssl-0.9.8e.tar.gz
#tar zxvf openssl-0.9.8e.tar.gz
二、编译openssl库
ftp://ftp.openssl.org/source/old/0.9.x/
将wpa_supplicant中的补丁拷贝到openssl中
# cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
#cd openssl-0.9.8e
#mkdir /usr/local/ssl
#vim Makefile
CC= arm-linux-gnu-gcc
AR= arm-linux-gnu-ar $(ARFLAGS) r
RANLIB= arm-linux-gnu-ranlib
INSTALLTOP=/usr/local/ssl
OPENSSLDIR=/usr/local/ssl
#make
#make install
在/usr/local/ssl目录下安装了ssl库
~#ils /usr/local/ssl
~#ibin certs include lib man misc openssl.cnf private
后面编译wpa_supplicant要依赖openssl中的lib和include
三、编译wpa_supplicant
进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:
#cp defconfig .config
#vim .config
CC= arm-linux-gnu-gcc -L/usr/local/ssl/lib/
CFLAGS += -I/usr/local/ssl/include/
LIBS += -L/usr/local/ssl/lib/
#make
wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli
来搜索、设置、和连接 络。
5.总体测试
(1)首先拷贝wpa_supplicant和wpa-psk-tkip.conf到开发板根文件系统中,并改名wpa-psk-tkip.conf为
wpa_supplicant.conf
~#ivi /etc/ wpa_supplicant.conf
#输入下面的内容
WPA-PSK/TKIP
ctrl_interface=/var/run/wpa_supplicant
network={
}
~#wq!
2
输入以下命令
~#ifconfig eth0 down
~#ifconfig ra0 up
~#ifconfig ra0 192.168.1.248netmask255.255.255.0
~#route add default gw 192.168.1.1
~#wpa_supplicant -B -ira0-c/etc/wpa_supplicant.conf –Dwext
3.测试 络连接
~#pin 192.168.1.1
~#ping 115.239.211.112
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux25351 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!