1. 简介
-
开发环境:
Ubuntu20.04
-
目标平台:
RK356X
,内核版本:4.19.234
-
hostapd
版本:2.10
, 依赖特定版本的openssl
和libnl
-
opsnssl
版本:3.0.15
-
libnl
版本:3.2.3
-
2. openssl
移植
-
hostapd
依赖openssl
,需要先移植openssl
-
获取
openssl
源码,选择使用3.0.15
版本,链接如下
-
解压,进入源码目录
$ tar -xvf openssl-3.0.15.tar.gz $ cd openssl-3.0.15/
-
config
配置-
--prefix
指定make install
时的安装路径 -
--cross-compile-prefix
指定交叉编译工具链前缀,最好使用绝对路径
openssl-3.0.15$ ./config \ no-asm \ shared \ no-async \ --prefix=$(pwd)/build \ --cross-compile-prefix=/home/jun/work/share/IG-20/rk3568/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
-
-
修改Makefile,去除
-m64
标识
-
编译,并安装到指定路径
openssl-3.0.15$ make && make install
-
查看编译输出
3. libnl
移植
-
hostapd也依赖
libnl
,需要先移植libnl
-
获取
libnl-3.2.3
源码,下载链接如下 -
解压,进入源码目录
$ tar -xvf libnl-3.2.3.tar.gz $ cd libnl-3.2.3/
-
configure
配置-
--host
指定目标主机平台 -
--prefix
执行make install
时的安装路径 -
CC
指定交叉编译工具链
$ ./configure \ --host=arm-linux \ --prefix=$(pwd)/build \ --enable-static \ --enable-shared \ CC=/home/jun/work/share/IG-20/rk3568/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
-
-
编译,并安装到指定目录
libnl-3.0$ make && make install
-
查看编译输出
4. hostapd
移植
-
hostapd
版本:2.10
-
我是针对wifi6模块进行开发,要求hostapd支持
IEEE80211AX
和IEEE80211AC
-
解压,进入
hostap
源码目录$ tar -xvf hostapd-2.10.tar.gz $ cd hostapd-2.10/hostapd/
-
拷贝生成一个默认配置文件
.config
hostapd$ cp defconfig .config
-
修改
.config
,开启如下选项CONFIG_IEEE80211AX=y CONFIG_IEEE80211AC=y
-
返回上一级目录,修改hostapd源码,在
2.4G AP
时强制使用40M带宽
-
修改
src/utils/includes.h
- 添加头文件
#include </usr/include/errno.h>
- 添加头文件
#include <netlink/errno.h>
- 添加头文件
-
修改
src/ap/sta_info.h
,替换#include "list.h"
为include "utils/list.h
,如下
-
修改
src/build.rules
,指定交叉编译工具链CC:=/home/jun/work/share/IG-20/rk3568/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
-
修改
src/build.rules
, 指定libnl
路径,即前文提到的libnl
编译输出路径CFLAGS += -I/home/jun/work/share/IG-20/wifi/libnl-3.2.3/build/include/libnl3 LDFLAGS += -L/home/jun/work/share/IG-20/wifi/libnl-3.2.3/build/lib
-
修改
src/build.rules
, 指定openssl
路径,即前文提到的openssl
编译输出路径# openssl EXTRA_CFLAGS += -I/home/jun/work/share/IG-20/wifi/openssl-3.0.15/build/include LDFLAGS += -L/home/jun/work/share/IG-20/wifi/openssl-3.0.15/build/lib64
-
查看一下
src/build.rules
-
设置环境变量
PKG_CONFIG_PATH
,确保能够找到libnl编译得到的的libnl-3.0.pc
文件hostapd$ export PKG_CONFIG_PATH=/home/jun/work/share/IG-20/wifi/libnl-3.2.3/build/lib/pkgconfig:$PKG_CONFIG_PATH
-
make
编译,注意:是在hostapd-2.10/hostapd
下执行make
hostapd$ make
-
查看编译输出
5. 安装测试
-
将编译得到的
hostapd
和依赖的库libnl.so/libcrypto.so/libssl.so
拷贝到目标机上,确保hostapd能够链接到所有的库 -
编写配置文件
hostapd.conf
- 如下配置文件:5G频段 信道:36 80M AX
interface=wlp1s0 bridge=br0 ssid=TEST-D80P-5gap hw_mode=a channel=36 auth_algs=1 driver=nl80211 wme_enabled=1 wpa=2 wpa_passphrase=12345678 ieee80211n=1 ieee80211ac=1 ieee80211ax=1 vht_oper_chwidth=1 vht_oper_centr_freq_seg0_idx=42 he_oper_chwidth=1 he_oper_centr_freq_seg0_idx=42 he_basic_mcs_nss_set=65534 he_su_beamformee=1 he_twt_required=0 vht_capab=[SHORT-GI-80][MAX-A-MPDU-LEN-EXP7][RX-STBC-1][RX-LDPC] ht_capab=[SHORT-GI-20][SHORT-GI-40][HT40+][HT40-][LDPC][RX-STBC1] wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP
-
启动
hostapd
# hostapd hostapd.conf
-
手机接入热点,日志如下
-
此时,手机是无法获取到IP的,因为还没有配置DHCP服务器
-
DHCP服务器的配置参考我的另一篇文章