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)采用什么编译器,如果是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 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