wifi tool工具的使用(iw与wpa_supplicant)(持续更新中)

wifi 驱动还有app tool移植可参考如下链接,写得非常好,韦东山老师写的东西就是牛逼。

http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=14626&extra=page%3D1

WIFI tool主要有:wpa_supplicant(依赖于libnl、openssl库) 、hostapd 以及iw相关的tool            

1.wpa_supplicant (无线网卡连接其它设备,工作于STA模式)
2.hostapd              (无线网卡作为路由器,工作于AP模式)

驱动程序的移植,如果是以模块的形式进行移植,关注点在于:

(1)采用什么编译器,如果是x86,那么Makefile可以不用更改直接make,如果是ARM,则需要修改Makefile中的CC选项

CC=arm-linux-gcc (假设是arm-linux-gcc) 

(2)指定内核源码的路径

DEF_KERNEL_DIR := /BSP/yuanxin/Demo/Project/yocto2.1/kernel4.1.15-r0

(3)指定环境变量

这个最让人头痛了,笔者曾经为这个问题绞尽脑汁好几天,最好才知道,要定制一些FLAG在里面,这些FLAG就是环境变量相关的东西,通常指定一些库,一些编译参数进行编译等等,这个可以通过echo $CC进行查看,前提是你当前的交叉编译环境以及配置成功。


应用程序的移植,关注点在于:

(1)采用什么平台进行编译,那么在Makefile中需要修改为xxx-gcc,比如CC=arm-linux-gcc,和驱动移植第一点是一样的。

(2)指定环境变量,和驱动移植的第三点是一样的。


关于wifi的加密/认证,以手机为例主要有四种模式:

(1)OPEN模式

(2)WEP模式

(3)WPA(TKIP)

(4)WPA2(AES)

1、iw工具的使用:

iw工具:是iwconfig的替代者

(1)可用于 open, WEP两种"认证/加密"的模式的使用

 // 列出WIFI网卡的性能

iw list 

//启动wifi模块

ifconfig wlan0 up

// 扫描WIFI AP

iw dev wlan0 scan     

// 连接到WIFI AP:xxx (open模式) (没有密码的,开放式wifi的连接)

iw wlan0 connect xxx  

// 连接到WIFI AP:xxx (WEP模式)   后面的xxxxx表示密码

iw wlan0 connect xxx keys d:0:xxxxxx 
                            d: default, 0: 第0个密码 

手动配置wifi热点的ip
ifconfig wlan0 192.168.1.22
ping 一下百度,看是否可以连通网络(前提,已经设置了支持外网)
ping www.baidu.com 

断开热点的连接:

iw wlan0 disconnect


2、wpa_supplicant(正在学习中)

功能比iw更为强大,可以用于OPEN模式、WEP模式、WPA(TKIP)、WPA2(AES)四种模式

一般情况下,现在很多都是用WPA2(AES)这种模式进行配置,所以我们来看看如何使用。

wpa_supplicant连接热点的方法如下:

连接命令:wpa_supplicant -B -i interface -c filename

字段含义如下:

wpa_supplicant -B -i interface -c filename
-B: Fork into background
-i: interface,表示对应的wifi节点(通常是wlan,当然有可能是其它的名字) -Interface to listen on.

-c: filename,表示使用哪个路径下的配置文件

例如:使用手动连接的方式去测试是否能够连接热点

wpa_supplicant -B -c /etc/wpa_wpa2.conf  -imlan0

解析:使用mlan0这个节点,创建一个进程,并且使用/etc/wpa_wpa2这个作为wifi的配置文件。

配置文件:/etc/wpa_wpa2.conf 
如果没有,需要touch  /etc/wpa_wpa2.conf

ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="test"
        psk="123456"

}

如果需要添加多个配置,也可以继续添加以上network的字段,wpa这个工具会自动去匹配能够连接的ssid

连接成功:

root@imx6qrsb4411a1:/# wpa_cli -imlan0 status
bssid=9c:1c:12:28:dd:53
freq=2462
ssid=test
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
address=28:c2:dd:95:57:db

uuid=78dae99a-9f04-5c99-9080-8287e3f24ae5


但现在ping百度是ping不通的,那么如何连接外网呢?需要配置ip,添加域名,设置网关,添加DNS,但有一个工具已经将这些步骤通通自动完成,只要:

动态获取IP:
udhcpc ‐b ‐i mlan0      (mlan0是我的wifi节点)
例如:(对域名,IP,DNS保密,故以xx,xxx形式进行缩写)
root@imx6qrsb4411a1:/# udhcpc  -b -i mlan0
udhcpc (v1.23.1) started
Sending discover...
Sending select for xxx.xx.xxx.xx...
Lease of xxx.xx.xxx.xx obtained, lease time 3600
/etc/udhcpc.d/50default: Adding DNS xxx.xx.xxx.xx
/etc/udhcpc.d/50default: Adding DNS xxx.xx.xxx.xx


执行这个命令后,会在/etc/resolv.conf 自动生成对应的信息
root@imx6qrsb4411a1:/# cat /etc/resolv.conf 
domain XXXXXX
nameserver xxx.xx.xx.xx
nameserver xxx.xx.xx.xx

你可能感兴趣的:(物联网技术)