实现WiFi AP模式(一):hostapd的下载与编译
前言
hostapd是一个用于实现无线局域网(WLAN)访问点(AP)功能的软件,它是一个开源的Linux守护进程。hostapd可以将支持无线网卡的计算机转变为一个功能强大的无线AP,允许其他设备连接并访问无线网络
1、源代码获取
1.1 hostap下载
- 官网下载链接
- 指令 :
wget --no-check-certificate https://w1.fi/releases/hostapd-2.9.tar.gz
- Ubuntu下载安装:
sudo apt-get install hostapd
1.2、编译依赖库下载
1.2.1、libnl库
-
指令下载:
wget --no-check-certificate https://github.com/thom311/libnl/releases/download/libnl3_9_0/libnl-3.9.0.tar.gz
1.2.2、openssl库
- 官网下载链接
- 指令下载:
wget --no-check-certificate https://www.openssl.org/source/openssl-3.0.13.tar.gz
2、编译
2.1、libnl的库编译
- 配置指令
./configure --host= --prefix=$PWD/_install
解释说明:
--host:交叉编译工具链
--prefix:库的存放路径,即make install的目录
- 编译安装指令
make -j32
make install
2.2、openssl的库编译
- 配置指令
./Configure --prefix=$PWD/_install CROSS_COMPILE=
解释说明:
CROSS_COMPILE:交叉编译工具链
--prefix:库的存放路径,即make install的目录
- 编译安装指令
make -j32
make install
2.3、hostapd的编译
- 设置并配置.config文件
cp defconfig .config
.config文件是hostapd的配置文件,可以根据自己的需求去配置hostapd的支持项
- 在Makefile文件里设置依赖库
指定交叉编译链:
CC = 编译器的路径
指定libnl库和头文件路径:
CFLAGS += -I/路径/include/libnl3
LIBS += -L/路径/libnl/lib
指定openssl库和头文件路径
CFLAGS += -I/路径/openssl/include
LIBS += -L/路径/openssl/lib -lssl -lcrypto
- 编译
make -j32
3、遇到的问题
3.1、编译libnl库提示缺少bison和flex
- 提示
configure: WARNING: bison not found. Please install before continuing.
configure: WARNING: flex not found. Please install before continuing.
configure: error: Required packages are missing. Please install them and rerun ./configure
-解决
sudo apt install bison
sudo apt install flex
3.2、编译hostapd报错:No package ‘libnl-3.0’ found
- 报错
Package libnl-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libnl-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libnl-3.0' found
- 解决
export PKG_CONFIG_PATH=/路径/libnl-3.7.0/_install/lib/pkgconfig/:$PKG_CONFIG_PATH
将2.1里libnl的库安装添加到PKG_CONFIG_PATH变量中
3.3、运行hostapd报错:找不到libssl.so.3库
- 报错
./hostapd: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
- 解决方法1:设置
$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/路径/openssl-3.1.0/_install/lib64:$PKG_CONFIG_PATH
将2.2里openssl的库路径安装添加到PKG_CONFIG_PATH变量中
注意:这个方法只是临时的,而且只有当前命令窗口有用
- 解决方法2:设置ld.so.conf文件
1、sudo vim /etc/ld.so.conf
2、添加动态库所在目录(每个路径占据一行)
3、运行命令以使更改生效:sudo ldconfig
3.4、运行hostapd显示库文件版本不对
-
报错
-
原因
编译时使用的makefile中引用的动态链接库和实际运行时使用的动态链接库不同造成的 -
解决方法1:设置
$LD_LIBRARY_PATH
变量
export LD_LIBRARY_PATH=/路径/openssl-3.0.13/_install/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/路径/libnl-3.9.0/_install/lib:$LD_LIBRARY_PATH
注意:这个方法只是临时的,而且只有当前命令窗口有用
- 解决方法2:设置/etc/environment文件来配置默认
$LD_LIBRARY_PATH
变量
1、sudo vim /etc/environment
2、在文件里添加:
export LD_LIBRARY_PATH=/路径/openssl-3.0.13/_install/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/路径/libnl-3.9.0/_install/lib:$LD_LIBRARY_PATH