Chinaunix首页 | 论坛 | 博客
  • 博客访问: 891131
  • 博文数量: 70
  • 博客积分: 1741
  • 博客等级: 上尉
  • 技术积分: 2476
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-05 14:46
个人简介

全志全系列芯片产品方案开发 A20/A33/A64/A40/A60/A83/A63/H3/H5/H6/H8

文章存档

2018年(1)

2012年(20)

2011年(49)

分类: LINUX

2012-11-29 23:45:32

准备在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。这难不倒我,不管什么方案,都能在内核中把驱动加上。从网上得到到的信息都是从雷凌的官网上下载驱动包,自己编译移植,但由于我用的内核版本太高了,差别太大,应该是无法顺利编译。
    所以就不想这么麻烦,本人较懒,习惯直接在内核中找驱动,内核中集成那么多完善的驱动,为什么不用?
    在linux-3.4.4内核中找到了RayLink的驱动,分析了RT2800usb的驱动代码,确定这个可以通用,适用于rt3070、rt5370等流行的方案。需要说明的是只有在linux3.0以后的内核中才支持rt5370,3.0以前的内核不支持。
    同样先让内核支持cfg80211和mac80211,加入rt2800usb的驱动,直接编译进内核。要记得在驱动中加入我们用的网卡的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 ---打印出了加载驱动的信息
  1. phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
  2. phy0 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29.
  3. phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
  4. phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
  5. phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
  6. 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了

  1. [root@XC2440 /]# iwconfig wlan0
  2. wlan0 IEEE 802.11bgn ESSID:"8812"
  3. Mode:Managed Frequency:2.437 GHz Access Point: EC:88:8F:3D:36:0E
  4. Bit Rate=1 Mb/s Tx-Power=0 dBm
  5. Retry long limit:7 RTS thr:off Fragment thr:off
  6. Encryption key:1234-5678-90
  7. Power Management:on
  8. Link Quality=70/70 Signal level=-37 dBm
  9. Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
  10. 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的时候可以看到:
  1. [root@XC2440 /]# ping 192.168.1.101
  2. PING 192.168.1.101 (192.168.1.101): 56 data bytes
  3. enter ieee80211_xmit
  4. enter ieee80211_tx
  5. exit ieee80211_tx with result: 0
  6. exit ieee80211_xmit no error
  7. enter rt2x00mac_tx
  8. enter rt2x00queue_write_tx_frame
  9. exit rt2x00queue_write_tx_frame no error
  10. enter ieee80211_xmit
  11. enter ieee80211_tx
  12. enter rt2x00mac_tx
  13. enter rt2x00queue_write_tx_frame
  14. exit rt2x00queue_write_tx_frame no error
  15. exit ieee80211_tx with result: 1
  16. exit ieee80211_xmit no error
  17. 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:
  1. [root@XC2440 /]# Trying to associate with ec:88:8f:3d:36:0e (SSID='8812' freq=2437 MHz)
  2. phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 4, CWmax: 10, Aifs: 3, TXop: 0.
  3. phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 4, CWmax: 10, Aifs: 7, TXop: 0.
  4. phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 94.
  5. phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 2, CWmax: 3, Aifs: 2, TXop: 47.
  6. Associated with ec:88:8f:3d:36:0e
  7. WPA: Key negotiation completed with ec:88:8f:3d:36:0e [PTK=TKIP GTK=TKIP]
  8. CTRL-EVENT-CONNECTED - Connection to ec:88:8f:3d:36:0e completed (auth) [id=0 id_str=]
  9. WPA: Group rekeying completed with ec:88:8f:3d:36:0e [GTK=TKIP]
再测试网络,也是正常的

接下来还要移植dhcp,让网卡自动获取IP
再把iperf移植上去,用于测网速
要完善的东西还有好多。。。。
马上把移植详细过程做个总结,并且专为XC2440写个专题教
阅读(8858) | 评论(0) | 转发(5) |
给主人留下些什么吧!~~