wpa_supplicant工具移植到嵌入式设备

news2024/12/22 23:02:28

1、wpa_supplicant源码下载

(1)源码下载地址:http://w1.fi/releases/;
(2)本文是以wpa_supplicant-2.6.tar.gz版本进行移植;

2、编译openssl

2.1、确定适配的openssl版本

Optional libraries for EAP-TLS, EAP-PEAP, and EAP-TTLS:
- OpenSSL (tested with 1.0.1 and 1.0.2 versions; assumed to
  work with most relatively recent versions; this is likely to be
  available with most distributions, http://www.openssl.org/)
- GnuTLS
- internal TLSv1 implementation

(1)在wpa_supplicant源码的README说明文档中对适配的openssl版本做了说明,从上面可以2.6版本的wpa_supplicant适配1.01和1.0.2版本的openssl;
(2)如果没有在编译wpa_supplicant源码没有指定openssl,则会报错:…/src/crypto/tls_openssl.c:19: fatal error: openssl/ssl.h: No such file or directory
(3)源码下载地址:http://www.openssl.org/;

2.2、修改Makefile

#修改安装目录
# INSTALL_PREFIX is for package builders so that they can configure
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
# Normally it is left empty.
INSTALL_PREFIX=
INSTALLTOP=/home/aston/S5PV210/USB_WIFI/openssl/openssl_install

# Do not edit this manually. Use Configure --openssldir=DIR do change this!
OPENSSLDIR=/home/aston/S5PV210/USB_WIFI/openssl/openssl_install

# 修改编译链
CC= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc
AR= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ar $(ARFLAGS) r
RANLIB= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ranlib
NM= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-nm

在主Makefile中修改openssl的安装目录和编译链;

2.3、删除掉文档安装

#install: all install_docs install_sw
install: all install_sw

(1)在安装openssl时会报错:POD document had syntax errors at /usr/bin/pod2man line 69
(2)是因为安装文档时报错,说明文档不是必须的且我们编译openssl是为了编译wpa_supplicant工具,不需要说明文档,将install目标后面的依赖install_docs删除;

2.4、编译指令

# 编译opensll源码
root@Ubunut220401:openssl-1.0.1# make -4

# 安装openssl
root@Ubunut220401:openssl-1.0.1# make install

# 安装目录的产物
root@Ubunut220401:openssl_install# ls
bin  certs  include  lib  man  misc  openssl.cnf  private

3、wpa_supplicant源码编译

3.1、生成配置文件

Building and installing
-----------------------

In order to be able to build wpa_supplicant, you will first need to
select which parts of it will be included. This is done by creating a
build time configuration file, .config, in the wpa_supplicant root
directory. Configuration options are text lines using following
format: CONFIG_<option>=y. Lines starting with # are considered
comments and are ignored. See defconfig file for an example configuration
and a list of available options and additional notes.

The build time configuration can be used to select only the needed
features and limit the binary size and requirements for external
libraries. The main configuration parts are the selection of which
driver interfaces (e.g., nl80211, wext, ..) and which authentication
methods (e.g., EAP-TLS, EAP-PEAP, ..) are included.

(1)上面是摘抄自wpa_supplicant源码的README说明文档,里面是关于编译wpa_supplicant源码的步骤说明,其中要求必须在编译前先生成配置文件.config,这和内核编译的机制是一样的,.config里是对wpa_supplicant工具的配置;
(2)在源码中有默认的配置文件defconfig ,如果我们没有特殊需求则可以直接将defconfig文件拷贝成.config文件;
(3)在主Makefile中会引用.config文件,命令:-include .config

3.2、修改编译链

ifndef CC
CC=gcc
endif

(1)在主Makefile中有编译链的设置,如果在调用Makefile时没有指定编译链则使用gcc,所以我们只需要在调用时指定编译链即可;
(2)例如:make CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc

3.3、设置openssl的目录

# 指定openssl头文件的路径
CFLAGS+=-I /home/aston/S5PV210/USB_WIFI/openssl/openssl_install/include

# 指定openssl库的路径
LIBS+=-L /home/aston/S5PV210/USB_WIFI/openssl/openssl_install/lib

3.4、取消CONFIG_DRIVER_NL80211配置

# Driver interface for Linux drivers using the nl80211 kernel interface
#CONFIG_DRIVER_NL80211=y

(1)在编译时报错:…/src/drivers/driver_nl80211.c:17: fatal error: netlink/genl/genl.h: No such file or directory
(2)报错的原因是开启了CONFIG_DRIVER_NL80211配置,这个配置是依赖libnl.a库,但是我当前并没有libnl.a库,所以报错;
(3)我不想去移植libnl.a库且也用不到 nl80211内核接口,所以我将此配置关闭;

推荐

给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】1827. 最少操作使数组递增

题目描述 给你一个整数数组 nums &#xff08;下标从 0 开始&#xff09;。每一次操作中&#xff0c;你可以选择数组中一个元素&#xff0c;并将它增加 1 。 比方说&#xff0c;如果 nums [1,2,3] &#xff0c;你可以选择增加 nums[1] 得到 nums [1,3,3] 。 请你返回使 nums …

ESXi8.0中NVME硬盘不识别解决方法1,设置直通

目录 1.前言 2.直通设置 3.槽点 1.前言 ESXi8.0删除了很多老版本的硬件的驱动程序&#xff0c;导致NVME1.3及更低协议的固态硬盘均无法被ESXi直接识别正如我手头准备了尚好的服务器专用PM983A却无法识别。本着不折腾先熟悉ESXi8.0的思路另外找了一块盘装了ESXi的系统。本以为…

云原生之使用Docker部署webssh工具sshwifty

云原生之使用Docker部署webssh工具sshwifty一、sshwifty介绍1.sshwifty简介2.shwifty 特点二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载sshwifty镜像四、服务器生成凭证文件五、创建sshwifty容器1.创建部署目录2.创建sshwifty容器3.查看sshwifty容器状态六…

uniapp 之 小程序线上版本一直处于加载状态

前言 最开始小程序都是体验版的&#xff0c;后来应老大需求&#xff0c;把体验版提交审核为正式版本&#xff08;线上版本&#xff09;&#xff0c; 原本以为版本审核得花费几天时间&#xff0c;没想到它这审核速度挺快的&#xff0c;不到3小时就审核通过了&#xff0c;审核…

[go]汇编语言

文章目录计算机结构常量与变量全局变量常量数组字符串函数参数与返回值goroutineGo汇编程序无法独立使用&#xff0c;必须以Go包的方式组织&#xff0c;同时包中至少要有一个Go语言文件用于指明当前包名等基本包信息。如果Go汇编代码中定义的变量和函数要被其它Go语言代码引用&…

Spark的架构与基本运行流程

Spark的架构与基本运行流程一、Spark中的核心概念二、Spark中的核心架构设计一、Spark中的核心概念 &#xff08;1&#xff09;RDD&#xff0c;Spark中最核心的概念就是RDD&#xff08;Resillient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;。换而言之&…

MySQL---事务及锁机制

MySQL之事务以及锁机制 文章目录MySQL之事务以及锁机制事务事务的操作1、开启事务&#xff1a;start Transaction2、提交事务&#xff1a;commit Transaction3、回滚事务&#xff1a;Rollback Transactionset命令事务的特性---ACID事务的隔离级别1.READ UNCOMMITTED 读未提交2.…

毒鸡汤 | PHPStudy搭建web项目

文章目录前言展示准备工作环境创建网站新建数据库PHP7现成版自己折腾版前言 折腾了很久&#xff0c;终于自己改成功了。问题不多&#xff0c;主要原因是自己没怎么开发过&#xff0c;不熟悉数据库连接原理&#xff0c;现在回头看真的改的很简单。问题主要是现在用的PHP7和旧版的…

I-03数据结构与算法(python版)

最近学习数据结构&#xff0c;对于从未接触过数据结构的我来说&#xff0c;老师不仅讲解理论&#xff0c;还有代码的逐层分析&#xff0c;非常不错&#xff0c;受益匪浅&#xff01;&#xff01;&#xff01;&#xff08;以下是学习记录&#xff09; 数据结构与算法&#xff0…

DEiT:通过注意力训练数据高效的图像transformer 蒸馏

摘要 最近&#xff0c;纯基于注意力的神经网络被证明可以解决图像理解任务&#xff0c;如图像分类。这些高性能的是使用大型基础设施预先训练数以亿计的图像&#xff0c;从而限制了它们的采用。 本文仅通过在Imagenet上训练&#xff0c;产生有竞争力的无卷积transformer。我们…

react原理-transition概念

在react18之中&#xff0c;引入了transition的概念。而且有一个新的api和两个新的hooks startTransitionuseTransitionuseDeferredValue 场景应用&#xff1a; 比如通过输入框输入内容更新列表内容&#xff0c;对于用户来说&#xff0c;输入框输入之后立马反馈的优先级是高过…

VS ChatGPT 中文版插件安装

1.打开Visual Studio Code 2.搜索chatGpt中文版 3.安装完后&#xff0c;重启一下软件 有国模式和国外模式&#xff0c;更多的教程请看插件作者的视频教程

分布式事物

Seata实践 XA模式 AT模式 TCC模式 性能 Saga模式 高可用------集群的形式 Seata实践解决方案 解决方式 Seata 引入服务协调者模式 实践步骤&#xff1a; 分布式事物的入口方法&#xff0c;会调用其他的微服务&#xff0c;每次调用的服务都是一个分支事物调用了多少个分支事…

SpringSecurity 认证实现

在之前一篇 博客 已经说明了 SpringSecurity 认证与授权的原理。这篇用来具体实现一下。 1、新建SecurityConfig 并创建认证管理器 Bean public AuthenticationManager authenticationManager() {... }2、新建认证提供者 Configuration public class SystemUserPasswordAuth…

Oracle项目管理之PrimaveraUnifier组织-业主/合作伙伴公司

目录 一、业主公司 二、合作伙伴公司 三、成员公司 Oracle Primavera Unifier 是企业项目协同管理系统&#xff0c;在国际化项目管理中&#xff0c;在进行常规的业务管理之外&#xff0c;对合同公司/EPC或分包供应商也有一定的管理要求&#xff0c;在Unifier中为了更好的实现…

sja1000 CAN驱动学习、调试记录(基于PeliCan Mode)

一、基础知识 网上讲sja1000 CAN总线控制器的资料很多&#xff0c;这里放一个引路贴&#xff1a;(151条消息) CAN总线控制器SJA1000_FATE的博客-CSDN博客_sja1000 BasicCAN Mode&#xff1a;仅支持11位的ID。 PeliCan Mode&#xff1a;在扩展模式下&#xff0c;允许使用 11 位 …

找出DataFrame中指定数据类型的列:select_dtypes()函数

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 找出DataFrame中指定数据类型的列 select_dtypes()函数 选择题 下列说法错误的是? import pandas as pd myDF pd.DataFrame({A:[1,2],B:[1.0,2.0],C:[a,b]}) print("【显示】myDF&qu…

leecode#同构字符串#反转链表

题目描述&#xff1a; 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一…

ReentrantLock详解

JUC中的锁API 在juc中有一个Lock接口他的作用和synchronized相似都是为了保证线程安全性提供的解决方案 Lock中定义了一系列释放锁和抢占锁相关的API lock() 抢占锁资源 如果当前线程没有抢占到锁 则阻塞 tryLock() 尝试抢占锁资源 如果抢占成功则返回true 否则返回false unlo…

简单的深度活体智能记忆模型

🍿*★,*:.☆欢迎您/$:*.★* 🍿 正文