平台为hi35XX,在Liunx下借助wireless_tools和wpa_supplicant(因为现在的无线WIFI网络大多是wpa加密。所以需要移植wpa_supplicant工具)等工具实现wifi的过程。

一、移植wireless_tools

1. 下载并编译wireless_tools

tar zxf  wireless_tools.29.tar.gz(网上下载)

cd wireless_tools.29

make

成功后会在当前目录生成iwspy,iwpriv,iwlist以及iwconfig等文件。

2. 拷贝文件

我们只需将这四个文件拷备到文件系统的sbin目录,然后将当前目录的libiw.so.29库文件拷到文件系统的lib目录,无线网络工具即安装完成。

 

二、加载无线网卡驱动模块

网上有很多无线驱动模块,可移植性很好。呵呵,我的是利用XX无线网卡公司提供的网卡驱动源码,修改下Makefile(1.网卡选择 2.平台  3.内核路径和工具链)以及os/linux下的config.mk(一般不需要修改),make得到的。

insmod rtutil5572sta.ko。
    insmod rt5572sta.ko
    insmod rtnet5572sta.ko

三、指令的使用

1.  扫描可用的无线网络

iwlistwifi-name scanning

其中wifi-name为无线网卡的名字,比如网卡eth0就是系统默认的网卡名字, wifi-name可以用ifconfig查看,一般为ra0(无线网卡),不过,需要ifconfig ra0 up

2.  扫描网络信息

iwlistra0 scan

===>rt_ioctl_giwscan.11(11) BSS returned, data->length = 1427

ra0       Scan completed :

Cell 01 - Address:C4:CA:D9:1D:9E:A0

Protocol:802.11b/g/n

ESSID:""

Mode:Managed

Frequency:2.412 GHz(Channel 1)

Quality=7/100  Signal level=-87 dBm  Noise level=-82 dBm

Encryption key:off

Bit Rates:54 Mb/s

如上:ESSID项的值即为无线网络的名字,如上的“TXJ”等。如果值为空,说明在无线路由勾选了隐藏ESSID的选项。ESSID是很关键的,如果被隐藏了,也不是不能连接,而是需要破解,用到其他的工具,非常麻烦。

3. 设置要连接的网络类型

iwprivra0 set NetworkType=Infra

4. 设置要连接的无线网络的安全模式

iwprivra0 set AuthMode=WPA2PSK

5. 设置网络加密方式:(CCMP即为AES)

iwprivra0 set EncrypType=TKIP

6. 设置连接时的密码

iwprivra0 set WPAPSK=*******  //********为加密网络的密码

7. 连接该网络:有两种方式:

<1> 用iwpriv命令

iwpriv ra0 set SSID=TXJ

<2> 用iwconfig命令

iwconfigra0 essid TXJ

至此,如果密码正确,就可以连接上网络TXJ了。

8. 查看状态

iwpriv ra0 connStatus

当然,你也可以用iwconfig命令查看状态。

四、wpa_supplicant

wpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是 wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。

wpa_supplicant由网卡公司提供,呵呵,同样,网上也有很多相关资料,如下:

1.生成wpa_supplicant(网上下载,本人未试)

1.1下载并解压wpa_supplicant需要的源码

tarxvfz wpa_supplicant-0.7.2.tar.gz

tarxvfz wpa_supplicant-0.5.8.tar.gz

tarzxvf openssl-0.9.8e.tar.gz

1.2编译openssl库

将wpa_supplicant中的补丁拷贝到openssl中:

cp wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch  openssl-0.9.8e/

建立openssl编译目标路径:

mkdir /usr/local/ssl

修改openssl-0.9.8e目录下的makefile文件,修改内容如下:

CC=arm-none-linux-gnueabi-gcc

AR=arm-none-linux-gnueabi-ar

RANLIB=arm-none-linux-gnueabi-ranlib

INSTALLTOP=/usr/local/ssl

OPENSSLDIR=/usr/local/ssl

然后编译openssl:

make & make install

正常编译后,在/usr/local/ssl中将会出现ssl库。

1.3编译wpa_supplicant

cd  wpa_supplicant-0.5.8

cp  defconfig .config

在.config中添加如下代码

CC=arm-none-linux-gnueabi-gcc-L /usr/local/ssl/lib/

CFLAGS+= -I/usr/local/ssl/include/

LIBS+= -L/usr/local/ssl/lib/

然后编译:

make

经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。

2.把RT2870STA.dat文件复制到/etc/Wireless/RT2870STA 目录下

1.1 mkdir -p /etc/Wireless/RT2870STA //创建多层目录。

1.2 cp /mnt/rt5370/RT2870STA.dat  /etc/Wireless/RT2870STA

3.首先关闭本地网卡,再启动wifi网卡

#ifconfig eth0 down (如果非同一ip段,不需要关闭)

ifconfig ra0 up

启动网卡后,会不断出现错误:BIRIdx(1): RXDMALen not multiple of 4.[43507], BulkInBufLen = 416)
    修改./MODULE/include/iface/rtmp_usb.h问题就能够解决掉。
    #define RXBULKAGGRE_SIZE  12 该为8

4.设置网卡参数

ifconfig ra0  192.168.2.188

#ifconfig ra0  broadcast 192.168.2.255 (广播地址,默认)

#ifconfig ra0  netmask 255.255.255.0(子网掩码,默认)

5.编写wpa_supplicant.conf配置文件

ctrl_interface=/var/run/wpa_supplicant

network={

ssid="TXJ"  //路由器名称

scan_ssid=1

key_mgmt=WPA-EAP WPA-PSK IEEE8021XNONE

pairwise=TKIP CCMP

group=CCMP TKIP WEP104 WEP40

psk="xxxxx" //密码

}

6.启动命令

mkdir -p /var/run/wpa_supplicant

/mnt/rt5370/wpa_supplicant -Dwext-ira0 -c /etc/wpa_supplicant.conf

7.命令查看状态

/mnt/rt5370/iwpriv ra0 connStatus   //iwpriv文件放在/mnt/rt5370/目录下,所以,需要这样运行指令。

成功 ra0  connStatus:Connected(AP:TXJ[E0:05:C5:CF:F0:56])

然后,就可以ping通192.168.2.1,说明连接上路由器了。那么,工作就完成了。

附:

-i<ifname>: 网络接口名称

-c<conf>:配置文件名称

-C<ctrl_intf>:控制接口名称

-D<driver>:驱动类型

-p<driver_param>:驱动参数

-b<br_ifname>:桥接口名称

rt5370支持WPS,rt3070不支持。

Linux下Wi-Fi的实现:wireless_tools和wpa_supplicant的更多相关文章

  1. linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi

    最近在调试wifi,已经把wpa_supplicant 工具编译打包好了,为了测试wif驱动及wifi模块是否ok,需要用shell命令临时启动wifi服务连接wifi热点测试. 首先板子启动用ifc ...

  2. Linux下编译安装源码包软件 configure ,make, make install, make test/check, make clean

    http://www.360doc7.net/wxarticlenew/541275971.html 一.什么是源码包软件? 顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件 ...

  3. Linux下编译安装源码包软件 configure ,make, make install, make test/check, make clean 假目标

    http://www.360doc7.net/wxarticlenew/541275971.html 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 ...

  4. (转载)linux下各个文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...

  5. Linux下的几个好用的命令与参数

    将所有文件的编码,转换为UTF-8 find . ! -type d -exec enca -L zh_CN -x UTF-8 {} \; 将指定目录下所有文件权限设定为644 find . ! -t ...

  6. linux下查看和添加PATH环境变量

    linux下查看和添加PATH环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接. 编辑你的 PA ...

  7. Linux下安装Tomcat服务器和部署Web应用

    一.上传Tomcat服务器

  8. 用脚本如何实现将Linux下的txt文件批量转化为Windows下的txt文件?

    众所周知,Windows和Linux的文件换行回车格式不同,Windows下换行格式是\r\n(回车+换行),Linux下换行格式为\n(只是换行),因此,其中一个操作系统的文本文件若需要在另外一个中 ...

  9. linux下shell脚本执行jar文件

    最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...

随机推荐

  1. Sqlserver 远程连接的 TCP/IP 和 Named Pipes的区别

    TCP/IP:  TCP/IP是 Internet 上广泛使用的通用协议.它与互连网络中硬件结构和操作系统各异的计算机进行通信.TCP/IP包括路由网络流量的标准,并能够提供高级安全功能.它是目前在商 ...

  2. 深度学习研究理解5:Visualizing and Understanding Convolutional Networks(转)

    Visualizing and understandingConvolutional Networks 本文是Matthew D.Zeiler 和Rob Fergus于(纽约大学)13年撰写的论文,主 ...

  3. 使用Jsoup函数包抓取网页内容

    之前写过一篇用Java抓取网页内容的文章,当时是用url.openStream()函数创建一个流,然后用BufferedReader把这个inputstream读取进来.抓取的结果是一整个字符串.如果 ...

  4. ImageOptim 图片压缩工具

    下载地址:http://www.onlinedown.net/soft/175501.htm 下载地址(官网):http://imageoptim.com ​ ImageOptim 图片压缩工具,能够 ...

  5. MongoDB副本集搭建及备份恢复

    一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...

  6. Java基础相关

    对老师上课内容进行总结: 1.新建一个Java项目,并命名为HelloWorld 然后再新建类,并命名为HelloWorld,注意红色画圈部分 若勾选,则新建类开头为(“//后的内容为老师所讲批注”) ...

  7. mysql中slow query log慢日志查询分析

    在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了. 一.慢查询日志 配置 ...

  8. 主机连接虚拟机 web服务

    主机上安装了个VM centeros 首先通过 终端:ifconfig eth0 查看虚拟机的Ip地址 这样就能在主机上通过浏览器http://192.168.150.128/a.php 访问虚拟机的 ...

  9. PADS Layout 使用

    1.设置板子中心 setup-set origin 1.画板子边框(Board Outline) Board outline and cutout umm设置单位毫米 g 10 设置间隔 右键设置方形 ...

  10. Eclipse 复制按钮卡死

    复制按钮和按住CTRL链着超链接 有冲突,Eclipse不知道是复制还是链到元素,所以卡死 Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法 最近在MyEclipse中编辑代码时,使用 ...