更换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上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,