在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
添加网关后试试
>: 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)内核部分,
当然修改之后要重新移植内核
2)busybox部分
进入busybox,make menuconfig
从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配置无线网卡-->无线网卡网卡可以正常工作.
- 在fl2440开发板上添加WiFi模块------RT3070无线网卡
- FL2440-WiFi模块学习之用rt3070无线网卡使开发板上网
- rt3070无线网卡工作在staion模式----fl2440开发板
- rt3070无线网卡工作在AP模式----fl2440开发板
- arm9+linux fl2440 实现RT3070无线网卡AP模式并使开发板接入Wifi上网
- fl2440模块学习——添加RT3070实现无线上网
- fl2440模块学习——RT3070无线网卡SoftAP模式实现路由器功能
- RT3070无线网卡STA模式并使开发板接入Wifi上网
- 实现RT3070无线网卡STA模式并使开发板接入Wifi上网
- 开发板STA模式下使用RT3070无线网卡接入WiFi上网
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- fl2440-RT3070无线网卡(AP模式)实现路由器功能
- 基于fl2440 开发板rt3070芯片工作在station模式
- OK6410 嵌入式开发板无线网卡USB RT3070移植笔记
- fl2440-添加RT3070驱动(STA模式)实现无线上网
- vc++程序崩溃后不生成dump文件
- 完整获取图片根据图片链接地址
- 地雷游戏 递推
- 装饰者模式---设计模式
- 最好理解的: spring ioc原理讲解,强烈推荐!
- 在fl2440开发板上添加WiFi模块------RT3070无线网卡
- 基本包装类型
- 欢迎使用CSDN-markdown编辑器
- OC学习之路(4)
- UVA232解题报告
- 大文件读:
- EventBus封装
- error 997:重叠I/O正在进行中(mircosoft vc++ 2008 Redisturbute x64 )
- Tr A