Linux 驱动开发:USB无线wifi驱动开发(MT7601)、完成WIFI管理工具安装

描述

开发环境说明

内核版本:3.5.0

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

PC 宿主机:红帽 REDHAT

一、移植 WIFI 驱动

当前采用的WIFI是360随身WIFI,这款随身WIFI所用的网卡芯片是 Ralink(雷凌科技) 的解决方案(在之前文章里也有详细介绍),芯片型号为 MT7601。 如果在PC计算机上使用这款随身WIFI那自然是简单,官网下载个驱动安装插上就能使用。 如果是在嵌入式平台,自动的平台上使用,官网就没有现成的驱动下载了,这种情况下就需要针对WIFI编写驱动。当然,从0开始写确实困难,不过这款芯片官方提供了linux下的驱动源码,这就好办了。只需要下载下来,编译就能使用了。

接下来这篇文章会详细介绍WIFI驱动从哪里下载,下载下来如何修改进行编译安装测试,并交叉编译对应的WIFI工具,最终完成WIFI的基本使用,完成IP地址动态分配,热点连接,热点扫描、热点信息查看等等。

1.1 下载 WIFI 驱动

下载链接:http://mediatek.com/zh-CN/downloads1/downloads/[](http://mediatek.com/zh-CN/downloads1/downloads/)usb

usb

直接下载链接

http://s3.amazonaws.com/mtk.cfs/Downloads/linux/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2[](http://s3.amazonaws.com/mtk.cfs/Downloads/linux/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2)

usb

1.2配置编译驱动

将下载的驱动压缩包拷贝到虚拟机,解压。(为了好分类,最好单独创建一个文件夹存放)

1.2.1 解压

[root@XiaoLong 360_WIFI]# tar xvf DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2

usb

usb

1.2.2 修改运行环境

进入到解压的目录下,修改顶层 Makefile,驱动默认的运行环境为 X86,需要注释掉。

[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# gedit Makefile +3030 行加上注释:#PLATFORM = PC 第 49 行取消注释:LATFORM = SMDK

usb

1.2.3 修改编译环境

[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# gedit Makefile +275
ifeq ($(PLATFORM),SMDK)

LINUX_SRC = /work/linux3.5/linux-3.5 内核路径 CROSS_COMPILE = arm-linux- 交叉编译器 endif

usb

1.2.4 查看 USB 的 ID

USB 芯片的 ID,需要用作匹配作用!相当于平台设备的驱动端与设备端一样,插入了 USB 之后,USB 控制器需要对插入的 USB 进行访问,确认是否是 WIFI 芯片。确定的凭证就是 ID 号

查看 USB ID 的方法:

在虚拟机环境下,输入 lsusb 先查看已经存在的 USB 设备:

usb

查看之后,再插入 360WIFI,再次输入 lsusb 查看存在的 USB 设备。

注意: 默认 360WIFI 会被 windows 挂载,需要手动点击虚拟机右下脚的 USB 图标将 360WIFI 挂载进来。

usb

挂载进来之后,查看的结果:

usb

由上面可以看出,360WIFI 的设备 ID 分别是:148f 和 760b。

1.2.5 添加 USB ID

添加 USB 的 ID 需要修改 common 目录下的 rtusb_dev_id.c 文件,该文件里有一个存放 ID 的结构体,我们需要将上一步得到的 360WIFI 的 ID 添加到结构体中。

[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# cd common/

[root@XiaoLong common]# gedit rtusb_dev_id.c +37

添加的格式:

{USB_DEVICE(0x148f,0x760b)}, //添加 360wifi 的设备 ID

usb

1.2.6 去除调试信息

为什么去除调试信息呢?因为在终端调试代码的时候,驱动会不断的向终端打印信息,导致没法敲打命令,所以需要将其注释掉。去除调试信息需要进入到 include/os/目录下,修改 rt_linux.h 文件的 1558 行。

[root@XiaoLong DPO_MT7601U_LinuxSTA_3.0.0.4_20130913]# cd include/os/

[root@XiaoLong os]# gedit rt_linux.h +1558
#include "os/rt_os.h"

#undef DBGPRINT //添加这两句话 去除调试打印输出

#define DBGPRINT(...)

#endif /* __RT_LINUX_H__ */

usb

1.2.7 编译源码

修改完之后,编译源码,生成驱动文件。 (需要在解压的顶层目录下输入 make) 编译成功后,会在 os/linux/目录下生成 mt7601Usta.ko 文件。

usb

1.2.8 修改 U-BOOT 启动代码

启动 u-bootd 的时候先进入 U-BOOT 命令行,设置 UBOOT 环境变量,在之前的环境变量后加一句 coherent_pool=2M。

coherent_pool=2M 表示设置 DMA 的缓冲区大小。如果不设置 DMA 缓冲区大小,装载 360WIFI 驱动的时候会报错。

设置UBOOT环境变量代码如下:(注意:下边代码是一行,不能有换行符出现)

set bootargs root=/dev/nfs nfsroot=192.168.18.3:/work/nfs_root ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off console=ttySAC0,115200 lcd=s70 coherent_pool=2M init=/linuxrc

usb

1.2.9 测试 WIFI 驱动

将生成的 mt7601Usta.ko 驱动文件拷贝到开发板目录下,安装。安装成功之后,将 360WIFI 插入到开发板的 USB 口中,观察弹出的测试信息。

[root@XiaoLong /360_WIFI]# insmod mt7601Usta.ko

usb

如果识别成功,会出现以下的提示信息:usb

1.3.0 拷贝 WIFI 启动配置文件

将 RT2870STA.dat 拷贝至开发板 /etc/Wireless/RT2870STA/目录下。

(没有目录就创建一个); mkdir /etc/Wireless/RT2870STA usb

二、移植 WIFI 配置工具

2.1 移植wireless_tools

Wireless tools for Linux是一个Linux命令行工具包,用来设置支持Linux Wireless Extension的无线设备。Wireless tools for Linux 和 Linux Wireless Extension 由 Jean Tourrilhes在维护,由Hewlett-Packard(HP惠普)赞助。

大多数基于Linux内核的操作系统都包含Wireless tools。在许多GNU/Linux 发行版中,都缺省安装这个工具包,即使是没有自动安装,也能很容易地找到其二进制代码安装包。

Wireless Extension (WE)是一组通用的API,能在用户空间对通用Wireless LANs进行配置和统计。它的好处在于仅通过一组单一的工具就能对各种各样的Wireless LANs进行管理,不过它们是什么类型,只要其驱动支持Wireless Extension就行;另一个好处就是不用重启驱动或Linux就能改变这些参数。

Wireless Tools (WT)就是用来操作Wireless Extensions的工具集,它们使用字符界面,虽然粗糙,但支持所有Wireless Extension。虽然还有很多其他管理Wireless Extensions的工具,但Wireless Tools是参考实现,它包括以下工具:

iwconfig:设置基本无线参数

iwlist:扫描、列出频率,比特率,密钥等

iwspy:获取每个节点链接的质量(只能查阅与之相连的节点)

iwpriv:操作Wireless Extensions 特定驱动

ifrename: 基于各种静态标准命名接口

大多数 Linux 发行版本都在其网络初始化脚本中集成Wireless Extension,以便启动时配置无线接口。他们还将Wireless Tools作为其标准封装包。

2.1.1 下载地址

下载地址:

http://www.labs.hpe.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz[](http://www.labs.hpe.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz)

usb

2.1.2 解压配置

(1)解压

[root@xiaolong 360wifi]# tar xvf wireless_tools.29.tar.gz

[root@xiaolong 360wifi]# cd wireless_tools.29

(2)修改 Makefile

[root@xiaolong wireless_tools.29]# gedit Makefile 大约 12 行和 14 行

12 CC = arm-linux-gcc

14​ R = arm-linux-ar

(3)​ 编译

[root@xiaolong wireless_tools.29]# make

usb(4) 拷贝文件

拷贝 libiw.so.29 文件到目标系统 rootfs/usr/lib/目录




拷贝用到的几个程序到目标板 rootfs/usr/lib/bin/目录

iwpriv、iwconfig、iwlist, iwevent, iwspy




至此 wireless_tools 移植完成




有可能出现的错误:

在到产品板上还可能出现 can't resolve symbol '__ctype_b_loc' 错误




去掉 iwlib.h 中这一行重新编译即可

#include < ctype.h >

2.1.3 工具使用方法

1. 启动网卡:

ifconfig ra0 up

2. 关闭网卡:

ifconfig ra0 down

3. 扫描周围的 wifi 信息:

iwlist ra0 scan

4. 查看无线网卡的信息(比如:网卡名称,已经连接上的 WIFI 等):

iwconfig

5. 我们经常会用到的主要是 iwlistiwconfigiwpriv(没有全部测试过)

命令行:(连接不需要验证密码的热点)

iwlist mlan0 scan //搜索热点信息

ap iwconfig mlan0 essidlinksys//连接热点

udhcpc -i mlan0 //获得动态 IP

命令行:(连接需要验证密码的热点)

iwlist mlan0 scan //搜索热点信息

ap iwconfig mlan0 key xxxxxxxxxx //输入验证密码

iwconfig mlan0 key open //密码验证功能打开

iwconfig mlan0 essidlinksys//连接热点

udhcpci mlan0 //获得动态 IP

3.1 移植 wap_supplicant 工具

目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。

wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。请浏览wpa_supplicant网站获得它所支持的驱动列表。另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络,它可以让您连接到那些使用WPA的AP。wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP。

关于WPA:

WPA是WiFi Protected Access的缩写,中文含义为“WiFi网络安全存取”。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。

wpa_supplicant是一个开源项目,已经被移植到Linux,Windows以及很多嵌入式系统上。它是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。

wpa_supplicant是一个 独立运行的 守护进程,其核心是一个消息循环,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。

经过编译后的 wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关:

后台运行wpa_supplicant,使用 wpa_cli来搜索、设置、和连接网络。

3.1.1 wap_supplicant 简介

在 Linux 移植 iw 工具的时候,我们讲过 iw 支持两种“认证/加密”的方式,这两种方式分别为:open 与 wep。但是现在很多的无线加密方法都是以 wpa 与 wpa2(AES)方式加密的。那么这里就出现了 iw 工具不能再 wpa 与 wpa2 的无线加密上使用。因此接下来移植一个 wpa_supplicant 的工具:这个工具支持上面介绍到的四种方式:

1open

2WEP

3WPA(TKJP)

4WAP2(AES)

3.1.2 移植 libopenssl 库

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。OpenSSL漏洞不仅影响以https开头的网站,黑客还可利用此漏洞直接对个人电脑发起“心脏出血”(Heartbleed)攻击。据分析,Windows上有大量软件使用了存在漏洞的OpenSSL代码库,可能被黑客攻击抓取用户电脑上的内存数据。

下载链接:http://distfiles.macports.org/openssl/[](http://distfiles.macports.org/openssl/)

usb

1.​ 将下载的 openssl-1.0.2e.tar.gz 压缩包拷贝至虚拟机解压。

[root@XiaoLong 360_WIFI]# tar xvf openssl-1.0.2e.tar.gz

2.​ 配置编译安装的路径

[root@XiaoLong openssl-1.0.2e]# ./config shared no-asm --prefix=$PWD/tmp

--prefix=$PWD/tmp 表示编译安装的路径为当前目录下的 tmp


3.​ 修改顶层 Makefile

[root@XiaoLong openssl-1.0.2e]# gedit Makefile +62


62 CC= arm-linux-gcc

AR= arm-linux-ar $(ARFLAGS) r

RANLIB= arm-linux-ranlib

NM= arm-linux-nm

75​ AKEDEPPROG= arm-linux-gcc

usb

usb

4.​ 编译

[root@XiaoLong openssl-1.0.2e]# make

usb

5.​ 安装

[root@XiaoLong openssl-1.0.2e]# make DESTDIR=$PWD/tmp install

3.1.3 拷贝生成的文件

(1)将安装目录下(tmp/include)的头文件拷贝到交叉编译器的 include 目录下

[root@XiaoLong openssl-1.0.2e]# cp tmp/include/* /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include/ -rf

(2) 将编译生成 lib 库拷贝一份到开发板根文件系统 lib 目录下

[root@XiaoLong tmp]# pwd

/work/360_WIFI/openssl-1.0.2e/tmp

[root@XiaoLong tmp]# ls bin include lib openssl-1.0.2e.tmp.tar ssl

[root@XiaoLong tmp]# cp lib/* /work/nfs_root/lib/ -rf -d

(3) 将编译生成的 lib 库拷贝到交叉编译器的 lib 目录下

[root@XiaoLong openssl-1.0.2e]#

cp tmp/lib/* /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/ -rf -d

usb

3.1.4 移植 wpa_supplicant : 可用于上述 4 种"认证/加密"的库

下载链接:http://w1.fi/wpa_supplicant/[](http://w1.fi/wpa_supplicant/)

(1)将下载好的压缩包拷贝至虚拟机解压

[root@XiaoLong 360_WIFI]# tar xvf wpa_supplicant-2.5.tar.gz

(2) 加载配置文件

[root@XiaoLong wpa_supplicant-2.5]# cd wpa_supplicant/

[root@XiaoLong wpa_supplicant]# cp defconfig .config

(3)修改配置文件

[root@XiaoLong wpa_supplicant]# gedit .config


增加以下代码:

CC=arm-linux-gcc

CFLAGS += -I/work/360_WIFI/openssl-1.0.2e/tmp/include

LIBS +=-L/work/360_WIFI/openssl-1.0.2e/tmp/lib

CFLAGS += -I /work/360_WIFI/libnl-3.2.25/tmp/include/libnl3

LIBS += -L /work/360_WIFI/libnl-3.2.25/tmp/lib

CONFIG_LIBNL32=y

usb

usb

(4)编译

[root@XiaoLong wpa_supplicant]# make

usb

(5)安装

[root@XiaoLong wpa_supplicant]#make DESTDIR=$PWD/tmp install

(6)拷贝生成的可执行文件到开发板的 sbin 目录下--路径 /tmp/usr/local/sbin

[root@XiaoLong sbin]# pwd

/work/360_WIFI/wpa_supplicant-2.5/wpa_supplicant/tmp/usr/local/sbin

[root@XiaoLong sbin]# cp ./* /work/nfs_root/sbin/

(7)​ 拷贝生成的可执行文件到开发板的 bin 目录下

[root@XiaoLong sbin]# ls wpa_cli wpa_passphrase wpa_supplicant

[root@XiaoLong sbin]# cp ./* /work/nfs_root/bin/

4.1 测试使用 WIFI 步骤

4.1.1 创建密码配置文件

在开发板根文件系统/etc/目录创建 wpa_supplicant.conf 文件 ,输入以下内容:

# WPA-PSK/TKIP

ctrl_interface=/var/run/wap_supplicant ap_scan=1 update_config=1

network={

ssid="208"

key_mgmt=WPA-PSK

proto=WPA

pairwise=TKIP CCMP

group=TKIP CCMP #

priority=2

psk="www.linux.com"

}

4.1.2 创建网卡控制接口

在开发板终端输入:

[root@XiaoLong /]#mkdir /var/run/wap_supplicant -p

4.1.3 插入 360wifi 测试

360WIFI 插入开板 USB 口,安装 WIFI 驱动:

[root@XiaoLong /driver/360wifi]# insmod mt7601Usta.ko

[ 47.260000] rtusb init rt2870 --- >

[ 47.260000] usbcore: registered new interface driver rt2870

[ 94.105000] usb 1-2.2: new high-speed USB device number 7 using s5p-ehci

[ 94.220000] usb 1-2.2: New USB device found, idVendor=148f, idProduct=760b

[ 94.220000] usb 1-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[ 94.220000] usb 1-2.2: Product: 802.11 n WLAN

[ 94.220000] usb 1-2.2: Manufacturer: MediaTek

[ 94.220000] usb 1-2.2: SerialNumber: 1.0

[ 94.225000] < -- RTMPAllocTxRxRingMemory, Status=0

[ 94.230000] < -- RTMPAllocAdapterBlock, Status=0

[ 94.235000] BULK IN MaxPacketSize = 512 [ 94.235000] EP address = 0x84

[ 94.240000] BULK IN MaxPacketSize = 512

[ 94.245000] EP address = 0x85

[ 94.245000] BULK OUT MaxPacketSize = 512 [ 94.250000] EP address = 0x 8

[ 94.255000] BULK OUT MaxPacketSize = 512 [ 94.255000] EP address = 0x 4

[ 94.260000] BULK OUT MaxPacketSize = 512 [ 94.265000] EP address = 0x 5

[ 94.265000] BULK OUT MaxPacketSize = 512 [ 94.270000] EP address = 0x 6

[ 94.275000] BULK OUT MaxPacketSize = 512

[ 94.280000] EP address = 0x 7

[ 94.280000] BULK OUT MaxPacketSize = 512

[ 94.285000] EP address = 0x 9

查看识别成功的网卡:

[root@XiaoLong /driver/360wifi]# iwconfig lo no wireless extensions.

ra0 Ralink STA sit0 no wireless extensions.

eth0 no wireless extensions.

ip6tnl0 no wireless extensions.

4.1.4 启动网卡

[root@XiaoLong /]# wpa_supplicant -Dwext -ira0 -c /etc/wpa_supplicant.conf -B

[ 257.765000] Current MAC: =00:87:46:19:8f:eb

[ 257.780000] NICReadEEPROMParameters: RxPath = 1, TxPath = 1

[ 257.790000] 20MHz BW, 2.4G band-03030505, Adata = 03030505, Gdata = 03030505 [ 257.790000] 20MHz BW, 2.4G band-00000004, Adata = 00000004, Gdata = 00000004

[ 257.795000] 20MHz BW, 2.4G band-00000002, Adata = 00000002, Gdata = 00000002

[ 257.800000] 20MHz BW, 2.4G band-00000002, Adata = 00000002, Gdata = 00000002

[ 257.800000] 20MHz BW, 2.4G band-ffff0002, Adata = ffff0002, Gdata = ffff0002

[ 258.020000] BuildChannel # 1 :: Pwr0 = 16, Pwr1 =0, Flags = 0

BuildChannel # 2 :: Pwr0 = 16, Pwr1 =0, Flags = 0

BuildChannel # 3 :: Pwr0 = 16, Pwr1 =0, Flags = 0

BuildChannel # 4 :: Pwr0 = 16, Pwr1 =0, Flags = 0

BuildChannel # 5 :: Pwr0 = 17, Pwr1 =0, Flags = 0

BuildChannel # 6 :: Pwr0 = 17, Pwr1 =0, Flags = 0

BuildChannel # 7 :: Pwr0 = 17, Pwr1 =0, Flags = 0

BuildChannel # 8 :: Pwr0 = 17, Pwr1 =0, Flags = 0

BuildChannel # 9 :: Pwr0 = 17, Pwr1 =0, Flags = 0

BuildChannel # 10 :: Pwr0 = 18, Pwr1 =0, Flags = 0

BuildChannel # 11 :: Pwr0 = 18, Pwr1 =0, Flags = 0

BuildChannel # 12 :: Pwr0 = 18, Pwr1 =0, Flags = 0

BuildChannel # 13 :: Pwr0 = 18, Pwr1 =0, Flags = 0

BuildChannel # 14 :: Pwr0 = 18, Pwr1 =0, Flags = 0

<==== rt28xx_init, Status=0

[ 258.075000] 0x1300 = 00064300

[root@XiaoLong /]# [ 260.380000] RSN_IE: f0b15003, len = 24

[ 260.380000] 0x0000 : dd 16 00 50 f2 01 01 00 00 50 f2 04 01 00 00 50

[ 260.380000] 0x0010 : f2 04 01 00 00 50 f2 02

[ 260.545000] Key = 71:62:76:2d:90:f1:7d:e4:76:57:c0:c7:e4:a8:fa:a8

[ 260.545000] Rx MIC Key = 00:00:00:00:00:00:00:00 [ 260.545000] Tx MIC Key = 00:00:00:00:00:00:00:00

出现上面红色部分的提示表示连接路由器成功!!

4.1.5 查看连接成功的 WIFI 信息

[root@XiaoLong /]# iwconfig lo no wireless extensions.

ra0 Ralink STA ESSID:"208" Nickname:"MT7601STA" 连接模式是 STA,连接上的路由器名称是 208

Mode:Managed Frequency=2.437 GHz Access Point: D0:C7:C0:D4:84:12

Bit Rate=135 Mb/s

RTS thr:off Fragment thr:off

Encryption key:7162-762D-90F1-7DE4-7657-C0C7-E4A8-FAA8 [3] Security mode:restricted Security mode:open

Link Quality=100/100 Signal level:-27 dBm Noise level:-27 dBm

Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0

Tx excessive retries:0 Invalid misc:0 Missed beacon:0

4.1.6 配置网卡地址信息

① [root@XiaoLong /]# ifconfig ra0 192.168.18.123 broadcast 192.168.18.255 netmask 255.255.0.0 up




② [root@XiaoLong /]# ifconfig ra0

Link encap:Ethernet HWaddr 00:87:46:19:8F:EB inet addr:192.168.18.123 Bcast:192.168.255.255 Mask:255.255.0.0 配置成功 inet6 addr: fe80::287:46ff:fe19:8feb/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:124367 errors:0 dropped:0 overruns:0 frame:0 TX packets:175 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000

RX bytes:26249317 (25.0 MiB) TX bytes:10673 (10.4 KiB)

4.1.6 配置网卡地址信息

[root@XiaoLong /]# ifconfig ra0 192.168.18.123 broadcast 192.168.18.255 netmask 255.255.0.0 up[root@XiaoLong /]# ifconfig ra0

Link encap:Ethernet HWaddr 00:87:46:19:8F:EB inet addr:192.168.18.123 Bcast:192.168.255.255 Mask:255.255.0.0 配置成功 inet6 addr: fe80::287:46ff:fe19:8feb/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:124367 errors:0 dropped:0 overruns:0 frame:0 TX packets:175 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000

RX bytes:26249317 (25.0 MiB) TX bytes:10673 (10.4 KiB)

4.1.7 配置网关信息

[root@XiaoLong /]# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ra0

查看路由表信息:

[root@XiaoLong /]# iproute

192.168.0.0/16 dev ra0 src 192.168.18.123

如果没有无线网卡的网关信息,需要自己添加一个:

[root@XiaoLong /]# route add default gw 192.168.18.1

4.1.8 ping 外网 IP 测试

前提是当前连接的 WIFI 可以连接互联网。

202.108.22.5 是百度的 IP 地址。

[root@XiaoLong /]# ping 202.108.22.5

PING 202.108.22.5 (202.108.22.5): 56 data bytes

64 bytes from 202.108.22.5: seq=0 ttl=51 time=51.431 ms

64 bytes from 202.108.22.5: seq=1 ttl=51 time=44.511 ms

64 bytes from 202.108.22.5: seq=2 ttl=51 time=95.936 ms 64 bytes from 202.108.22.5: seq=3 ttl=51 time=46.402 ms

4.1.9 实现 ping 域名

在/etc/目录下创建一个 resolv.conf 文件,输入 DNS 地址,如下:

nameserver 192.168.1.1 nameserver 202.96.134.33

说明:一般写本地网关就可以了,也就是保留 nameserver 192.168.1.1

也可以直接在串口终端使用命令创建并且写入内容。如下:

[root@XiaoLong /]# echo nameserver 192.168.1.1 > > /etc/resolv.conf

[root@XiaoLong /]# echo nameserver 202.96.134.33 > > /etc/resolv.conf

开发板中要想 ping 通外网 IP,需要设置默认网关,这个网关必须要和所连接的路由器设置的网关相同(resolv.conf 文件内容一般可以自动获取,不用手动填)。

ping 百度示例:

[root@XiaoLong /]# ping www.baidu.com

[ 2742.105000] CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = 1, SetTid = 400000, DeleteTid = ffffffff.

[ 2742.105000] 1-MACValue= d4c0c7d0,

[ 2742.105000] 2-MACValue= 411284,

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

64 bytes from 119.75.218.70: seq=0 ttl=51 time=55.509 ms 64 bytes from 119.75.218.70: seq=1 ttl=51 time=53.253 ms 64 bytes from 119.75.218.70: seq=2 ttl=51 time=62.990 ms

64 bytes from 119.75.218.70: seq=3 ttl=51 time=44.665 ms

4.2.0 自动获取 IP 地址

使用 busybox 的 udhcpc 工具。一般默认的配置都是选中的,为了确保成功,还是需要去确认一下。

1. 首先配置 linux 内核使其支持 DHCP,以及 socket:

[*] Networking support --- >< * > Packet socket

[*] IP: DHCP support

[*] Network packet filtering framework (Netfilter) --- >

2. 配置 busybox:

Networking Utilities --- > udhcp Server/Client --- >

[ * ] udhcp Server (udhcpd) udhcp Client (udhcpc)

[ * ] Lease display utility (dumpleases)

[ * ] Log udhcp messages to syslog (instead of stdout)

[ * ] Compile udhcp with noisy debugging messages

3. 编译安装 busybox

make

make install

4. 编译完并安装 busybox 后,将 busybox 源码目录下的 example/udhcpc/simple.script 脚本文件 cp 到根文件系统的/usr/share/udhcpc/default.script 文件中。

如果没有目录先创建目录:

[root@XiaoLong /]#mkdir /usr/share/udhcpc -p

5. 自动获取 IP:

[root@XiaoLong /]# udhcpc -i ra0 udhcpc (v1.23.2) started

Setting IP address 0.0.0.0 on ra0 Sending discover...

Sending select for 192.168.1.10...

Lease of 192.168.1.10 obtained, lease time 7200

Setting IP address 192.168.1.10 on ra0 Deleting routers

route: SIOCDELRT: No such process

Adding router 192.168.1.1 获取的 IP 地址

Recreating /etc/resolv.conf 自动更新 resolv.conf 文件

Adding DNS server 211.162.66.66

Adding DNS server 211.162.77.77

6. 查看获取到的 IP:

[root@XiaoLong /]# ifconfig ra0

Link encap:Ethernet HWaddr 00:87:46:19:8F:EB inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::287:46ff:fe19:8feb/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:260636 errors:0 dropped:0 overruns:0 frame:0 TX packets:528 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000

RX bytes:55031927 (52.4 MiB) TX bytes:33119 (32.3 KiB)

7. ping 百度测试:

usb

自动获取 IP 也可以使用第三方其他工具(一般使用 busybox 自带的即可):

下载 DHCP 源码,编译后得到 dhclient 工具,实现 DHCP client.

(1) 下载源码:http://gd.tuwien.ac.at/infosys/servers/isc/dhcp/ ,选中 dhcp-3.1.3.tar.gz;

(2) 解压 tar -zxvf dhcp-3.1.3.tar.gz,然后进入./dhcp-3.1.3/,运行配置./configure,之后生成 work.linux-2.2 文件夹, 进入 work.linux-2.2/client/,输入 make "CC=arm-linux-gcc -static",将编译生成 dhclient。

(3) 拷贝生成的 dhclient 到 mini2440 开发板上,为方便使用,可以放在/usr/bin/下;拷贝另外两个配置文件到开发板,分别是 /dhcp-3.1.3/client/dhclient.conf 和/dhcp-3.1.3/client/scripts/linux 到开发板的/sbin/目录下。并改名后一个文件为 dhclient-script ,并修改该文件的第一行 #! /bin/bash 为 #! /bin/sh ,保存后,修改权限 chmod +x /sbin/dhclient-script。

(4) 为 eth0 或者 wlan0 配置 dhcp 服务,输入 dhclient eth0 或者 dhclient wlan0 即可.

4.2.1 开机自动加载连接路由器

可以将以下代码加载到 etc/profile 文件里或者是/etc/rcS 文件里,开机自动执行。

insmod mt7601Usta.ko #安装驱动

wpa_supplicant -Dwext -ira0 -c /etc/wpa_supplicant.conf -B #启动网卡

udhcpc -i ra0 #自动获取 IP 地址--busybox 自带的工具

5.1 其他工具移植方法

5.1.1 安装flex工具库

系统自带的flex库版本太低,需要升级!

Flex 是一个高效、免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 可以实现跨浏览器、桌面和操作系统。虽然只能使用 Flex 框架构建 Flex应用程序,但Adobe Flash Builder(之前称为 Adobe Flex Builder?)软件可以通过智能编码、交互式遍历调试以及可视设计用户界面布局等功能加快开发。

下载链接:http://sourceforge.net/projects/flex/files/

usb

usb

将下载的压缩文件拷贝至虚拟机,解压,配置,编译安装。

[root@XiaoLong 360_WIFI]# tar xvf flex-2.6.0.tar.bz2

[root@XiaoLong 360_WIFI]# cd flex-2.6.0

[root@XiaoLong flex-2.6.0]# ./configure

[root@XiaoLong flex-2.6.0]# make && make install

usbusbusb

5.1.2 安装 bison

下载链接:http://ftp.gnu.org/gnu/bison/

GNU bison 是属于 GNU 项目的一个语法分析器生成器。

GNU Bison是一种通用目的的分析器生成器。它将LALR(1)上下文无关文法的描述转化成分析该文法的C程序。 一旦你精通Bison,你可以用它生成从简单的桌面计算器到复杂的程序设计语言等等许多语言的分析器。

usb

将下载好的bison-3.0 .tar.gz压缩包拷贝到虚拟机解压,解压后,进入到解压后的目录,配置,编译,安装。

[root@XiaoLong bison-3.0]# ./configure

[root@XiaoLong bison-3.0]# make && make install

usbusbusbusb

5.1.3 安装libnl库

libnl套件是netlink库提供api的集合协议基于Linux内核的接口。

Netlink IPC机制主要是在内核和用户空间之间提供接口。 它被设计为一个更灵活的ioctl的继任者,主要提供网络相关的内核配置和监控接口。

下载链接:http://www.infradead.org/~tgr/libnl/

usb

将下载后的libnl-3.2.25.tar.gz压缩包拷贝到虚拟机,解压,配置,编译,安装。

[root@XiaoLong work]# tar xvf libnl-3.2.25.tar.gz

[root@XiaoLong libnl-3.2.25]# ./configure --host=arm-linux --prefix=$PWD/tmp

--prefix=$PWD/tmp :表示指定编译安装的路径 ---安装路径为当前目录的tmp文件夹

--host=arm-linux :指定编译器
[root@XiaoLong libnl-3.2.25]# make && make install

usbusb

usbusbusb

5.1.4 拷贝依赖库

Libnl库安装成功之后,在tmp目录下会生成lib目录。

1将lib目录下的文件拷贝一份到系统交叉编译路径下的lib目录里

2将lib目录下的文件拷贝一份到开发板的根文件系统lib目录里

3将libnl库下include目录下的文件,拷贝一份到交叉编译器的include目录

[root@XiaoLong libnl-3.2.25]# cp tmp/lib/* /work/nfs_root/lib/ -rf -d

[root@XiaoLong libnl-3.2.25]#

cp tmp/include/* /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include/ -rf


[root@XiaoLong libnl-3.2.25]#

cp tmp/lib/* /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/ -rf -d

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分