嵌入式环境下的设备有时会需要能连接到外网进行一些数据的交互,通过利用wpa_supplicant客户端结合有线网卡或无线网卡,即可配置好网络达到目的。
资源:openssl-0.9.8e.tar.gz + wpa_supplicant-0.7.3.tar.gz
源代码下载路径一:https://download.csdn.net/download/DIANZI520SUA/88485067
源代码下载路径二:wpa_supplicant 源码下载地址 :Index of /releases
openssl 源码下载地址:/source/index.html
一、安装openssl
交叉编译wpa_supplicant之前需要安装openssl,因为编译wpa时需要依赖openssl的相关头文件和库。
将源代码压缩包文件复制到虚拟机路径下(不要放置在Windows与Linux共享文件路径下,编译时会出现创建软链接失败等问题,切记切记!),开始下面的解压、编译、安装步骤。
1.解压
#tar zxvf wpa_supplicant-0.7.3.tar.gz
#tar zxvf openssl-0.9.8e.tar.gz
2.拷贝补丁
#cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
3.创建ssl安装路径文件夹
#mkdir /home/mike/ssl
4.修改openssl Makefile文件
#cd openssl-0.9.8e
按下图内容修改交叉编译工具链
...
INSTALLTOP=/home/mike/ssl //此处改为自己创建的openssl安装路径
OPENSSLDIR=/home/mike/ssl //此处改为自己创建的openssl安装路径
...
//改为自己的交叉编译工具链路径
CC= /root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-gcc
AR=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-ar $(ARFLAGS) r
RANLIB= /root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-ranlib
...
5.交叉编译&&安装
#make
#make install
可能会在编译安装过程出现如下错误,
cms.pod around line 457: Expected text after =item, not a number
cms.pod around line 461: Expected text after =item, not a number
cms.pod around line 465: Expected text after =item, not a number
cms.pod around line 470: Expected text after =item, not a number
cms.pod around line 474: Expected text after =item, not a number
POD document had syntax errors at /usr/bin/pod2man line 69.
make: *** [install_docs] Error 1
解决方法:执行下面命令并重新编译安装即可。
rm -f /usr/bin/pod2man
正常情况下会在/home/mike/ssl路径下生成如下内容,我们后面需要的是include和lib,
至此,openssl交叉编译及安装完成。
二、交叉编译wpa_supplicant
1.修改配置文件
#cd wpa_supplicant-0.7.3/wpa_supplicant
#cp defconfig .config
打开.config,增加如下内容,
CC= /root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-gcc -L/home/mike/ssl/lib/
CFLAGS += -I/home/mike/ssl/include/
LIBS += -L/home/mike/ssl/lib/
执行编译,
#make
成功后会生成如下所示文件(wpa_cli、wpa_passphrase、wpa_supplicant)
wpa_supplicant是关键可执行文件,后面读取配置文件并执行相关功能都是它,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。wpa_passphrase负责生成wpa_supplicant.conf文件(编译完成后有自带的一份该文件,支持不同的配置样式)。
三、拷贝可执行文件到开发板
将这3个文件(wpa_cli、wpa_passphrase、wpa_supplicant)复制到开发板的/bin路径下,并赋予其可执行权限。
四、生成wpa_supplicant.conf文件
在开发板的/etc路径下执行如下命令,TPLINK为我所使用的交换机的牌子,wpa_passphrase用法可自行参考相关文档说明(也可自创该文件填写相关内容),
#wpa_passphrase TPLINK 874565412 >> wpa_supplicant.conf
此时在/etc路径下会生成wpa_supplicant.conf文件,内容会类似如下:
network={
ssid="www.xxx.cn"
#psk="1234567890"
psk=54deb3710e9ea2354e8d57e8bdb3b2a2127af44960d73216c3254ea213
}
五、运行验证
#wpa_supplicant -i eth0 -c /etc/wpa_supplicant.conf -B -Dwired
无错误提示情况下,可以ping 180.101.50.242(百度IP)验证是否能成功访问,关机重启后默认还是会能正常访问。
更复杂的认证协议、证书等功能还需继续深入学习,此篇文章只纯粹简单记录移植过程,验证设备是否能通过802.1x认证。
参考文章:
wpa_supplicant移植与使用 (YFW)-蒲公英云
嵌入式Linux移植WIFI调试工具wpa_supplicant ,wpa_cli,wpa_passphrase解决方法 NUC972 ARM9-CSDN博客