构建ARM-PC无线局域网
Tp-link wn321G无线网卡(Rt73)驱动+wireless_tools
for Kernel 2.6
由于需要使用无线处理近距离数据传输,故有了此文的出现。用arm平台进行视频采集编码,然后用无线局域网传输到PC端再进行各种处理。由于linux下面的无线网卡,如果官方没有提供linux下面的驱动,我们常常会使用madwifi这一开源公司的驱动进行移植,或者用Ndiswrapper进行虚拟加载windows下面的驱动,前者适用的芯片范围有限,如果对其驱动进行更改移植,必然造成比较大的工作量。而后者往往存在不少的问题。而这里使用的一款无线网卡使用的是Ralink的RT2571WF,可以查看硬件信息或者撬开外壳得到确认。所以我们在这里可以直接使用Ralink提供的linux下面的驱动进行移植,大大减少了工作量。这里我就参考张驿风的文章进行移植试验(其blog地址:http://blog.21ic.com/user1/765/archives/2007/41046.html)。张驿风提到的一些问题,我移植过程中并没有出现,所以这里并没有做介绍,如果有遇到了什么问题可以访问上面的地址进行查阅。
一. 主要硬件环境:
ARM:mini2440
TP-link无线路由器
Tp-link wn321g无线网卡
二. 主要软件环境:
Kernel:2.6.13
RT73芯片驱动程序
Wireless_tools工具集。
三. 下载必备文件:
1. kernel:这里我使用mini2440提供的2.613版的内核进行试验。
2. rt73芯片驱动:RT2501USB(RT73:RT2571W/RT2573/RT2671)
(地址:http://www.ralinktech.com.tw/data/drivers/2009_0206_RT73_Linux_STA_Drv1.1.0.2.tar.bz2)
3. Wireless_tools:
地址:
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz
四. 阅读README,了解安装方法
解压进入到~/2009_0206_RT73_Linux_STA_Drv1.1.0.2/Module目录下,
Vi README
======================================================================= Build Instructions: ==================== 1> $tar -xvzf RT73_Linux_STA_Drv_x.x.x.x.tar.gz go to "./RT73_Linux_STA_Drv_x.x.x.x/Module" directory.
2> $cp Makefile.4 ./Makefile # [kernel 2.4] or $cp Makefile.6 ./Makefile # [kernel 2.6]
3> [kernel 2.4] $chmod 755 Configure $make config # config build linux os version
4> $make all # compile driver source code 4.1> $make install
5> $cp rt73.bin /etc/Wireless/RT73STA/ # copy firmware
6> $dos2unix rt73sta.dat $cp rt73sta.dat /etc/Wireless/RT73STA/rt73sta.dat # !!!check if it is a binary file before loading !!!
7> $load #[kernel 2.4] # $/sbin/insmod rt73.o # $/sbin/ifconfig rausb0 inet YOUR_IP up
#[kernel 2.6] # $/sbin/insmod rt73.ko # $/sbin/ifconfig rausb0 inet YOUR_IP up
=======================================================================
|
五. 交叉编译RT73驱动程序
1.# rm -f Makefile //删除原来的Makefile文件
2.根据Makefile.6文件进行精简修改:
(1)去掉一些对于我们移植没有用的编译选项,只留下编译命令.
(2)内核源代码树的目录也是需要修改.
(3)还有一点很重要,在前段时间做项目时候发现的,在arm平台下C语言char类
型默认为unsigned char类型,所以一点要给CFLAGS加上一个-fsigned-char选项
不然编译出现了很多warnin。
(4) 编译生成了rt73.ko模块.
具体Makefile文件如下:
gedit Makefile &
###################################################################### # Module Name: Makefile # Abstract: Makefile for rt73(tp-link wn321G) linux driver on kernel series 2.6 ######################################################################
WFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs CFLAGS += $(WFLAGS) -fsigned-char
obj-m := rt73.o
rt73-objs := rtmp_main.o mlme.o connect.o rtusb_bulk.o rtusb_io.o sync.o assoc.o auth.o auth_rsp.o rtusb_data.o rtmp_init.o sanity.o rtmp_wep.o rtmp_info.o rtmp_tkip.o wpa.o md5.o
KDIR := ../../kernel-2.6.13 all: make -C $(KDIR) SUBDIRS=$(shell pwd) modules clean: rm -rf *.o *~ .*.cmd *.ko *.mod.c .tmp_versions built-in.o
|
六. 交叉编译wireless-tools
这个工具的安装较之驱动就更为简单了,修改一下交叉编译器,添加一个
CROSS =/usr/local/arm/3.4.1/bin/arm-linux-
然后把CC,AR,RANLIB前面都加上$(CROSS)
为了arm能够很方便的从pc下取得这些文件,把Makefile中的PREFIX修改为 /root/iwconfig,如果没有这个目录,会自创建的,这样就把编译结果安装到这个目录下
# make
# make install
现在就会在/root/iwconfig 目录下面生成我们需要的工具和其运行所必需的库文件。
七. 将我们编译的成果,下载到arm板上,开始测试
我一向使用简易的ftp进行下载,无论你使用ftp,tftp,nfs等等各种方式,你要把我们生成的驱动文件:rt73.ko, 上面的工具文件/root/iwconfig/sbin/*,/root/iwconfig/lib/*下载到arm开发板上。
八. 这里差点忘记了,我们的驱动要能够工作,必须要有一个前提,那就是我们的内核支持无线模块。所以我们要在内核配置的时候加上无线的支持:
Device Drivers --->
|
可以在给你提供的内核源文件里使用配置命令查看一下make menuconfig,是不是加入了wireless的支持。如果没有话,请加入无线支持,重新编译内核,配置添加的选项也不一定只有上面的一项,根据自己的内核版本进行添加。
九.测试
1.加载驱动: insmod rt73.ko
2.用./iwlit scanning查看附近无线网络
3.# iwconfig rausb0 essid linuxer #无线ESSID名称
# iwconfig rausb0 enc ********** #无线密钥
# iwconfig rausb0 mode managed #无线模式
# dhclient rausb0 #让rausb0获取IP
如果没有dhclient就可以手动添加网络信息:
/****************************
# insmod rt73.ko
# ifconfig rausb0 inet 192.168.1.77 up
# route add default gw 192.168.1.1
# iwconfig rausb0 essid "linuxer"
# iwconfig rausb0 mode mananed
# iwconfig rausb0 channel 6
****************************/
# ifconfig #就可以查看rausb0的网络信息了。
然后ping一下网关,通了,OK!至此,PC-ARM的局域网无线网络已搭建成功!
十.值得说明的:
1.USB的无线网卡,除了rt73的驱动外,必然需要usb的驱动了,所以对于你的kernel,如果边usb的通用驱动都没有,必须不能使用。
2.iwconfig的配置请参考手册,这里不再累述。