准备在xc2440板上使用无线网卡,代替以太网做无线视频传输。
本文只是粗略的记录了调试过程,等后面再写详细的总结。
开发环境:
硬件平台:xc2440开发板
主机环境:ubuntu10.10
linux内核:linux-3.4.4
wifi型号:tl-wn322g
wifi方案:rt5370
我是想尽量选择内核中带有驱动的wifi芯片,省得移植的麻烦。我用的linux-3.4.4版本的内核应该支持了几乎所有的主流wifi芯片的驱动了。由于以前接触过zd1211b的芯片驱动,所以想直接找个这样方案的。
了解到tp-link的tl-wn322g+型号是用的这个芯片,就买来了一个。把zd1211b驱动加到linux3.4内核中(需要先支持cfg80211和mac80211),插上网卡,可以识别到usb设备,查看usb device id -- f201 5370。看到这个数字,有种莫名的奇怪,不像是zd1211b的设备id,但貌似在哪里见过这个数字,先不管了。
用ifconfig看是否有无线网卡的设备节点 ---没有。使用ifconfig wlan0 up ---提示没有wlan0这个设备。看来驱动没有生效,就开始怀疑内部用的芯片不是zd1211b,于是果断的拆开了外壳,看到芯片那一刻,不由得骂了一句“我擦”,原来是雷凌的rt5370,这是现在比较流行的wifi方案,怪不得id是5370。
有点被骗了的感觉,看到外壳上写着v3.0,才明白是v3.0版的已经换方案了,之前版本用的是zd1211b。这难不倒我,不管什么方案,都能在内核中把驱动加上。从网上得到到的信息都是从雷凌的凯发k8官网下载客户端中心官网上下载驱动包,自己编译移植,但由于我用的内核版本太高了,差别太大,应该是无法顺利编译。
所以就不想这么麻烦,本人较懒,习惯直接在内核中找驱动,内核中集成那么多完善的驱动,为什么不用?
在linux-3.4.4内核中找到了raylink的驱动,分析了rt2800usb的驱动代码,确定这个可以通用,适用于rt3070、rt5370等流行的方案。需要说明的是只有在linux3.0以后的内核中才支持rt5370,3.0以前的内核不支持。
同样先让内核支持cfg80211和mac80211,加入rt2800usb的驱动,直接编译进内核。要记得在驱动中加入凯发app官方网站用的网卡的usb id,使用usb_device(0xf201, 0x5370); 或者也可以在系统运行时,用echo f201 5370 > /sys/bus/usb/drivers/rt2800usb/new_id
使用ifconfig还是查不到无线设备,使用ifconfig wlan0 up ---有反映了,但提示需要firmware,忘加这个了,就把驱动包中的rt2870.bin放到固件目录(lib/firmware)。再执行ifconfig wlan0 up ---打印出了加载驱动的信息
- phy0 -> rt2x00lib_request_firmware: info - loading firmware file 'rt2870.bin'.
- phy0 -> rt2x00lib_request_firmware: info - firmware detected - version: 0.29.
- phy0 -> rt2x00mac_conf_tx: info - configured tx queue 0 - cwmin: 3, cwmax: 4, aifs: 2, txop: 102.
- phy0 -> rt2x00mac_conf_tx: info - configured tx queue 1 - cwmin: 4, cwmax: 5, aifs: 2, txop: 188.
- phy0 -> rt2x00mac_conf_tx: info - configured tx queue 2 - cwmin: 5, cwmax: 10, aifs: 3, txop: 0.
- phy0 -> rt2x00mac_conf_tx: info - configured tx queue 3 - cwmin: 5, cwmax: 10, aifs: 7, txop: 0.
再查看ifconfig就可以看到wlan0了
把移植好的wireless tools相关库和程序放到文件系统下
先使用iwlist wlan0 scanning搜索ap,因为wireless tools只能支持wep加密方式,不支持wap,把路由器也设置成wep的,搞一个密码。
接着用iwconfig连接到ap,三条命令搞定:
iwconfig wlan0 key xxxxx
iwconfig wlan0 essid "xxxxxx"
iwconfig wlan0 ap auto
现在会打一些连接的log,使用iwconfig查看到已经连到ap了
- [root@xc2440 /]# iwconfig wlan0
- wlan0 ieee 802.11bgn essid:"8812"
- mode:managed frequency:2.437 ghz access point: ec:88:8f:3d:36:0e
- bit rate=1 mb/s tx-power=0 dbm
- retry long limit:7 rts thr:off fragment thr:off
- encryption key:1234-5678-90
- power management:on
- link quality=70/70 signal level=-37 dbm
- rx invalid nwid:0 rx invalid crypt:0 rx invalid frag:0
- tx excessive retries:0 invalid misc:0 missed beacon:0
查看路由器上的主机列表,可以看到已经连到ap的无线网卡
设置好ip地址,ifconfig wlan0 xxxxxxxxx
ping同网段主机的ip试试 --- ping不通!ping不通!nnd!
考虑到板上还有以太网卡,为了确定现在使用的是无线网卡,就把以太网给干掉,再ping一次 ---通了,搞定,激动!
由于对无线网卡的驱动比较好奇,就跟踪了一下驱动代码:
网卡注册流程主要涉及到rt2800usb.c rt2800lib.c rt2x00usb.c等文件
再看看发送数据包的流程吧,主要代码是net/mac80211/tx.c rt2x00mac.c rt2x00queue.c,接收的代码也类似。
在主要函数里加了些log,在ping的时候可以看到:
- [root@xc2440 /]# ping 192.168.1.101
- ping 192.168.1.101 (192.168.1.101): 56 data bytes
- enter ieee80211_xmit
- enter ieee80211_tx
- exit ieee80211_tx with result: 0
- exit ieee80211_xmit no error
- enter rt2x00mac_tx
- enter rt2x00queue_write_tx_frame
- exit rt2x00queue_write_tx_frame no error
- enter ieee80211_xmit
- enter ieee80211_tx
- enter rt2x00mac_tx
- enter rt2x00queue_write_tx_frame
- exit rt2x00queue_write_tx_frame no error
- exit ieee80211_tx with result: 1
- exit ieee80211_xmit no error
- 64 bytes from 192.168.1.101: seq=0 ttl=64 time=71.878 ms
这样我对发送和接收流程也有了大体的了解,以后查错也方便了
再用视频监控的程序试试,也可以通过无线在pc机上看到视频流,这样无线视频监控就成功了。
为了使用能连到wap加密的ap上,接着再移植wpa_supplicant。。。。。。
把路由器的安全设置改回wap-psk,加密方式改为tkip,在wpa_supplicant添上ap的essid和key
在板上执行wpa_supplicant -dwext -iwlan0 -c/etc/wpa_supplicant.conf&
打印出的log:
- [root@xc2440 /]# trying to associate with ec:88:8f:3d:36:0e (ssid='8812' freq=2437 mhz)
- phy0 -> rt2x00mac_conf_tx: info - configured tx queue 2 - cwmin: 4, cwmax: 10, aifs: 3, txop: 0.
- phy0 -> rt2x00mac_conf_tx: info - configured tx queue 3 - cwmin: 4, cwmax: 10, aifs: 7, txop: 0.
- phy0 -> rt2x00mac_conf_tx: info - configured tx queue 1 - cwmin: 3, cwmax: 4, aifs: 2, txop: 94.
- phy0 -> rt2x00mac_conf_tx: info - configured tx queue 0 - cwmin: 2, cwmax: 3, aifs: 2, txop: 47.
- associated with ec:88:8f:3d:36:0e
- wpa: key negotiation completed with ec:88:8f:3d:36:0e [ptk=tkip gtk=tkip]
- ctrl-event-connected - connection to ec:88:8f:3d:36:0e completed (auth) [id=0 id_str=]
- wpa: group rekeying completed with ec:88:8f:3d:36:0e [gtk=tkip]
再测试网络,也是正常的
接下来还要移植dhcp,让网卡自动获取ip
再把iperf移植上去,用于测网速
要完善的东西还有好多。。。。
马上把移植详细过程做个总结,并且专为xc2440写个专题教程
阅读(9166) | 评论(0) | 转发(5) |