您的位置:首页 > 其它

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

2015-11-12 23:10 441 查看

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

交叉编译器: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-tools或wpa_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=[b]/home/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8i/install[/b]

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[b]/home/guanlei/fl2440/
3rdparty/rt3070/openssl-0.9.8i/install/lib[/b]

29 #CFLAGS += -Os

30 CFLAGS += -I[b]/home/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8i/install/include[/b]

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[b]/home/guanlei/fl2440/3rdparty/rt3070/openssl-0.9.8i/install/lib[/b]

修改之后下边就是编译
#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 ---



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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: