hostapd移植到RK356X
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/ -
拷贝生成一个默认配置文件
.confighostapd$ 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下执行makehostapd$ 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服务器的配置参考我的另一篇文章

浙公网安备 33010602011771号