WiFi交叉编译全流程(wpa_supplicant及hostapd)
概述及依赖库下载路径
hostapd:AP 侧进程,可以构建一个独立 AP 或者一个 RADIUS 认证服务器
wpa_supplicant:STA 侧进程,包含了 802.1x、WPA 的请求工作
hostapd和wpa_supplicant压缩包下载路径
Openssl下载
openssl下载路径:https://openssl-library.org/source/old/1.1.1/index.html
libnl下载路径
libnl下载路径:https://www.linuxfromscratch.org/blfs/view/svn/basicnet/libnl.html
hostapd 和 wpa_supplicant 均依赖 libnl 和 openssl
所以先编译 libnl 和 openssl,再编译 hostapd 和 wpa_supplicant
注意需要先在当前shell配好交叉编译的环境变量
export LD_LIBRARY_PATH=`dirname $(dirname $(which arm-ca9-linux-gnueabihf-gcc))`/usr/local/lib
Openssl交叉编译
安装openssl版本为openssl-1.1.1t
先解压该库文件
进入到openssl目录中创建build空文件用于存放后续生成的成果物
执行config配置环境
参数说明: no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程.原因是它的汇编代码是对arm格式不支持的。 shared:
生成动态连接库。 no-async: 交叉编译工具链没有提供GNU C的ucontext库 –prefix=:
安装路径,编译完成install后将有bin,lib,include等文件夹 –cross-compile-prefix=: 交叉编译工具
./config no-asm shared no-async --prefix=/data1/shenhao11/WifiTest/openssl-1.1.1t/build --cross-compile-prefix=arm-ca9-linux-gnueabihf-
修改Makefie,去掉-m64和-m32选项
打开生成的Makefile文件
全局搜索并删除
删除后执行make命令
make结束后再
执行make install 将成果物生成在一开始创建的build目录下
生成的成果物
libnl交叉编译
此处用的是libnl-3.9.0版本
同样先解压库文件
创建build文件用于存放最后成果物
执行配置命令
参数说明
–host=交叉编译链工具
–prefix=成果物生成路径
./configure --host=arm-ca9-linux-gnueabihf --prefix=/data1/shenhao11/WifiTest/libnl-3.9.0/build
执行make命令
编译完成以后 执行make install命令
生成的成果物如下
将OpenSSL和libnl生成的成果物的路径单独拷贝出来,
新建目录openssl用于存放先前编译的openssl-1.1.1t的成果物并拷贝
将路径复制下来后续有用:/data1/shenhao11/WifiTest/openssl
新建目录libnl用于存放先前编译的libnl的成果物并拷贝
将路径复制下来后续有用:/data1/shenhao11/WifiTest/libnl
wpa_supplicant交叉编译
此处用的版本是wpa_supplicant2.10
同样先添加环境变量再进行解压安装包
进入到主目录下
拷贝配置文件
cp defconfig .config
打开.config,添加上openssl和libnl中编译生成的成果物的路径和其他配置,直接加在最后面即可
CC=arm-ca9-linux-gnueabihf-gcc
CFLAGS += -I/data1/shenhao11/WifiTest/openssl/include
LIBS += -L/data1/shenhao11/WifiTest/openssl/lib
CFLAGS += -I/data1/shenhao11/WifiTest/libnl/include/libnl3
LIBS += -L/data1/shenhao11/WifiTest/libnl/lib
再把这2个选项注释掉,用不到MODBUS库本流程也不涉及
CONFIG_CTRL_IFACE_DBUS_NEW
CONFIG_CTRL_IFACE_DBUS_INTRO
若不关闭则会报错如下
直接用交叉编译链工具make
make CC=arm-ca9-linux-gnueabihf-gcc
编译报错如下,提示找不到这个libnl-3.0
需要通过 PKG_CONFIG_PATH 环境变量指明 libnl-3.0.pc 所在的目录,以至于能够找到 libnl-3.0 库
我们可以手动执行命令 pkg-config --list-all,可以看到列表中确实没有 libnl-3.0 库,因为在前面步骤中,我们是把 libnl-3.0 库安装在源码所在目录的,并且我们是交叉编译,编译出来的库也都是 ARM 架构的,也不应该安装到宿主机的默认动态库目录中。
需要的库在这个目录下
解决办法:
配置环境变量
export PKG_CONFIG_PATH=/data1/shenhao11/WifiTest/libnl/lib/pkgconfig/
重新尝试编译,没有再报错
编译成功
最终生成3个文件
hostapd交叉编译
此处编译的是hostapd-2.10版本
首先解压
tar -zvxf hostapd-2.10.tar.gz
进入到主目录中
拷贝defconfig文件
cp defconfig .config
打开.config文件进行配置
同样加上openssl和libnl的路径和交叉编译链工具选项
直接make
同样出现未找到libnl-3.0的库的问题,步骤和之前一样添加libnl的环境变量
添加环境变量
export PKG_CONFIG_PATH=/data1/shenhao11/WifiTest/libnl/lib/pkgconfig/
添加完之后再次进行编译
生成的成果物如下