wpa_supplicant是一个开源软件项目,它实现了WIFI STA模式对无线网络进行管理和控制的功能。它是一个连接、配置WIFI的工具,主要包含wpa_supplicant与wpa_cli两个程序。
准备第三方软件如下:
一、wpa_supplicant安装
说明:wpa_supplicant 依赖于 openssl 和 libnl。
1、安装openssl
1)解压
$ tar -xvzf openssl-1.1.1d.tar.gz
$ cd openssl-1.1.1d
2)配置
$ mkdir /home/dongao/tools/openssl //新建目录
$ ./config no-asm shared --prefix=/home/dongao/tools/openssl CROSS_COMPILE=aarch64-linux-gnu- //配置
--prefix :用于指定编译结果存放目录,设置为刚刚创建的目录。
$ vi Makefile //去掉里面的-m64(在FLAG中传递的-m64命令)
3)执行安装
$ make
$ make install
4)将 lib 目录下的 libcrypto 和 libssl 库拷贝到ARM板根文件系统的/usr/lib 目录
$ sudo cp libcrypto.so* ~/share/wifi/lib/openssl/
$ sudo cp libssl.so* ~/share/wifi/lib/openssl/
2、安装libnl
1)安装依赖环境
$ sudo apt-get install flex
$ sudo apt-get install bison
2)解压
$ tar -xzf libnl-3.2.23.tar.gz
$ cd libnl-3.2.23
3)配置
$ mkdir /home/dongao/tools/libnl //新建安装目录
$ ./configure --host=aarch64-linux-gnu --prefix=/home/dongao/tools/libnl //配置
--host :用于指定交叉编译器的前缀,这里设置为“aarch64-linux-gnu”;
--prefix :用于指定编译结果存放目录,设置为刚刚创建的 libnl 文件夹。
4)安装
$ make //编译
$ make install //安装
5)将 lib 目录下的库文件拷贝到ARM板根文件系统的/usr/lib 目录
$ cd /home/dongao/tools/libnl
$ sudo cp lib/* ~/share/wifi/lib/libnl_lib/ -rf
3、安装 wpa_supplicant
1)解压
$ tar -xzf wpa_supplicant-2.7.tar.gz
$ cd wpa_supplicant-2.7/wpa_supplicant/
2)配置
$ cp defconfig .config
$ vi .config
3)编译
$ export PKG_CONFIG_PATH=/home/dongao/tools/libnl/lib/pkgconfig:$PKG_CONFIG_PATH //指定 libnl 库 pkgconfig 包位置
$ make //编译
编译成功文件如下:
将 wpa_cli 和 wpa_supplicant 拷贝到ARM板。
$ wpa_supplicant -v //查看版本
二、wpa_supplicant使用
准备工作:需要wifi驱动已加载成功
1、创建 wpa_supplicant.conf 配置文件
$ vi /etc/wpa_supplicant.conf //etc 目录下创建一个名为 “wpa_supplicant.conf” 的配置文件
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
scan_ssid=1
ssid="xd iphone"
key_mgmt=WPA-PSK
psk="8888asdf"
}
$ mkdir /var/run/wpa_supplicant -p //wpa_supplicant 工具要用到此目录
2、连接wifi
$ wpa_supplicant -D nl80211 -i mlan0 -c /etc/wpa_supplicant.conf -B //连接wifi
-D:驱动程序名称(可以是多个驱动程序:nl80211,wext)
-i:接口名称(mlan0为STA网卡)
-c:配置文件
-B:在后台运行守护进程
3、查看 mlan0 网卡状态
$ wpa_cli -i mlan0 status //查看连接状态,有如下信息表示连接成功
4、连上wifi后,动态获取ip地址
$ udhcpc -i mlan0 //DHCP自动获取ip
遇到问题:为什么DHCP自动获取ip后 mlan0 没有IP地址?
原因:arm 主板用 udhcpc 获取了ip后,并没有直接设置在mlan0网卡上。因为没有通过脚本去设置这个IP(没有 /usr/share/udhcpc/default.script 脚本)
$ udhcpc -h
解决方法:$ udhcpc -i mlan0 -s /etc/udhcpc.script ,或将 /etc/udhcpc.script 拷贝为 /usr/share/udhcpc/default.script,重新执行 udhcpc -i mlan0。
之后mlan0就有ip地址了。
5、测试
$ ping -I 172.20.10.8 www.baidu.com //指定mlan0网卡ping外网
测试OK