RT3070之STA模式实现无线上网
2017-06-02 20:07
441 查看
成功的秘诀,在永不改变既定的目的 ——卢梭 |
由于我们使用的是USB无线网卡处理芯片,所以在此之前我们应该已经完成USB驱动的移植以及dm9000网卡的移植,相关文章可以看本人以前的博客。
做好这些准备,就开始干事了,我们基于内核3.0.54版本:
[*] 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
重新make之后,将生成的新内核烧进开发板,启动开发板后,查看我们的网卡信息
网卡成功创建后需要使能,这里要先在虚拟机上下载RT2870的固件
wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/rt2870.bin
将我们下载的rt2870.bin烧录到开发板中,可以在开发板中创建一个目录存放
接下来就是使能网卡了:
ifconfig wlan0 up ifconfig //查看已经使能的网卡信息
不出意外应该能看到eth0和wlan0两个已经使能的网卡
网卡已经使能了,接下来就是一直我们的opemssl库了,为了方便起见,这里给出一个一键移植的脚本文件。
#!/bin/sh #+-------------------------------------------------------------------------------------------- #|Description: This shell script used to download tree wireless_tools code and cross compile it. #| Author: TangYanjun <tangyanjun@qq.com> #| ChangeLog: #| 1, Initialize 1.0.0 on 2017.6.1 #+-------------------------------------------------------------------------------------------- PRJ_PATH=`pwd` APP_NAME="openssl-0.9.8i" PACK_SUFIX="tar.gz" DL_ADDR="http://www.openssl.org/source/$APP_NAME.$PACK_SUFIX" INST_PATH=$PRJ_PATH/install #INST_PATH=../install ARCH=arm920t CROSS="/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-" sup_arch=("" "arm926t" "arm920t" ) function select_arch() { echo "Current support ARCH: " i=1 len=${#sup_arch[*]} while [ $i -lt $len ]; do echo "$i: ${sup_arch[$i]}" let i++; done echo "Please select: " index= read index ARCH=${sup_arch[$index]} } function decompress_packet() ( echo "+---------------------------------------------+" echo "| Decompress $1 now" echo "+---------------------------------------------+" ftype=`file "$1"` case "$ftype" in "$1: Zip archive"*) unzip "$1" ;; "$1: gzip compressed"*) if [ 0 != `expr "$1" : ".*.tar.*" ` ] ; then tar -xzf $1 else gzip -d "$1" fi ;; "$1: bzip2 compressed"*) if [ 0 != `expr "$1" : ".*.tar.*" ` ] ; then tar -xjf $1 else bunzip2 "$1" fi ;; "$1: POSIX tar archive"*) tar -xf "$1" ;; *) echo "$1 is unknow compress format";; esac ) if [ -z $ARCH ] ; then select_arch fi if [ "arm920t" != $ARCH -a "arm926t" != $ARCH ] ; then echo "+------------------------------------------------------------------+" echo "| ERROR: Unsupport platform $ARCH to cross compile " echo "+------------------------------------------------------------------+" exit -1; else CROSS="/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-" fi export CC=${CROSS}gcc export CXX=${CROSS}g++ export AR=${CROSS}ar export AS=${CROSS}as export LD=${CROSS}ld export NM=${CROSS}nm export RANLIB=${CROSS}ranlib export STRIP=${CROSS}strip # Download source code packet if [ ! -s $APP_NAME.$PACK_SUFIX ] ; then echo "+------------------------------------------------------------------+" echo "| Download $APP_NAME.$PACK_SUFIX now " echo "+------------------------------------------------------------------+" wget $DL_ADDR fi # Decompress source code packet if [ ! -d $APP_NAME ] ; then decompress_packet $APP_NAME.$PACK_SUFIX fi if [ ! -d $INST_PATH ] ; then mkdir -p $INST_PATH else echo "$APP_NAME already cross compiled, exit now..." exit; fi echo "+------------------------------------------------------------------+" echo "| Build $APP_NAME for $ARCH " echo "| Crosstool: $CROSS" echo "+------------------------------------------------------------------+" cd $APP_NAME set -x patch -p1 < ../patch/$APP_NAME-tls-extensions.patch #Modify the compiler FILE=Makefile line=`sed -n '/^CC= cc/=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|CC = ${CROSS}gcc|" $FILE fi line=`sed -n '/^AR=ar/=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|AR = ${CROSS}ar \$(ARFLAGS) r|" $FILE fi line=`sed -n '/^RANLIB= /=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|RANLIB = ${CROSS}ranlib|" $FILE fi #Support build shared library line=`sed -n '/^OPTIONS= /=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|OPTIONS=enable-shared no-camellia no-capieng no-cms no-gmp no-krb5 no-mdc2 no-montasm no-rc5 no-rfc3779 no-seed no-tlsext no-zlib no-zlib-dynamic|" $FILE fi line=`sed -n '/^SHLIB_EXT=/=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|SHLIB_EXT=.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)|" $FILE fi line=`sed -n '/^SHLIB_TARGET/=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|SHLIB_TARGET=linux-shared|" $FILE fi line=`sed -n '/^build_all:/=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|build_all: build_libs build_apps build_tests build_tools build-shared|" $FILE fi #Modify install path line=`sed -n '/^INSTALLTOP=/=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|INSTALLTOP = $INST_PATH|" $FILE fi line=`sed -n '/^OPENSSLDIR=/=' $FILE` if [ -n "$line" ] ; then sed -i -e ${line}s"|.*|OPENSSLDIR = $INST_PATH|" $FILE fi make && make install #cp -af *.so* $INST_PATH/lib cd -
要注意的就是交叉编译器的路必须自己修改。
脚本编译成功后,执行,生成了几个动态库
将其烧录到开发板的/bin目录下
然后再移植wpa_supplicant,这里有我们要使用的工具
[tangyanjun@VM_216_80_centos wpa_supplicant]$wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/wpa_supplicant-0.7.3.tar.gz [tangyanjun@VM_216_80_centos wpa_supplicant]$tar zxvf wpa_supplicant-0.7.3.tar.gz [tangyanjun@VM_216_80_centos wpa_supplicant]$cd wpa_supplicant-0.7.3/wpa_supplicant [tangyanjun@VM_216_80_centos wpa_supplicant]$cp defconfig .config
接下来修改.config文件
--- /home/tangyanjun/wpa_supplicant-0.7.3/wpa_supplicant/defconfig 2010-09-07 23:43:39.000000000 +0800 +++ /home/tangyanjun/WIFI/wifi/wpa_supplicant/wpa_supplicant-0.7.3/wpa_supplicant/.config 2017-05-29 14:31:20.000000000 +0800 @@ -24,8 +24,9 @@ #### sveasoft (e.g., for Linksys WRT54G) ###################################### #CC=mipsel-uclibc-gcc -#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc -#CFLAGS += -Os +CC= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -L/home/tangyanjun/WIFI/wifi/wpa_supplicant/wpa_supplicant-0.7.3/ wpa_supplicant + +CFLAGS += -I/home/tangyanjun/WIFI/wifi/wpa_supplicant/wpa_supplicant-0.7.3/wpa_supplicant #CPPFLAGS += -I../src/include -I../../src/router/openssl/include #LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl ###############################################################################
主要也就是改几个交叉编译器的路径,这样编译之后生成几个文件:
wpa_cli wpa_passphrase //生成配置文件 wpa_supplicant //连接wifi命令
查看命令所依赖的库文件
这里很奇怪,开发板上运行的时候提示我还需要libssl.so.0.9.8 和 libcrypto.so.0.9.8。根据他所需求的改名字就可以了。
生成配置文件
我们在开发板的/etc路径下新建一个文件wpa_supplicant.conf来配置我们连接的AP的SSID和key等信息
ctrl_interface=/var/run/wpa_supplicant #ctrl_interface_group=wheel network={ ssid="Router_LingYun_Master" //接入的WIFI名称 key_mgmt=WPA-PSK proto=WPA2 group=TKIP CCMP pairwise=TKIP CCMP psk="lingyun_emb" //WIFI密码#psk=56466f08ff364ccbbec3266aeda88cb69619a3914834966cc7e90098985d225c }
启用wpa_supplicant
wpa_supplicant -B -d -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
网络配置
因为没有开启DHCP,即不能自动获取IP,因此要手动分配IP
#配置IP地址 ifconfig wlan0 192.168.0.168 //与路由器地址同网段的IP #配置默认网关 route add default gw 192.168.0.1 //电脑连接的路由器地址 #配置DNS echo "nameserver 114.114.114.114" > /etc/resolv.conf //设置网关,一般默认
这里的C类地址同网段就是指IP的前三个字节相同,最后一位随意,但是不能和路由器一样,也不能超过255。
设置成功后进行网络测试:
>: ping baidu.com PING baidu.com (220.181.57.217): 56 data bytes 64 bytes from 220.181.57.217: seq=0 ttl=54 time=57.336 ms 64 bytes from 220.181.57.217: seq=1 ttl=54 time=70.318 ms 64 bytes from 220.181.57.217: seq=2 ttl=54 time=70.620 ms 64 bytes from 220.181.57.217: seq=4 ttl=54 time=71.594 ms 64 bytes from 220.181.57.217: seq=5 ttl=54 time=69.678 ms
能ping通百度则说明我们的开发板能联网了
使能DHCP服务
刚才是手动设置IP,现在我们开启DHCP服务来自动获取IP地址
将虚拟机下的busybox的配置文件拷入到开发板中
Linux 下 :/opt/busybox/examples/udhcp/simple.script
在开发板中/usr/share/下创建一个文件夹udhcpc,然后将上面的配置文件拷入。
开发板下:/usr/share/udhcpc/default.script 这里将simple.script改为default.script ,
然后给这个文件执行权限*:
chmod 777 default.script
当然,如果没有这个文件或者懒得拷贝,这里有一份:
#!/bin/sh # udhcpc script edited by Tim Riker <Tim@Rikers.org> RESOLV_CONF="/etc/resolv.conf" [ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; } NETMASK="" [ -n "$subnet" ] && NETMASK="netmask $subnet" BROADCAST="broadcast +" [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" case "$1" in deconfig) echo "Setting IP address 0.0.0.0 on $interface" ifconfig $interface 0.0.0.0 ;; renew|bound) echo "Setting IP address $ip on $interface" ifconfig $interface $ip $NETMASK $BROADCAST if [ -n "$router" ] ; then echo "Deleting routers" while route del default gw 0.0.0.0 dev $interface ; do : done metric=0 for i in $router ; do echo "Adding router $i" route add default gw $i dev $interface metric $((metric++)) done fi echo "Recreating $RESOLV_CONF" echo -n > $RESOLV_CONF-$$ [ -n "$domain" ] && echo "search $domain" >> $RESOLV_CONF-$$ for i in $dns ; do echo " Adding DNS server $i" echo "nameserver $i" >> $RESOLV_CONF-$$ done mv $RESOLV_CONF-$$ $RESOLV_CONF ;; esac exit 0
现在执行udhcpc -i wlan0,即自动获取ip
如果出现获取不到,那么很有可能是文件权限问题,我们在移植一些文件的时候最好给予权限。因为权限问题耽误时时间很亏。
现在能够上网了,但是不难发现每次启动开发板,都要手动开启我们的WIFI,因此这里有一个脚本,可以实现开机自启动WIFI
#!bin/sh
ifconfig eth0 192.168.1.111 up //开发板有线IP
ifconfig wlan0 up //使能WIFI芯片
wpa_supplicant -B -d -Dwext -i wlan0 -c /etc/wpa_supplicant.confifconfig wlan0 192.168.0.123 //配置固定不变的静态IP
route add default gw 192.168.0.1 //路由器地址
不难发现,这些是我们刚才配置的命令,我们将这个文件置于/etc/init.d/下,即可实现开机自启动,然后我们饿文件名必须以S开头,我们的fl2440开发板是这样,我的文件是:
vim /apps/etc/init.d/S00wifi //注意给S00wifi可执行权限
配置完成,重启以后我们便可以看见我们的wlan0,已经自动使能并获取到IP:192.168.0.123,执行ping命令也能够通。
那么,既然每次都可以自己连无线网,我们的有线IP也就可以不用了吧?是这样的,我们将所有与电脑连接的线都拔掉,只剩一个开发板和电源,然后根据上次我的网线连接开发板过程,我们也可以无线连开发板,只不过登录的IP换成了我们的wlan0网卡的IP,用户名和密码都是开发板的密码不变,这样,操控开发板特别方便,只要你的wifi芯片耐热。 |
相关文章推荐
- 开发板STA模式下使用RT3070无线网卡接入WiFi上网
- RT3070无线网卡STA模式并使开发板接入Wifi上网
- FL2440——RT3070 STA模式 实现无线上网功能
- RT3070无线网卡AP模式——开发板实现路由功能
- RT3070无线网卡AP模式——开发板实现路由功能并使客户端成功联网
- fl2440-添加RT3070驱动(STA模式)实现无线上网
- 实现RT3070无线网卡STA模式并使开发板接入Wifi上网
- arm9+linux fl2440 实现RT3070无线网卡AP模式并使开发板接入Wifi上网
- rt3070无线网卡工作在staion模式----fl2440开发板
- FL2440WiFi学习之rt3070无线网卡动态获取IP上网
- rt3070无线网卡工作在AP模式----fl2440开发板
- RT3070 STA模式——开发板实现上网功能
- 实现文本无线上网
- Win7系统下如何安装无线路由器实现无线上网
- Rt3070无线网卡AP功能移植到s5pv210
- 超简单三步实现黑莓当猫,让您的笔记本随时随地轻松实现无线上网
- 交换机接出来的网线可以再接上无线路由器实现无线上网吗
- 树莓派使用360wifi2实现无线上网
- fl2440模块学习——RT3070无线网卡SoftAP模式实现路由器功能
- Windows7下无线共享上网模式一:有线网卡连接因特网,无线网卡共享