Cross compiler:arm-linux-gcc-4.5.4
Linux kernel version:linux-3.0
Development board:fl2440
Author: Yuzhonghan <754270866@qq.com>
-----------------------------------------------------------------------
在Linux-3.0内核里,RT3070的STA驱动已经作为正式版本加入了Linux内核源码中了(从Linux-2.6.32开始以实验版本加入Linux内核中)。
本篇文章主要介绍如何在内核中编译支持RT3070的STA驱动,并连接到我的无线路由器上去。
1.配置Linux-3.0内核支持RT3070,我们以make menuconfig的方式将RT3070的驱动集成到内核里去
[*] 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
2.插入RT2070无线网卡并加载新内核启动
>: usb 1-1.2: new full speed USB device number 8 using s3c2410-ohci
phy1 -> rt2x00_set_chip: Info - Chipset detected - rt: 3070, rf: 0005, rev: 0201.
>: ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 00:24:25:50:A9:4D
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)
3.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.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.
4.无线网络配置工具Wireless tools和Wpa_supplicant以及Openssl移植
(1)wireless_tools.29.tar.gz:
下载地址如下http://www.linuxfromscratch.org/blfs/view/svn/basicnet/wireless_tools.htm
解压后修改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
之后进行 make 会得到下列文件:
[Ciel@localhost wireless_tools.29]$ ls
19-udev-ifrename.rules ifrename.8 iwconfig.8 iwevent.o iwlib.h iwpriv iwspy.d sample_enc.c wireless.14.h wireless.22.h
CHANGELOG.h ifrename.c iwconfig.c iwgetid iwlib.so iwpriv.8 iwspy.o sample_pm.c wireless.15.h wireless.7
COPYING ifrename.d iwconfig.d iwgetid.8 iwlist iwpriv.c libiw.so.29 sample_priv_addr.c wireless.16.h wireless.h
cs ifrename.o iwconfig.o iwgetid.c iwlist.8 iwpriv.d macaddr.c udev.import_devpath.diff wireless.17.h
DISTRIBUTIONS.txt IFRENAME-VS-XXX.txt iwevent iwgetid.d iwlist.c iwpriv.o Makefile wireless.10.h wireless.18.h
fr iftab.5 iwevent.8 iwgetid.o iwlist.d iwspy PCMCIA.txt wireless.11.h wireless.19.h
HOTPLUG.txt INSTALL iwevent.c iwlib.c iwlist.o iwspy.8 README wireless.12.h wireless.20.h
ifrename iwconfig iwevent.d iwlib.d iwmulticall.c iwspy.c README.fr wireless.13.h wireless.21.h
生成的 iwlist、iwconfig、iwpriv,libiw.so.29 把工具和库拷贝到你的开发板的/lib ,/bin目录下并修改权限chmod a+x iw* libiw.so.29
(2)下载openssl源代码:http://download.csdn.net/detail/u010944778/8918317
$ 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 install (这里一定要用root权限,否者会出错,显示权限不够)
#ls install/lib/
engines libcrypto.a libssl.a pkgconfig
将 libcrypto.a libssl.a 放到你的开发板的 /lib 目录下
>: tftp -gr libssl.a 192.168.1.2
libssl.a 100% |*******************************| 359k 0:00:00 ETA
>: tftp -gr libcrypto.a 192.168.1.2
libcrypto.a 100% |*******************************| 2162k 0:00:00 ETA
(3)下载wpa_supplicant源码
http://w1.fi/releases/
#tar -xzf wpa-supplicant-0.7.3.tar.gz
[Ciel@localhost wpa]$ cd wpa_supplicant-0.7.3
[Ciel@localhost wpa_supplicant-0.7.3]$ ls
COPYING patches README src wpa_supplicant
[Ciel@localhost wpa_supplicant-0.7.3]$ cd wpa_supplicant/
[Ciel@localhost wpa_supplicant-0.7.3]$ cp defconfig .config
[Ciel@localhost wpa_supplicant]$ vim .config
修改:
25 #### sveasoft (e.g., for Linksys WRT54G) ######################################
26 #CC=mipsel-uclibc-gcc
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/Ciel/fl2440/3rdparty/rt3070/openssl/install/lib
29 #CFLAGS += -Os
30 CFLAGS +=-I/home/Ciel/fl2440/3rdparty/rt3070/openssl/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/Ciel/fl2440/3rdparty/rt3070/openssl/install/lib
然后make 得到:
[Ciel@localhost wpa_supplicant]$ ls
ap.c ChangeLog ctrl_iface.h eap_register.d main_symbian.cpp README-Windows.txt win_if_list.c wpas_glue.d
ap.h config.c ctrl_iface_named_pipe.c eap_register.o main_winmain.c README-WPS wpa_cli wpas_glue.h
bgscan.c config.d ctrl_iface.o eap_testing.txt main_winsvc.c scan.c wpa_cli.c wpas_glue.o
bgscan.h config_file.c ctrl_iface_udp.c events.c Makefile scan.d wpa_cli.d wpa_supplicant
bgscan_simple.c config_file.d ctrl_iface_unix.c events.d mlme.c scan.h wpa_cli.o wpa_supplicant.c
blacklist.c config_file.o ctrl_iface_unix.d events.o mlme.h scan.o wpa_gui wpa_supplicant.conf
blacklist.d config.h ctrl_iface_unix.o examples nmake.mak sme.c wpa_gui-qt4 wpa_supplicant.d
blacklist.h config_none.c dbus ibss_rsn.c notify.c sme.h wpa_passphrase wpa_supplicant_i.h
blacklist.o config.o defconfig ibss_rsn.h notify.d symbian wpa_passphrase.c wpa_supplicant.nsi
bss.c config_ssid.h doc main.c notify.h tests wpa_passphrase.d wpa_supplicant.o
bss.d config_winreg.c driver_i.h main.d notify.o todo.txt wpa_passphrase.o wps_supplicant.c
bss.h ctrl_iface.c eapol_test.c main_none.c preauth_test.c vs2005 wpa_priv.c wps_supplicant.h
bss.o ctrl_iface.d eap_register.c main.o README win_example.reg wpas_glue.c xcode
将上面的绿色文件tftp到你的开发板上
5.在开发板上运行
在开发板上输入命令:wpa_passphrase ssid psk>>wpa_supplicant.conf (ssid就是你wifi的名字 psk就是密码)
修改你的配置文件:
>: 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
}
6.连接你的路由器:
>: 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=51.114 ms
64 bytes from 192.168.199.1: seq=1 ttl=64 time=56.285 ms
64 bytes from 192.168.199.1: seq=2 ttl=64 time=93.388 ms
64 bytes from 192.168.199.1: seq=3 ttl=64 time=45.505 ms
64 bytes from 192.168.199.1: seq=4 ttl=64 time=45.558 ms
64 bytes from 192.168.199.1: seq=5 ttl=64 time=49.961 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.218.70): 56 data bytes
64 bytes from 119.75.218.70: seq=0 ttl=53 time=24.659 ms
64 bytes from 119.75.218.70: seq=1 ttl=53 time=65.189 ms
64 bytes from 119.75.218.70: seq=2 ttl=53 time=65.130 ms
64 bytes from 119.75.218.70: seq=3 ttl=53 time=65.225 ms
这时你肯定有一点点的小激动了,其中一定还会有很多鬼畜的错误,不要着急,take easy!
这只是第一篇哦!