WiFi交叉编译全流程(wpa_supplicant及hostapd)

WiFi交叉编译全流程(wpa_supplicant及hostapd)

概述及依赖库下载路径

hostapd:AP 侧进程,可以构建一个独立 AP 或者一个 RADIUS 认证服务器
wpa_supplicant:STA 侧进程,包含了 802.1x、WPA 的请求工作

hostapd和wpa_supplicant压缩包下载路径

https://w1.fi/releases/
在这里插入图片描述

在这里插入图片描述

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/

在这里插入图片描述

添加完之后再次进行编译
生成的成果物如下
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值