基于fl2440 开发板rt3070芯片工作在station模式


---------------------------------------------------------------------------------------------------------------------------------

交叉编译器:arm-linux-gcc-4.5.4

linux内核版本:linux-3.0

开发板:飞凌2440

作者:guanlei<995318056@qq.com>

---------------------------------------------------------------------------------------------------------------------------------


 一  :内核配置

     参考的朋友注意:本文章是在2440开发板已经成果移植linux-3.0内核,usb驱动移植,DM9000网卡驱动和读写的文件系统,这里使用的是jffs2.

     从linux-3.0开始,RT3070的STA驱动已经作为正式版本加入了Linux内核源码中,本篇文章主要介绍如何在内核中编译支持RT3070的STA模式驱动,并连接到我的无线路由器上去。

     下面的在配置linux3.0内核支持rt3070,在内核中的menuconfig选中重要的一些配置。

[*] Networking support  --->

         -*-   Wireless  --->

              <*>   cfg80211 - wireless configuration API

              [ ]     nl80211 testmode command

              [ ]     enable developer warnings

              [ ]     cfg80211 regulatory debugging

              [*]     enable powersave by default

              [ ]     use statically compiled regulatory rules database

              [ ]     cfg80211 wireless extensions compatibility

              <*>   Common routines for IEEE802.11 drivers

              [ ]   lib80211 debugging messages

              <*>   Generic IEEE 802.11 Networking Stack (mac80211)

              [ ]   PID controller based rate control algorithm

              [*]   Minstrel

              [*]     Minstrel 802.11n support

                    Default rate control algorithm (Minstrel)  --->

              [ ]   Enable mac80211 mesh networking (pre-802.11s) support

              [ ]   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

[*] Network device support  --->

          [*]   Wireless LAN  --->

             <*>   Ralink driver support  --->

                   --- 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

二:插入RT2070无线网卡并加载新内核启动

>: usb 1-1.4: new full speed USB device number 5 using s3c2410-ohci
usb 1-1.4: New USB device found, idVendor=13d3, idProduct=3273
usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1.4: Product: 802.11 n WLAN
usb 1-1.4: Manufacturer: Ralink
usb 1-1.4: SerialNumber: 1.0
phy1 -> rt2x00_set_chip: Info - Chipset detected - rt: 3070, rf: 0005, rev: 0201.


>: ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr E0:B9:A5:41:9B:4D  
          UP 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地址)

第三,四行:接收、发送数据包情况统计

最后一行:接收、发送数据字节数统计信息

注意:这时伱敲ifconfig wlan0 up会出现错误

 >: 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

    按照上的错误信息我们可以知道缺少了 rt2870.bin,因为RT3070的驱动还需要rt2870.bin这个系统固件(firmware)

 解决办法:Linux内核官方站点下载rt2870.bin这个系统固件

 git clone git://git.kernel.org/pub/scm/linux/kernel/git/dwmw2/linux-firmware.git

 把那个系统固件下载到我们的开发板,

 >: tftp -gr rt2870.bin 192.168.1.110
  rt2870.bin           100% |*******************************|  8192   0:00:00 ETA

    把他放在/lib/firmware中这时再敲ifconfig wlan0 up

>:ifconfig wlan0 up
phy2 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy2 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
phy2 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
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: 5, CWmax: 10, Aifs: 7, TXop: 0.


三:无线网络配置工具Wireless tools和Wpa_supplicant以及Openssl移植

---------------------------------------------------------------------------------------------------------------------------------------------------------------

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

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

(1)wireless_tools.29.tar.gz:    下载地址如下http://www.linuxfromscratch.org/blfs/view/svn/basicnet/wireless_tools.html

 #tar zxvf wireless_tools.29.tar.gz
 #cd  wireless_tools.29

(2)修改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
(3)#make

[guanlei@centos6 wireless_tools.29]$ ls
19-udev-ifrename.rules  iftab.5     iwgetid.8  iwmulticall.c  Makefile                  wireless.15.h
CHANGELOG.h             INSTALL     iwgetid.c  
iwpriv        PCMCIA.txt                wireless.16.h
COPYING                
iwconfig    iwgetid.d  iwpriv.8       README                    wireless.17.h
cs                      iwconfig.8  iwgetid.o  iwpriv.c       README.fr                 wireless.18.h
DISTRIBUTIONS.txt       iwconfig.c  iwlib.c    iwpriv.d       sample_enc.c              wireless.19.h
fr                      iwconfig.d  iwlib.d    iwpriv.o       sample_pm.c               wireless.20.h
HOTPLUG.txt             iwconfig.o  iwlib.h    iwspy          sample_priv_addr.c        wireless.21.h
ifrename                iwevent     iwlib.so   iwspy.8        udev.import_devpath.diff  wireless.22.h
ifrename.8              iwevent.8  
iwlist     iwspy.c        wireless.10.h             wireless.7
ifrename.c              iwevent.c   iwlist.8   iwspy.d        wireless.11.h             wireless.h
ifrename.d              iwevent.d   iwlist.c   iwspy.o        wireless.12.h
ifrename.o              iwevent.o   iwlist.d  
libiw.so.29   wireless.13.h
IFRENAME-VS-XXX.txt     iwgetid     iwlist.o   macaddr.c      wireless.14.h

 会生成: iwlistiwconfigiwprivlibiw.so.29 把工具和库拷贝到你制作文件系统的/lib ,/bin目录下并修改权限chmod a+x iw* libiw.so.29

2.Openssl工具和wpa_supplicant工具驱动移植

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

以wpa_supplicant对我们来说除了配置无线网络的需求之外,它更主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的。而要加密就要使用到相关的加密算法,常用的密钥等,由于wpa_supplicant依赖openssl库,所以这里我们得先交叉编译openssl

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

下载openssl源代码:http://download.csdn.net/detail/u010944778/8918317

[guanlei@centos6 openssl-0.9.8i]$ mkdir install     //编译的文件放在这个文件中

29 INSTALLTOP=/home/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8i/install //指定ssl的安装目录
32 OPENSSLDIR=/home/guanlei/fl2440/3rdparty/rt3070/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

完成上面的步骤之后。下面就要编译了:

#sudo make 

#sudo make install (这里一定要用root权限,否者会出错,显示权限不够)

#ls install/lib/
engines libcrypto.a libssl.a pkgconfig

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


 3 下载wpa_supplicant源码

http://w1.fi/releases/ 

#tar -xzf wpa-supplicant-0.7.3.tar.gz

[guanlei@centos6 wpa_supplicant-0.7.3]$ ls
COPYING  patches  README  src  wpa_supplicant
[guanlei@centos6 wpa_supplicant-0.7.3]$ cd wpa_supplicant/

[guanlei@centos6 wpa_supplicant-0.7.3] cp defconfig .config

[guanlei@centos6 wpa_supplicant-0.7.3]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/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8i/install/lib
29 #CFLAGS += -Os
30 CFLAGS += -I/home/guanlei/fl2440/3rdparty/rt3070/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/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8i/install/lib

修改之后下边就是编译

#make

[guanlei@centos6 wpa_supplicant]$ ls
ap.c             config.o                 events.c          preauth_test.c      wpa_gui-qt4
ap.h             config_ssid.h            events.d          README              wpa_passphrase
bgscan.c         config_winreg.c          events.o          README-Windows.txt  wpa_passphrase.c
bgscan.h         ctrl_iface.c             examples          README-WPS          wpa_passphrase.d
bgscan_simple.c  ctrl_iface.d             ibss_rsn.c        scan.c              wpa_passphrase.o
blacklist.c      ctrl_iface.h             ibss_rsn.h        scan.d              wpa_priv.c
blacklist.d      ctrl_iface_named_pipe.c  main.c            scan.h              wpas_glue.c
blacklist.h      ctrl_iface.o             main.d            scan.o              wpas_glue.d
blacklist.o      ctrl_iface_udp.c         main_none.c       sme.c               wpas_glue.h
bss.c            ctrl_iface_unix.c        main.o            sme.h               wpas_glue.o
bss.d            ctrl_iface_unix.d        main_symbian.cpp  symbian             wpa_supplicant
bss.h            ctrl_iface_unix.o        main_winmain.c    tests               wpa_supplicant.c
bss.o            dbus                     main_winsvc.c     todo.txt            wpa_supplicant.conf
ChangeLog        defconfig                Makefile          vs2005              wpa_supplicant.d
config.c         doc                      mlme.c            win_example.reg     wpa_supplicant_i.h
config.d         driver_i.h               mlme.h            win_if_list.c       wpa_supplicant.nsi
config_file.c    eapol_test.c             nmake.mak         wpa_cli             wpa_supplicant.o
config_file.d    eap_register.c           notify.c          wpa_cli.c           wps_supplicant.c
config_file.o    eap_register.d           notify.d          wpa_cli.d           wps_supplicant.h
config.h         eap_register.o           notify.h          wpa_cli.o           xcode
config_none.c    eap_testing.txt          notify.o          wpa_gui
[guanlei@centos6 wpa_supplicant]$ 

安装上面交叉编译出来的一些二进制可执行文件到ARM开发板上边的(上边的绿色文件就是要用的)

下面都是在开发板上完成的 


我要用上的wpa_passphrase 工具来生成 wpa_supplicant.conf配置文件 

    wpa_passphrase ssid psk>>wpa_supplicant.conf  (ssid就是你wifi的名字 psk就是密码)

>: wpa_passphrase dashen xiguashaung  >> wpa_supplicant.conf  (我把密码都暴露出去了!!)

修改后的配置文件如下:cat /apps/etc/wireless/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="dashen"
        key_mgmt=WPA-PSK  // 加密模式 这里一定要和的你要连的歪坏保持一致
        proto=WPA
        pairwise=TKIP  CCMP
        #group=TKIP  CCMP //我把这里注释掉了,我的会莫名的出错。。。现在还不清楚原因 
        psk="xiguashuang"  //这里我是使用的明文,你也可以使用加密之后的
        #psk=f7c429c4e6d7e83ab648c83409ccffc53b331b58bfb69b5f6a35fa10c45cf8bf
}


鸡冻人心的时候到了!!开始连接了

   wpa_supplicant来连接无线路由器       

                      

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


Trying to associate with c8:e7:d8:08:b4:5a (SSID='dashen' freq=2462 MHz)
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 4, CWmax: 10, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 4, CWmax: 10, Aifs: 7, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 94.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 2, CWmax: 3, Aifs: 2, TXop: 47.
Associated with c8:e7:d8:08:b4:5a
WPA: Key negotiation completed with c8:e7:d8:08:b4:5a [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to c8:e7:d8:08:b4:5a completed (auth) [id=0 id_str=]


(ps 上面的过程有点慢 请慢慢等待)

>: iwconfig 

lo        no wireless extensions.


eth0      no wireless extensions.


wlan0     IEEE 802.11bgn  ESSID:"dashen"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: C8:E7:D8:08:B4:5A   
          Bit Rate=54 Mb/s   Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
          Link Quality=51/70  Signal level=-59 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:15  Invalid misc:25   Missed beacon:0



配置一下无线网卡IP和子网掩码:

>:ifconfig wlan0 192.168.1.244 broatcast 192.168.1.1 netmask 255.255.255.0 up

这时你还可以测试一下 ping一下自己的主机  我的ip:192.168.1.102

>: ifconfig eth0 down

>: ping 192.168.1.102

PING 192.168.1.102 (192.168.1.102): 56 data bytes

64 bytes from 192.168.1.102: seq=0 ttl=64 time=11.123 ms

64 bytes from 192.168.1.102: seq=1 ttl=64 time=3.467 ms


如果你想上外网,那么就要给开发板添加DNS域名解析服务!还有添加默认网关!

想ping外网的pay attention !!!

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


>: vi resolv.conf 


#search localdomain
nameserver 4.2.2.2
nameserver 8.8.8.8
~
使能source resolv.conf

添加网关

>:route add default gw 192.168.1.1

现在就开始ping baidu!!!

>: ping www.baidu.com
PING www.baidu.com (103.235.46.39): 56 data bytes
64 bytes from 103.235.46.39: seq=0 ttl=50 time=303.388 ms
64 bytes from 103.235.46.39: seq=1 ttl=50 time=433.364 ms
64 bytes from 103.235.46.39: seq=2 ttl=50 time=450.342 ms


--- www.baidu.com ping statistics ---

文章并未完结,预知后事如何请看下次详解


                     















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值