在fl2440开发板上添加WiFi模块------RT3070无线网卡

来源:互联网 发布:怎么制作淘宝网站 编辑:程序博客网 时间:2024/05/29 08:34

    在fl2440开发板上添加Wifi模块即实现RT3070无线网卡STA模式并使开发板接入Wifi上网。

RT3070的工作模式分为 STA(station)模式、SoftAP(Access Point)模式两种。
STA模式:STA就是站点,每一个连接到无线网络中的终端(如笔记本电脑、 PDA及其它可以联网的用户设备)都可称为一个站点。
AP模式:AP也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。
所以我们的驱动有两种,分别支持无来线网卡工作在STA模式和AP模式。因为linux3.0以上的内核中已经含有了RT3070的通用驱动框架mac80211,所以直接基于此并借助wpa_suppicant软件来实现(使能)Wifi的STA模式。
1.需要的文件:
https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz
ftp://ftp.openssl.org/source/openssl-1.0.0t.tar.gz
http://w1.fi/releases/wpa_supplicant-0.7.3.tar.gz
https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/rt2870.bin

一:进入内核配置

[*] Networking support  ---> -*-   Wireless  --->

        <*>   cfg80211 - wireless configuration API

        [*]   Wireless extensions sysfs files

       <*>   Generic IEEE 802.11 Networking Stack (mac80211)

        -*-   Common routines for IEEE802.11 drivers

        [*]     enable powersave by default

        [*]     cfg80211 wireless extensions compatibility


  Device Drivers  --->

       Generic Driver Options  --->

              [*]   Include in-kernel firmware blobs in kernel binary 

       [*] Network device support  --->[*]   Wireless LAN  --->

              <*>   IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)                                                            
              [*]     Support downloading firmware images with Host AP driver                                                              
              [*]       Support for non-volatile firmware download

              <M>   Ralink driver support  ---> 

                         <M>   Ralink rt27xx/rt28xx/rt30xx (USB) support

                         [*]   Ralink debug output

二:配置后的内核重新烧录到开发板中

run bkr

>: usb 1-1.1: USB disconnect, device number 4
usb 1-1.1: new full speed USB device number 4 using s3c2410-ohci
phy1 -> rt2x00_set_chip: Info - Chipset detected - rt: 3070, rf: 0005, rev: 0201.
>: lsusb
Bus 001 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 05e3:0606
Bus 001 Device 004: ID 148f:3070
>: ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 00:22:C0:2F:E7:7A  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
//添加设备驱动后,设备与驱动相互匹配,因此可以查看到设备信息,但是还不能够使能,原因是缺少固件.
三:wireless tools,openssl,wpa_supplicant的移植

注意:先要移植openssl,再移植wpa_supplicant,因为后者依赖于前者的生成库文件
目前可以使用wireless-tools或wpa_supplicant工具来配置无线网络。但要注意对无线网络的配置是全局性的,而非针对具体的接口,所以wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络。而wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP。现在大部分路由器都使用wpa加密,所以使用iwconfig无论怎么设置都无法连接到路由器AP上,除非路由器设置了WEP加密或者不设置密码。

 

        iwconfig:设置基本无线参数

        iwlist:扫描、列出频率,比特率,密钥等

        iwspy:获取每个节点链接的质量

        iwpriv:操作Wireless Extensions 特定驱动

        ifrename: 基于各种静态标准命名接口

 wireless tools的移植(在这个sta模式中,用不用都无所谓,因为主要用wpa_supplicant来配置


tar zxvf wireless_tools.29.tar.gz
cd wireless_tools.29
修改vim Makefile


make编译

make install安装

在该目录下找到libiw.so.29,下载到开发板的/lib/目录下;再该目录下找到iwpriv、iwconfig、iwlist, iwevent, iwspy等命令,下载到开发板的/bin目录下。这时就应该可以使用这些命令通过网卡搜索到环境中的无线网络。


openssl移植

tar zxvf openssl-1.0.0t.tar.gz
cd openssl-1.0.0t
./config no-asm shared --prefix=/home/luminqi/fl2440/3rdparty/openssl  

修改 vim Makefile


make

sudo make install

将下面两个动态库文件移植到开发板/lib下

libssl.a
libcrypto.a



wpa_supplicant移植

/wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持

tar zxvf wpa_supplicant-0.7.3.tar.gz
cd wpa_supplicant-0.7.3
cd wpa_supplicant
cp defconfig .config

vim .config

 25 #### sveasoft (e.g., for Linksys WRT54G) ######################################
 26 #CC=mipsel-uclibc-gcc
 27 CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -L /home/luliten/openssl-0.9.8e/install/lib/
 28 #CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
 29 #CFLAGS += -Os
 30 CFLAGS += -I /home/luliteng/openssl-0.9.8e/install/include/
 31 #CPPFLAGS += -I../src/include -I../../src/router/openssl/include
 32 LIBS += -L /home/luliteng/openssl-0.9.8e/install/lib/
 33 #LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl

 make

经过编译后的wpa_supplicant源程序可以看到三个主要的可执行工 具:wpa_supplicant、wpa_passphrase、wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运 行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。


四:加载固件rt2870.bin,初始化rt3070无线网卡并使能

通常情况下,load firmware的动作是通过用户空间的hotplug handler,也就是/proc/sys/kernel/hotplug里设定的执行档来完成。我们可以在/etc/init.d/rcS里将/proc/sys/kernel/hotplug设定为/sbin/mdev,即busybox的mdev模块。首先rt3070设备向内核请求加载rt2870.bin,然后内核向用户空间(文件系统)发出通知,mdev在收到来自内核的请求加载rt2870.bin这个firmware的消息后,就会会在/lib/firmware目录下寻找rt2870.bin如果能找到就加载到内存中,再由驱动传输到rt3070芯片。传输完成后rt3070芯片进行初始化,初始化完成之后就可以使能.

##内核产生hotplug事件找firmware都是到/lib/firmware这个路径 ,这是固定的;rt2870.bin也不能够修改名称,因为rt3070设备只认识这个文件##

##谈谈个人对rt2870.bin这个固件的理解:因为Linux-3.0没有具体的rt3070驱动,只有基本构架的驱动,而基本构架的驱动只是做了一小部分初始化rt3070设备的工作,因此需要固件来继续完成所有的初始化工作.废话到此为止,下面是相关步骤:

1)文件系统的/etc/init.d/rcS最后加:"echo /sbin/mdev > /proc/sys/kernel/hotplug" 这样一句,可通过vi打开并写入。
2)加载rt2870.bin到开发板的/lib/firmware目录下(没有firmware则创建),tftp -gr rt2870.bin 192.168.1.2(Windows有线网卡IP)
3)ifconfig wlan0 up


五:

.制作连接WiFi的配置文件wpa_supplicant.conf,并通过此文件连接WiFi.
>: cd /wireless(没有此路径则创建相关目录,不一定要将此配置文件放在这里)
>: wpa_passphrase ssid psk >> wpa_supplicant.conf  (注意ssid是wifi的名称,psk是wifi密码)
>: vi wpa_supplicant.conf

作如下修改:


>: ifconfig eth0 down  (禁用eth0,不禁用就会默认eth0连接WiFi,会出错)
>: wpa_supplicant -Dwext -iwlan0 -c/wireless/wpa_supplicant.conf &    //连接WiFi



接下来:

手动设置无线网卡IP和子网掩码,实现ping通局域网内(同一网段)的ip
>: ifconfig wlan0 192.168.1.100 netmask 255.255.255.0     (注意要和WiFi的IP在同一网段,我这里WiFi是192.168.1.1)

: ping 192.168.1. 2  (wifi的ip)
PING 192.168.1.2 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.2: seq=2 ttl=64 time=83.188 ms
64 bytes from 192.168.1.2: seq=1 ttl=64 time=1089.456 ms
64 bytes from 192.168.1.2: seq=0 ttl=64 time=2095.726 ms
64 bytes from 192.168.1.2: seq=3 ttl=64 time=43.601 ms
64 bytes from 192.168.1.2: seq=4 ttl=64 time=43.651 ms
64 bytes from 192.168.1.2: seq=5 ttl=64 time=47.849 ms

--- 192.168.1.2 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 43.601/567.245/2095.726 ms

 

>: ping 192.168.1.105    (Windows的无线网卡ip,前提是关掉防火墙和360)
PING 192.168.1.105 (192.168.1.105): 56 data bytes
64 bytes from 192.168.1.105: seq=0 ttl=128 time=48.168 ms
64 bytes from 192.168.1.105: seq=1 ttl=128 time=45.469 ms
64 bytes from 192.168.1.105: seq=2 ttl=128 time=47.548 ms
64 bytes from 192.168.1.105: seq=3 ttl=128 time=45.971 ms
64 bytes from 192.168.1.105: seq=4 ttl=128 time=52.497 ms


--- 192.168.1.105 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 45.469/47.930/52.497 ms




 添加域名和网关实现ping通外网
在开发板目录/etc/创建一个resolv.conf的文件,因为在内核启动的时候内核会在resolv.conf文件中找DNS
>: vi resolv.conf

[html] view plain copy
  1. <span style="font-size:18px;">#search localdomain  
  2. nameserver 4.2.2.2  
  3. nameserver 8.8.8.8</span>  

添加网关后试试
>: route add default gw 192.168.1.1
>: ping www.baidu.com
PING www.baidu.com (115.239.211.112): 56 data bytes
64 bytes from 115.239.211.112: seq=0 ttl=48 time=609.658 ms
64 bytes from 115.239.211.112: seq=1 ttl=48 time=326.596 ms
64 bytes from 115.239.211.112: seq=2 ttl=48 time=404.329 ms
64 bytes from 115.239.211.112: seq=3 ttl=48 time=268.019 ms
64 bytes from 115.239.211.112: seq=4 ttl=48 time=281.682 ms 



--- www.baidu.com ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 268.019/378.056/609.658 ms


自动(DHCP)设置无线网卡,包括无线网卡IP和子网掩码以及网关
1)内核部分,

[html] view plain copy
  1. <span style="font-size:18px;">Networking --->  
  2.     Networking support     
  3.     Networking options --->   
  4.            Packet socket                 //添加.配置CONFIG_PACKET  
  5.           [ * ]     IP: DHCP support         //添加动态获取IP  
  6.           [ * ] Network packet filtering (replaces ipchains)</span>  

当然修改之后要重新移植内核

2)busybox部分

进入busybox,make menuconfig

[html] view plain copy
  1. <span style="font-size:18px;">[*]udhcp server(udhcpd)  
  2. [*]udhcp client(udhcpc)都选上  
  3. udhcpd就是终端设备作为DHCP服务器 ;udhcpc就是终端设备作为DHCP客户端  
  4. Networking Utilities --->                                              
  5.  [*] udhcp server (udhcpd)  //生成udhcpc命令 </span>  

从busybox的examples/udhcp/下copy好simple.script文件到开发板/usr/share/udhcpc/下,并重命名为default.script.注意更改default.script的权限!

注:(busybox里面默认的目录文件是/usr/share/udhcpc/default.script)

>: chmod a+x default.script
>: wpa_supplicant -Dwext -iwlan0 -c/apps/etc/wireless/wpa_supplicant.conf &

3)动态获取IP地址:
>: udhcpc -i wlan0
udhcpc (v1.20.2) started
Setting IP address 0.0.0.0 on wlan0
Sending discover...
Sending select for 192.168.1.110...
Lease of 192.168.1.110 obtained, lease time 7200
Setting IP address 192.168.1.110 on wlan0
Deleting routers
route: SIOCDELRT: No such process
Adding router 192.168.1.1
Recreating /etc/resolv.conf
 Adding DNS server 210.42.144.100
 Adding DNS server 210.42.159.2

之后同样ping 192.168.1.2 ping 192.168.1.105 ping www.baidu.com验证即可

大致流程:

(用户空间)插上rt3070设备-->(内核空间)找到相关驱动(因为内核里并没有具体的rt3070驱动)与之匹配 -->/sbin/mdev加载固件(rt2870.bin)到内存,并传输到设备上,完成rt3070设备初始化-->(用户空间)使能网卡-->(用户空间)通过wpa_supplicant配置无线网卡-->无线网卡网卡可以正常工作.



 

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 麽稍神经不好受怎么办 绒面高跟鞋太硬怎么办 新买的鞋子太硬怎么办 鞋底太硬脚掌疼怎么办 耐克鞋子走路吱吱响怎么办 两只鞋子有色差怎么办 劳保鞋鞋底太硬怎么办 在学校校服丢了怎么办 高中没进重点班怎么办 孩子不懂学不想学怎么办 孩子小学数学学不懂怎么办 入学籍系统提交了没分班怎么办 被监考老师抓了作弊怎么办 作弊被老师抓到了怎么办? 中考作弊给抓到怎么办 考试作弊证据没得监控怎么办 考试作弊被领导发现了怎么办 黄冈讲课视频看不了怎么办 高中学校不给转学籍怎么办 兴山香溪大酒店欠钱不还怎么办 黑坑青鱼滑口怎么办 不交物业费物业怎么办 车牌刮了一点漆怎么办 电脑光驱线坏了怎么办 做系统不读光驱怎么办 光盘放进电脑没反应怎么办 不服省高院裁定维持原判怎么办 咖啡和酒一起喝怎么办 跟法官联系不上怎么办 四维没有预约到怎么办 钥匙锁在车里怎么办 如果孩子很叛逆骂人打人怎么办 错过了今年规培怎么办 枣木怎么办才能搞直了 高中生和家里闹意见离家出走怎么办 校长信箱实名举报了怎么办 枣子吃多了胀气怎么办 红枣吃多了会怎么办 宁波南苑e家会员卡怎么办 宁波社保卡丢了怎么办 奶茶汉堡店经营不好改怎么办