实现RT3070无线网卡STA模式并使开发板接入Wifi上网

目录

一、前言

二、无线网卡STA模式和AP模式的对比

三、配置Linux内核支持wireless无线上网

四、资源下载无线网络配置工具Wireless tools和Wpa_supplicant以及Openssl移植

五、插上RT2070无线网卡并加载新内核启动

 六、启动RT3070无线模块连接路由器

七、连接你的路由器:

八、遇到的问题:


———————————————————————————————————————

主机操作系统:Centos 6.7
交叉编译器环境:arm-linux-gcc-4.5.4 
开发板平台: FL2440 
Linux内核版本: linux-3.0 
开发模块: SIM900 WiFI-STA模式
邮箱:leiyuxing205@gmail.com
———————————————————————————————————————

一、前言

STA模式笔记本上无线网卡模式,用来连接到无线路由器上上网。通俗点说,就是客户端模式(笔记本)

所以我们的驱动有两种,分别支持无线网卡工作在STA模式和AP模式。因为linux3.0以上的内核中已经含有了RT3070的通用mac80211驱动框架,所以我首先直接基于此并借助wpa_suppicant软件来实现Wifi的STA模式。

二、无线网卡STA模式和AP模式的对比

无线网卡STA模式和AP模式都是指无线网络的工作模式,但它们的功能和应用场景不同。

STA模式(Station模式)是指无线网卡以客户端方式接入已有的无线网络,它接受无线信号并连接到无线网络,使得电脑可以通过该网络访问互联网及其他设备。STA模式适用于家庭、办公室等场合,电脑无需直接连接路由器,只需通过无线网卡即可接入网络。

AP模式(Access Point模式)是指无线网卡作为无线接入点,建立一个属于自己的独立无线网络,可以允许其他设备通过无线方式连接网络。AP模式适用于无线局域网或者小型场合,例如酒店、咖啡厅、会议室等场所,可以免费提供无线网络连接,方便用户的上网需求。

总的来说,STA模式适用于连接已有无线网络的场合,而AP模式适用于需要建立无线网络的场合。

三、配置Linux内核支持wireless无线上网

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

     <*>   cfg80211 - wireless configuration API                        
     [ ]     nl80211 testmode command                                    
     [ ]     enable developer warnings                               
     [ ]     cfg80211 regulatory debugging                            
     [*]     enable powersave by default                            
     [ ]     cfg80211 DebugFS entries                                
     [*]     cfg80211 wireless extensions compatibility                
     [*]   Wireless extensions sysfs files                               
     {*}   Common routines for IEEE802.11 drivers  
                       
     [ ]   lib80211 debugging messages                              
     <*>   Generic IEEE 802.11 Networking Stack (mac80211)                
                  Default rate control algorithm (Minstrel)  --->                 
     [ ]   Enable mac80211 mesh networking (pre-802.11s) support            
     [ ]   Export mac80211 internals in DebugFS                             
     [ ]   Select mac80211 debugging features  ---> 
Device Drivers  --->
       Generic Driver Options  --->
      (/sbin/hotplug) path to uevent helper                                  
      [ ] Maintain a devtmpfs filesystem to mount at /dev                    
      [ ] Select only drivers that don't need compile-time external firmware
      [ ] Prevent firmware from being built  

      -*- Userspace firmware loading support                                
     [*]   Include in-kernel firmware blobs in kernel binary              
      ()    External firmware blobs to build into the kernel binary         
      [ ] Driver Core verbose debug messages                                 
      [ ] Managed device resources verbose debug messages
    [*] Network device support  --->
           [*]   Wireless LAN  --->
               <*>   Ralink driver support  --->
               < >   Ralink rt2500 (USB) support                                    

               < >   Ralink rt2501/rt73 (USB) support                                
               <*>   Ralink rt27xx/rt28xx/rt30xx (USB) support                      
                 [ ]     rt2800usb - Include support for rt33xx devices                 
                 [ ]     rt2800usb - Include support for rt35xx devices (EXPERIMENTAL)  
                 [ ]     rt2800usb - Include support for rt53xx devices (EXPERIMENTAL)  

                 [ ]     rt2800usb - Include support for unknown (USB) devices         
                 [*]   Ralink debug output

 步骤总结:

以下是配置Linux内核支持wireless无线上网的步骤:

1、确认无线网卡型号,使用以下命令:

lspci | grep -i network

2、打开内核配置工具,使用以下命令:

make menuconfig

3、进入“Device Drivers” -> “Network device support” -> “Wireless LAN”菜单。

4、检查是否已经选择了正确的无线网卡驱动程序,如果没有则选择正确的驱动程序。

5、进入“Device Drivers” -> “Network device support” -> “Wireless LAN” -> “Generic IEEE 802.11 Networking Stack (mac80211)”菜单。

6、检查是否已经选择了正确的无线网络协议,如果没有则选择正确的协议。

7、保存配置并退出。

8、重新编译内核,使用以下命令:

make && make modules_install && make install

9、重启系统,验证无线网卡是否能够正常工作。

四、资源下载无线网络配置工具Wireless tools和Wpa_supplicant以及Openssl移植

===================================================================

目前可以使用wireless-toolswpa_supplicant工具来配置无线网络。但要注意对无线网络的配置是全局性的,而非针对具体的接口。wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络。而wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP

===================================================================

 1 . 1 Wireless tools移植

wireless_tools.29.tar.gz

http://download.csdn.net/detail/u010944778/8916883

 1.2解压

#tar zxvf wireless_tools.29.tar.gz

#cd wireless_tools.29
 1.3修改Makefile
11 ## Compiler to use (modify this for cross compile).
12 CC = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
13 ## Other tools you need to modify for cross compile (static lib only).
14 AR = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ar
15 RANLIB = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ranlib

1.4编译

[leiyuxing@centos6 wireless_tools.29]$ ls

19-udev-ifrename.rules  iwconfig.o  iwlist.o       sample_pm.c

CHANGELOG.h             iwevent     iwmulticall.c  sample_priv_addr.c

COPYING           iwevent.8   iwpriv         udev.import_devpath.diff

cs                      iwevent.c   iwpriv.8       wireless.10.h

DISTRIBUTIONS.txt       iwevent.d   iwpriv.c       wireless.11.h

fr                      iwevent.o   iwpriv.d       wireless.12.h

HOTPLUG.txt             iwgetid     iwpriv.o       wireless.13.h

ifrename                iwgetid.8   iwspy         wireless.14.h

ifrename.8              iwgetid.c   iwspy.8        wireless.15.h

ifrename.c              iwgetid.d   iwspy.c        wireless.16.h

ifrename.d              iwgetid.o   iwspy.d        wireless.17.h

ifrename.o              iwlib.c     iwspy.o        wireless.18.h

IFRENAME-VS-XXX.txt     iwlib.d     libiw.so.29    wireless.19.h

iftab.5                 iwlib.h     macaddr.c      wireless.20.h

INSTALL                 iwlib.so    Makefile       wireless.21.h

iwconfig                iwlist     PCMCIA.txt     wireless.22.h

iwconfig.8              iwlist.8    README         wireless.7

iwconfig.c              iwlist.c    README.fr      wireless.h

iwconfig.d              iwlist.d    sample_enc.c

1.5拷贝

将生成的命令工具:iwlistiwconfigiwprivlibiw.so.29 等拷贝到目标板上,路径为:分别把他们放到开发板的/bin/lib目录下,并赋予权限

chmod 777 iw* libiw.so.29

2.Openssl工具移植

===================================================================

现在的wifi网络肯定都是加密的。而大多都是WPA加密,所以wpa_supplicant对我们来说除了配置无线网络的需求之外,它更主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的。而要加密就要使用到相关的加密算法,常用的密钥等,所以我们要先移植Openssl工具再移植wpa-supplicant。因为后面编译wpa_supplicant要依赖openssl中的lib和include

===================================================================

2.1下载openssl驱动源码

 Openssl-0.9.8i

http://download.csdn.net/detail/u010944778/8918317

 .2解压后创建指定的安装目录

[leiyuxing@centos6 openssl-0.9.8i]$ mkdir install

2.3修改Makefile

29INSTALLTOP=/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8i/install//指定ssl的安装目录
32 OPENSSLDIR=/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8i/install
62 CC= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
69 AR= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ar $(ARFLAGS) r
70 RANLIB= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ranlib

2.4编译

[leiyuxing@centos6 openssl-0.9.8i]$sudo make

[leiyuxing@centos6 openssl-0.9.8i]$sudo make install

并拷贝libcrypto.a  libssl.a到开发板的/lib

3.wpa_supplicant驱动移植

3.1下载wpa_supplicant源码

wpa_supplicant-0.7.3.tar.gz

http://download.csdn.net/detail/u010944778/8918325

3.2解压后修改.config配置文件

[leiyuxing@centos6 wpa_supplicant-0.7.3]$ ls

COPYING  patches  README  src  wpa_supplicant

[leiyuxing@centos6 wpa_supplicant-0.7.3]$ cd wpa_supplicant/

[leiyuxing@centos6 wpa_supplicant]$ cp defconfig .config

[leiyuxing@centos6 wpa_supplicant]$ vim .config 
27 #CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
28 CC =/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -L/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8i/install/lib
29 #CFLAGS += -Os
30 CFLAGS +=-I/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8i/install/include
31 #CPPFLAGS += -I../src/include -I../../src/router/openssl/include
32 #LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl
33 LIBS += -L/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8i/install/lib
[leiyuxing@centos6 wpa_supplicant]$ make

 

 

然后将wpa_cliwpa_supplicantwpa_passphrase拷贝到开发板的/bin目录下切记wpa_cliwpa_supplicantwpa_passphrase都要给777权限!!!!

 

五、插上RT2070无线网卡并加载新内核启动

>内核信息打印部分

>: usb 1-1.2: new full speed USB device number 3 using s3c2410-ohci

phy0 -> rt2x00_set_chip: Info - Chipset detected - rt: 3070, rf: 0005, rev: 0201.

>使用lsusb命令查看:

>: lsusb

Bus 001 Device 001: ID 1d6b:0001

Bus 001 Device 002: ID 05e3:0606

Bus 001 Device 003: ID 148f:3070

>如果是热插拔的话会,在插入的那一刻,串口会打印如下信息:

>: usb 1-1.2: USB disconnect, device number 3

usb 1-1.2: new full speed USB device number 4 using s3c2410-ohci

phy1 -> rt2x00_set_chip: Info - Chipset detected - rt: 3070, rf: 0005, rev: 0201.

>ifconfig查看网卡信息

>: ifconfig wlan0

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字节 
第四、五行:接收、发送数据包情况统计 
第七行:接收、发送数据字节数统计信息

>使能RT3070无线网卡模块

>: cd lib/

>: mkdir firmware

>: cd firmware/

>: tftp -gr rt2870.bin 192.168.1.2

rt2870.bin           100% |*******************************|  8192   0:00:00 ETA

>:  ifconfig wlan0 up

phy1 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.

phy1 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 0.36.

phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.

phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.

phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.

phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.

 六、启动RT3070无线模块连接路由器

>: cd apps/

>: ls

>:mkdir etc

>:cd etc

>:mkdir wireless

>:cd wireless

在开发板上输入命令:wpa_passphrase ssid psk>>wpa_supplicant.conf  (ssid就是你wifi的名字 psk就是密码)

例如:

>: wpa_passphrase HiWiFi_LingYun lingyun-emb>>wpa_supplicant.conf

修改我的配置文件:

>: vi wpa_supplicant.conf
# WPA-PSK/TKIP
# wpa_supplicant -Dwext -iwlan0 -c/apps/etc/wireless/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
network={                                                                   
        ssid="HiWiFi_LingYun"                                               
        key_mgmt=WPA-PSK                                                    
        proto=WPA                                                           
        pairwise=TKIP CCMP                                                  
        #psk="lingyun-emb"                                                  
        psk=a9a3f0b958b887804e71fe58694f82b5972dfc658827a366d6eea0c8abe9a42e
}


七、连接你的路由器:

>: wpa_supplicant -Dwext -iwlan0 -c/apps/etc/wireless/wpa_supplicant.conf &

>:Trying to associate with d4:ee:07:22:6b:5c (SSID='HiWiFi_LingYun' freq=2417 MHz)
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 4, CWmax: 10, Aifs: 7, TXop: 0.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 94.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 2, CWmax: 3, Aifs: 2, TXop: 47.
Associated with d4:ee:07:22:6b:5c
WPA: Key negotiation completed with d4:ee:07:22:6b:5c [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to d4:ee:07:22:6b:5c completed (auth) [id=0 id_str=]

设置你的无限网卡IP和子网掩码

>: ifconfig wlan0 192.168.199.234 netmask 255.255.255.0

你可以ping一下你的主机IP(192.168.199.1是博主的主机IP)

>: ping 192.168.199.1

PING 192.168.199.1 (192.168.199.1): 56 data bytes

64 bytes from 192.168.199.1: seq=0 ttl=64 time=56.992 ms

64 bytes from 192.168.199.1: seq=2 ttl=64 time=45.916 ms

64 bytes from 192.168.199.1: seq=3 ttl=64 time=47.709 ms

64 bytes from 192.168.199.1: seq=4 ttl=64 time=47.760 ms

64 bytes from 192.168.199.1: seq=5 ttl=64 time=46.920 ms

64 bytes from 192.168.199.1: seq=6 ttl=64 time=47.732 ms

64 bytes from 192.168.199.1: seq=7 ttl=64 time=45.949 ms

64 bytes from 192.168.199.1: seq=8 ttl=64 time=50.674 ms

64 bytes from 192.168.199.1: seq=9 ttl=64 time=50.893 ms

64 bytes from 192.168.199.1: seq=10 ttl=64 time=45.923 ms

64 bytes from 192.168.199.1: seq=11 ttl=64 time=45.972 ms

64 bytes from 192.168.199.1: seq=12 ttl=64 time=45.994 ms

64 bytes from 192.168.199.1: seq=13 ttl=64 time=46.058 ms

64 bytes from 192.168.199.1: seq=14 ttl=64 time=45.983 ms

64 bytes from 192.168.199.1: seq=15 ttl=64 time=46.060 ms

64 bytes from 192.168.199.1: seq=16 ttl=64 time=46.877 ms

Ping自己的主机不好玩,那我们来试试外网的链接

在开发板目录/etc/创建一个resolv.conf的文件,因为在内核启动的时候内核会在

resolv.conf文件中找dns

>: vi resolv.conf

#search localdomain

nameserver 4.2.2.2

nameserver 8.8.8.8

添加网关后试试

>: route add default gw 192.168.199.1

>: ping www.baidu.com

PING www.baidu.com (119.75.217.109): 56 data bytes

64 bytes from 119.75.217.109: seq=0 ttl=53 time=25.603 ms

64 bytes from 119.75.217.109: seq=1 ttl=53 time=65.629 ms

64 bytes from 119.75.217.109: seq=2 ttl=53 time=77.645 ms

64 bytes from 119.75.217.109: seq=3 ttl=53 time=66.636 ms

64 bytes from 119.75.217.109: seq=4 ttl=53 time=67.671 ms

八、遇到的问题:

问题一:

 >: ifconfig wlan0 up
phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
ifconfig: SIOCSIFFLAGS: No such file or directory

通常情况下,load firmware的动作是通过用户空间的hotplug handler,也就是/proc/sys/kernel/hotplug里设定的执行档,来完成。root_qtopia默认会在/etc/init.d/rcS里将/proc/sys/kernel/hotplug设定为/sbin/mdev,即busybox的mdev模块。它在收到来自内核的请求加载rt73.bin这个firmware消息后,会从/lib/firmware目录下去找rt73.bin,如果能找到就加载。

解决方法:

将下载好的固件RT2870.bin放入/lib文件下新创建的firmware目录中就可以解决。

问题二:

>: wpa_passphrase CMCC 2b2072b207 >> wpa_supplicant.conf

-sh: wpa_passphrase: Permission denied

解决方法:

>: ll wpa_passphrase

-rw-r--r--    1 root     root        474555 Dec 31 17:06 wpa_passphrase

>: chmod 777 wpa_passphrase

>: ll wpa_passphrase

-rwxrwxrwx    1 root     root        474555 Dec 31 17:06 wpa_passphrase

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的雷神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值