更换Ubuntu原生wpa_supplicant说明

2024-03-18 16:28

本文主要是介绍更换Ubuntu原生wpa_supplicant说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 前言

      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 修改点

      主要是一些系统库的支持,后文详解;

    1.   编译依赖库

      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说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/822928

相关文章

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统