本文主要是介绍更换Ubuntu原生wpa_supplicant说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
前言
1.1 目的
wpa supplicant作为WiFi驱动和上层应用程序的中间环节,可以自行修改其源码,方便调试Wi-Fi 功能。目前编译的版本直接是运行在X86平台,代码在其上编译,不需要交叉编译;
1.2 版本
目前版本是2.10,也是最新版本,可以从如下官网下载;
Linux WPA Supplicant (IEEE 802.1X, WPA, WPA2, WPA3, RSN, IEEE 802.11i) (w1.fi)
1.3 修改点
主要是一些系统库的支持,后文详解;
-
编译依赖库
2.1 Libssl
源码地址:[ Downloads ] - /source/index.html。
当前使用版本:3.0.13
解压源码包,在其目录创建生成目录:
mkdir _install
(说明,为了不损坏系统自带ssl库,暂时编译出来的新的ssl库放到源码目录_install目录下,最后编译wpa_supplicant的时候使用,以下库同)
./config no-asm no-shared no-async --prefix = $PWD /_install make && make install;
2.2 libnl
libnl提供应用层和驱动之间的IPC通信机制,当wpa_supplicant仅配置为使用Wext接口时,无需使用该库。
源码地址:http://www.linuxfromscratch.org/blfs/view/svn/basicnet/libnl.html
当前使用版本:3.9.0
解压源码包,在其目录执行:
mkdir _install ./configure --prefix = $PWD /_install --enable-static make && make install;
2.3 libdbus
源码地址:http://www.linuxfromscratch.org/blfs/view/svn/basicnet/libnl.html
当前使用版本:3.9.0
解压源码包,在其目录执行:
mkdir _install ./configure --prefix = $PWD /_install --enable-static make; make install
3 . 重新编译wap_supplicant
解压源码,从defconfig拷贝到.config,修改.config文件或者Makefile,在文件对应位置添加编译的dbus、libssl和libnl路径,只要能够参与到最终的编译连接过程即可,可以如下修改:
//definition
OPENSSL_PATH=/home/USR_NAME/Downloads/openssl-3.0.13 LIBNL_PATH=/home/USR_NAME/Downloads/libnl-3.9.0 DBUS_PATH=/home/USR_NAME/Downloads/dbus-1.15.8 EXPAT_PATH=/home/USR_NAME/Downloads/expat-2.6.2
!!!特别注意,这里的Path定义是USR_NAME当前Download的源码所在的位置,需要根据自己的下载情况更新!!!
//include header and lib
# added by user start CFLAGS += -I$(OPENSSL_PATH)/_install/include LIBS += -I$(OPENSSL_PATH)/_install/lib CFLAGS += -I$(LIBNL_PATH)/_install/include LIBS += -I$(LIBNL_PATH)/_install/lib CFLAGS += -I$(DBUS_PATH)/_install/include LIBS += -I$(DBUS_PATH)/_install/lib LDFLAGS += -pthread # added by user end
注意:静态链接时必须增加上段末句 LDFLAGS += -pthread 而非 LDFLAGS += -lpthread ,否则dbus、libssl和libnl无法找到链接到pthread线程库;
最后执行编译命令:
mkdir _install cp defconfig .config make make install DESTDIR=$PWD/_install/
最后生成的bin文件位于源码目录:
wap_suppliant/_install/usr/local/sbin 目录下;
说明 1:以上编译结果为动态链接,如需静态链接,只需在Makefile中对应项目的编译语句增加-static关键字再编译即可,例如:
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs) $(Q)$(LDO) -static $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS) @$(E) " LD " $@
说明 2:编译过程中如果出现如下问题:
Netlink/netlink.h 找不到;
或/netlink/genl/genl.hnetlink/genl/genl.h: 没有此类文件或者目录
根据问题提示不同,可能需要安装如下的软件包:
sudo apt-get install libnl-3-dev sudo apt-get install libnl-3-dev sudo apt-get install libnl-route-dev
-
4._wap_supplicant bin文件的裁减
4.1 直接通过命令strip裁剪
若目标板flash空间大小限制,可以裁剪生成的bin文件,通过strip命令完成,该测试程序结果如下:
4.2 通过裁剪相关feature达到瘦身的目的
通过配置config文件,删除产品不需要的feature,比如是否支持SAP以及有些相应的WiFi协议若不支持,可以删除。
4.3 wext或nl80211
Wext(Wireless Extensions, 无线扩展接口)和nl80211都是目前Linux支持的无线网络配置接口,它们的区别网上有很多文章已经介绍了,总而言之,nl80211接口将会继承Wext的接力棒,逐渐成为Linux网络接口的主流选择。nl指的是netlink,nl80211接口通过netlink技术管理应用层和驱动的通信。
wpa_supplicant同时支持两种网络接口,但是在一些特定的场合例如连接某个特殊的热点或者内核的配置不同,我们只需要其中一种。因此可以通过裁剪接口的方式降低应用程序的体积。若需裁减掉Wext接口,则可基于deconfig文件注释掉以下内容:
#CONFIG_DRIVER_WEXT=y
5._不同接口下wpa_supplicant 运行命令
// WEXT: wpa_supplicant -D wext -i wlan0 -c /etc/wpa.conf & //NL80211: wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa.conf &
这篇关于更换Ubuntu原生wpa_supplicant说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!