北方有佳人,遗世而独立。
北方有佳人,绝世而独立。
一顾倾人城,再顾倾人国。
宁不知倾城与倾国?
佳人难再得!
交叉编译器环境:arm-linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询)
开发板平台: fl2440
rt3070中文名称为雷凌3070,是台湾雷凌(Ralink)科技有限公司生产的一款专用于usb无线网卡的处理芯片。是一种低功耗高度集成的MAC / BBP和2.4G RF单一芯片,支持300Mbps的吞吐量。
RT3070无线网卡有两种工作模式STA模式和softAP模式,分别由STA驱动和softAP驱动来实现,STA驱动支持无线网卡工作在STA模式下,可以连接到网络实现上网功能。而SoftAP的驱动支持无线网卡工作在softAP模式下,可以作为一个软的接入点(相当于一个路由器),实现无线路由器功能。前面的学习过程中,在FL2440上面已经使能了DM9000的有线网卡(eth0)和USB驱动,可以使用DM9000网卡接入网线实现上网功能,现在对于FL2440基于RT3070添加STA驱动使其可以使用雷凌公司的RT3070芯片实现无线上网功能。
修改内核配置:
[*] Networking support --->
-*- Wireless --->
<*> cfg80211 - wireless configuration API
[*] enable powersave by default
[*] cfg80211 wireless extensions compatibility
[*] Wireless extensions sysfs files
{*} Common routines for IEEE802.11 drivers
<*> Generic IEEE 802.11 Networking Stack (mac80211)
Device Drivers --->
Generic Driver Options --->
-*- Userspace firmware loading support
[*] Include in-kernel firmware blobs in kernel binary
[*] Network device support --->
[*] Wireless LAN --->
<*> Ralink driver support --->
<*> Ralink rt27xx/rt28xx/rt30xx (USB) support
[*] rt2800usb - Include support for rt33xx devices
[*] Ralink debug output
楼主只作简要分析,具体移植过程可参照博客:
http://blog.csdn.net/Edroid1530/article/details/72230196
总结(简略步骤):
内核使能无线网卡后,要连路由器上网还需要移植无线上网工具:openssl和wpa_supplicant,openssl是一个库,存放wpa_supplicant工具所依赖的库文件。
一、使能网卡:
添加内核支持,使能成功后出现wlan0.
> ifconfig wlan0 up
wlan0 Link encap:Ethernet HWaddr 00:A1:B0:40:6E:F7
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)
第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)
第三行:MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节
第四、五行:接收、发送数据包情况统计
第七行:接收、发送数据字节数统计信息
二、第三方应用移植:
1、移植openssl库:
和之前移植madplay播放器类似,首先要查看下载下来的包是否有Makefile,如果没有的话,必有一个config或者configure。如果存在Makefile的话,只需要将Makefile中有关编译的内容改成交叉编译就可以。如果不存在Makefile一般要做如下操作生成Makefile:
/config no-asm shared –prefix=
pwd
/_install
no-asm是在交叉编译过程中不使用汇编代码代码加速编译过程.原因是它的汇编代码是对arm格式不支持的。
shared生成动态连接库。
prefix=路径 就是你的安装目录。安装完成后在这个目录下会有四个文件夹:bin lib include ssl。这四个目录非常重要,openssl编程就需要这些目录的配合。
2、移植wpa_supplicant
(1)备份:cp keconfig .config
defconfig—–>.config (第二步)
kconfig——->.config———->makefile(第三步)
(2)修改.config:
配置文件中:
CC 指定了交叉编译器的路径 以及用-L指定所依赖的库所在的目录,也就是我们在上面移植的openssl库的lib路径。
CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。
LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果明明安装了某个包,而安装另一个包时,它愣是说找不到,可以抒那个包的lib路径加入的LDFALGS中试一下。
LIBS:告诉链接器要链接哪些库文件,如LIBS = -lpthread -liconv
移植完成后生成三个工具:
- wpa_cli 默认的启动命令
- wpa_passphrase 生成配置文件
- wpa_supplicant 连接wifi命令
通过命令可查看某个工具所依赖的库:
>arm-linux-readelf -d ./wpa_supplicant
wpa_passphrase使用实例:
/*Router_LingYun_Master是我将要连接的路由器的SSID*/
/*ling_emb是SSID为Router_Lingyun的路由器认证密码*/
wpa_passphrase Router_LingYun_Master lingyun_emb>> /etc/wpa_supplicant.conf
生成了一个配置文件wpa_supplicant.conf,文件中存放着我们需要连接的路由器的SSID以及密码。
wpa_supplicant使用实例:(连接wifi)
wpa_supplicant -B -d -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
-B 后台执行
-d 增加调试信息输出
-Dwext 驱动名称
-i 网口名称
-c 附加配置文件,即根据配置文件执行操作
3、Wireless tools移植
wireless_tools.29.tar.gz
这个工具提供了很多工具,最好移植一下。
http://download.csdn.net/detail/u010944778/8916883
修改makefile:
## Compiler to use (modify this for cross compile).
CC = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
## Other tools you need to modify for cross compile (static lib only).
AR = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ar
RANLIB = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ranlib
修改完后编译生成如下工具:
- iwevent:通过linux下面的netlink机制将内核的信息发送给用户态程序,这里的用户态程序就是iwevent。通过该命令可获得无线网卡连接上ap时的打印信息
iwpriv:操作Wireless Extensions 特定驱动。通过iwpriv,我们可以得到AP的一些参数设置,也可以设置自己的WIFI参数。
iwgetid:
- ifrename:基于各种静态标准命名接口
- iwspy :获取每个节点链接的质量(只能查阅与之相连的节点)
- iwconfig:设置基本无线参数
- iwlist :扫描、列出频率,比特率,密钥等
iwconfig使用实例:
#iwconfig wlan0 key xxxx //输入验证密码
#iwconfig wlan0 key open //密码验证功能打开
#iwconfig wlan0 essid “edan” //设置ESSID
#iwconfig wlan0 ap auto //加入无线网络
#ifconfig wlan0 192.168.1.23 //设置wifi IP地址
参考:http://www.cnblogs.com/tkid/p/3998721.html
四、手动设置DHCP
#配置IP地址
ifconfig wlan0 192.168.0.168
#配置默认网关
route add default gw 192.168.0.1 //必须与你电脑在同一个网段
#配置DNS
echo "nameserver 114.114.114.114" > /etc/resolv.conf
五、自动获取IP:
busybox已经集成了DHCP的客户端和服务端,源码编译过后的examples/udhcp/simple.script作为DHCP客户端的示例配置文件如下,将其重命名为/usr/share/udhcpc/default.script,特别注意必须给default.script 可执行权限**。直接拷贝到开发板udhcpc指定目录下就可以。
然后运行如下命令可自动获取:
udhcpc -i wlan0
然后就可以上网了,可以ping百度试试。
六、通过脚本实现开机自启:
将脚本命名为S**
#!bin/sh
ifconfig eth0 192.168.1.111 up
ifconfig wlan0 up
wpa_supplicant -B -d -Dwext -i wlan0 -c /etc/wpa_supplicant.conf //连接wifi
ifconfig wlan0 192.168.0.123
route add default gw 192.168.0.1
echo "nameserver 114.114.114.114" > /etc/resolv.conf
因为脚本默认自启目录是/app/etc/init.d/以及/etc/init.d/,所以我们可以把该脚本命名为以S打头,在app目录下创建路径etc/init.d或者直接把脚本放到/etc/init.d目录,都可以实现脚本自启动。
楼主只作简要分析,具体移植过程可参照博客:
http://blog.csdn.net/Edroid1530/article/details/72230196