更换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

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

Spring Boot Actuator使用说明

《SpringBootActuator使用说明》SpringBootActuator是一个用于监控和管理SpringBoot应用程序的强大工具,通过引入依赖并配置,可以启用默认的监控接口,... 目录项目里引入下面这个依赖使用场景总结说明:本文介绍Spring Boot Actuator的使用,关于Spri

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

在Ubuntu上部署SpringBoot应用的操作步骤

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

Redis分布式锁使用及说明

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