在xc2440开发板上使用无线网卡的调试总结 tl-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 932434
  • 博文数量: 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。这难不倒我,不管什么方案,都能在内核中把驱动加上。从网上得到到的信息都是从雷凌的凯发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 ---打印出了加载驱动的信息
  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写个专题教
阅读(9166) | 评论(0) | 转发(5) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图