目录
内核 4.14.2 Linux
开发板 Itop4412
一、wpa_supplicant的介绍和使用
wpa_supplicant
本是开源项目源码,被谷歌修改后加入android
移动平台,它主要是用来支持WEP
,WPA/WPA2和WAPI
无线协议和加密认证的,而实际上的工作内容是通过socket
(不管是wpa_supplicant
与上层还是wpa_supplicant
与驱动都采用socket
通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant
调动驱动来对WiFi
芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。
目前可以使用wireless-tools
或wpa_supplicant
工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。
wpa_supplicant
是一个较好的选择,但缺点是它不支持所有的驱动。请浏览wpa_supplicant
网站获得它所支持的驱动列表。另外,wpa_supplicant
目前只能连接到那些你已经配置好ESSID
的无线网络。wireless-tools
支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA
的AP
。
经过编译后的wpa_supplicant
源程序可以看到两个主要的可执行工具:wpa_supplicant
和wpa_cli
。wpa_supplicant
是核心程序,它和wpa_cli
的关系就是服务和客户端的关系:后台运行wpa_supplicant
,使用wpa_cli
来搜索、设置、和连接网络。
如何用wpa_supplicant使能一个wifi连接?
运行wpa_supplicant
程序;
- 执行:
/system/bin/wpa_supplicant -d -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
其中:
-
-d :增加调试信息
-
-Dwext :
wext
,驱动名称 -
-iwlan0 :
wlan0
,网络接口名称 -
/system/bin/wpa_supplicant :
wpa_supplicant
可执行程序path
-
/data/misc/wifi/wpa_supplicant.conf :
wpa_supplicant
的配置文件path
。
wpa_cli -i wlan0 scan //搜索附件wifi热点
wpa_cli -i wlan0 scan_result //显示搜索wifi热点
wpa_cli -i wlan0 status //当前WPA/EAPOL/EAP通讯状态
wpa_cli -i wlan0 ping //pings wpa_supplicant
二、wpa_supplicant工具交叉编译以及配置
wpa_supplicant依赖有openssl和libnl的一些库,所以要先编译一下他们。
1、编译openssl依赖库
1)配置
解压下载的压缩包:
tar -xvf openssl-OpenSSL_1_1_1b.tar.gz
cd openssl-OpenSSL_1_1_1b/
./config shared no-asm --prefix=$PWD/build
./config
表示根据后面的编译选项生成Makefile
文件,“shared
”表示生成共享库;“no-asm
”表示去掉汇编部分;“–prefix=
”后面跟着生成的项目所存放的路径。$PWD/build
表示在当前路径下创建一个build
的文件夹,并且生成的东西放在里面。
2)修改Makefile
CC= arm-none-linux-gnueabi-gcc
AR= arm
RANLIB= arm-none-linux-gnueabi-ranlib
AR
或者$ export ARCH=arm
他们都是指定要编译到那种平台上,这里指定ARM
平台。
3)编译并安装
make
编译时时可能会遇到下面的问题:
问题是configure
执行后生成的Makefile
中的CFLAG
去掉这一行中的-m64
就行了,之后继续编译,最后安装
make install
编译安装后在openssl-OpenSSL_1_1_1b/build/lib/
目录内容如下:
可以看见他们都是在arm
平台运行的
- 复制库文件到开发板文件系统
/lib
目录下
这里需要注意的是,拷贝时使用cp -rf
,连同软链接一起拷贝。不要破坏软连接。
2、编译libnl依赖库
解压、编译、安装
tar -xvf libnl-3.2.23.tar.gz
cd libnl-3.2.23
mkdir build
./configure --host=arm-linux --prefix=$PWD/build
make CC=arm-none-linux-gnueabi-gcc
make install
3、编译iw
解压、编译、安装
iw
需要libnl
的一些库文件:环境变量要根据自己的实际路径来设置
tar -xvf iw-4.0.tar.gz
cd iw-4.0/
export PKG_CONFIG_PATH=/home/libnl-3.2.23/build/lib/pkgconfig:$PKG_CONFIG_PATH
make CC=arm-linux-gcc
把生成的iw
文件复制到开发板的/bin/
目录下。
4、编译wpa_supplicant
1)创建一个.config
文件
tar -xvf wpa_supplicant-2.9.tar.gz
cd wpa_supplicant-2.9/wpa_supplicant
cp defconfig .config
- 修改
.config
文件
把部分:
# Additional directories for cross-compilation on Linux host for mingw target
#CFLAGS += -I/opt/mingw/mingw32/include/ddk
#LIBS += -L/opt/mingw/mingw32/lib
#CC=mingw32-gcc
改为:
# Additional directories for cross-compilation on Linux host for mingw target
CFLAGS += -I/home/openssl-OpenSSL_1_1_1b/build/include
LIBS += -L/home/openssl-OpenSSL_1_1_1b/build/lib
CFLAGS += -I/home/libnl-3.2.23/build/include
LIBS += -L/home/libnl-3.2.23/build/lib
CC=arm-linux-gcc
要根据自己的路径去修改。
CFLAGS
为编译安装好的openssl
和libnl
的include
目录;
LIBS
为编译安装好的openssl
和 libnl
的lib
目录;
CC
为交叉编译工具;
3)添加临时环境变量
export PKG_CONFIG_PATH=/homelibnl-3.2.23/build/lib/pkgconfig:$PKG_CONFIG_PATH
4)编译
编译时会出现以下错误:
dbus/dbus_dict_helpers.c:10:23: warning: dbus/dbus.h: No such file or directory
In file included from dbus/dbus_dict_helpers.c:14:
修改.config
文件,注释掉以下两个选项:
#CONFIG_CTRL_IFACE_DBUS_NEW=y
#CONFIG_CTRL_IFACE_DBUS_INTRO=y
继续编译。
在当前目录下生成了wpa_cli
、wpa_passphrase
、wpa_supplicant
可执行程序。
wpa_supplicant
是核心程序,它和wpa_cli
的关系就是服务和客户端的关系
wpa_cli
用来搜索、设置、和连接网络。
wpa_passphrase
网络配置可以使用wpa_passphrase
工具自动生成并添加到配置文件中。
把这三个文件复制到开发板的根文件/bin目录下就可以使用了。
→→编译完成的wpa_supplicant、iw工具,制作好的Linux根文件系统镜像文件←
三、使用使用wpa_supplicant工具连接WIFI
首先我们可以扫描一下周围有哪些wifi
,使用命令:iwlist ra0 scan
1) 创建配置文件
wpa_supplicant
连接WIFI
的时候会从配置文件中读取账号和密码,以及加密方式等, 所以我们再运行wpa_supplicant
工具的时候要提前写好配置文件。
配置文件名称自定,但是要以 .conf
为后缀,并保存在 /etc/
目录下,这边给出一个配置文件的例子。
.
使用vi
在etc
目录下创建wpa_supplicant.conf
文件。
ctrl_interface=/var/run/wpa_supplicant # 一个目录,用于wpa_supplicant和wpa_cli的socket通信
network={
ssid="dswei" # WIFI名称
psk="baiwenwang123" # WIFI密码
}
在一般使用中我们只要设置ssid和psk,其他全部使用默认的,就可以连接上WIFI。
2)打开wlan0
ifconfig wlan0 up
3)创建一个socket通信的目录
mkdir -p /var/run/wpa_supplicant
4)测试和连接WIFI两种
wpa_supplicant -B -c/etc/wpa_supplicant.conf -i wlan0
-B为后台运行,-c为配置文件目录,wpa_supplicant.conf为配置文件的名称,根据实际情况填写。
wpa_supplicant -Dwext -i wlan0 -c wpa_supplicant.conf -d
-Dwext可以打印出连接的debug
信息。