Linux下Wi-Fi的实现:wireless_tools和wpa_supplicant

摘要:
所以需要移植wpa_supplicant工具)等工具实现wifi的过程。简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。

转载于:https://www.cnblogs.com/lidabo/p/6069455.html

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

一、移植wireless_tools

1. 下载并编译wireless_tools

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

cdwireless_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 setNetworkType=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中:

cpwpa_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/iwprivra0 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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android驱动学习-APP操作新硬件的两种方法(支持添加的驱动)golang学习之生成代码文档下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Foxmail中配置O365邮箱和Hotmail邮箱

一、简述 平时我们经常使用第三方的邮箱工具来管理邮箱。可能性能比Outlook好很多,比如Foxmail,而且也能和Skype会议关联的很好。本文就讲如何在Outlook中关联Office365邮箱和Outlook邮箱。   二、方案 1、Office365邮箱和Outlook邮箱都可以使用IMAP类型来接收。这效果更好,会把邮箱中的文件夹也同步下来。 (...

Linux 小记 — Ubuntu 自动化配置

前言 工欲善其事,必先利其器。经过多次的重复配置 ubuntu 开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本。服务器实例:ubuntu 16.04,技术栈:shell,python。 1. 主机名 可以通过 hostname newname 修改主机名,不过最好是写入 /etc/hostname 文件,重启生效。为了让同一内网段的主...

利用dstat来监控Linux系统资源使用情况——超级【赞】

在Linuxtone论坛中,发现一个很好的性能监测工具dstat,很好用,可以完成vmstat,iostat,netstat等工具才能完成的任务,而且是着色显示、动态监控系统资源使用情况,还可以通过参数来指定监控那些内容,如CPU、内存等。 在RedHat系统中安装它,本身没有安装本应用 #yum install dstat* -y 安装完成后,就可以直接...

ubuntu一些基本软件安装方法

ubuntu一些基本软件安装方法 首先说明一下 ubuntu 的软件安装大概有几种方式:1。 deb 包的安装方式deb 是 debian 系 Linux 的包管理方式, ubuntu 是属于 debian 系的 Linux 发行版,所以默认支持这种软件安装方式,当下载到一个 deb 格式的软件后,在终端输入这个命令就能安装:sudo dpkg -i *....

Linux平台Java调用so库JNI使用例子

1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数。 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/test/net/wangliping/HelloJNI.java   package net.wanglipingpublic class Hello...

linux下卸载apache方法小结

方法一 代码如下: 1.root@server ~]# rpm -qa|grep httpdhttpd-2.2.3-11.el5_2.centos.4httpd-manual-2.2.3-11.el5_2.centos.4 说明:rpm –qa | grep httpd命令是为了把httpd相关的包都列出来, 我上面的例子是Linux默认安装apache...