热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linuxwifi驱动之三方库wpa_supplicant移植

1libopenssl移植wpa_supplicant依赖于libopenssl,因此需要先移植libopenssl,首先获取openssl-1.1.

1 libopenssl移植

wpa_supplicant 依赖于 libopenssl,因此需要先移植 libopenssl,首先获取openssl-1.1.1-stable-SNAP-20190915.tar.gz压缩包,拷贝到Ubuntu系统下并解压,得到openssl-1.1.1-stable-SNAP-20190915文件夹,然后在新建一个名为“libopenssl”的文件夹,用于存放 libopenssl 的编译结果。进入到解压出来的 openssl-1.1.1-stable-SNAP-20190915 目录中,然后执行如下命令进行配置:

./config shared no-asm --prefix=/home/topeet/tool/libopenssl/

配置成功以后会生成 Makefile,打开 Makefile,找到所有包含“-m64”的内容,一共两处分别为变量 CNF_CFLAGS 和 CNF_CXXFLAGS,将这两个变量中的“-m64”删除掉,修改后如图 1.1所示:
在这里插入图片描述
图 1.1
Makefile 修改好以后使用如下命令编译并安装 libopenssl:

make CROSS_COMPILE=arm-linux-gnueabihf- -j4
make install

编译安装完成后在libopenssl目录下有如图 1.2内容:
在这里插入图片描述
图 1.2
其中的 lib 目录是我们需要的,将 lib 目录下的所有文件拷贝到开发板根文件系统中的/usr/lib 目录下。当使用U盘拷贝文件是可能会“无法创建符号链接”,这样的文件可以先将lib目录下的文件打包成tar.gz格式的压缩包,然后拷贝到根文件系统下解压到/usr/lib目录下。执行下面的命令:

cd /home/topeet/tool/libopenssl/lib/ //进入lib目录下
tar -czvf lib.tar.gz * //打包当前目录下的文件生成lib.tar.gz

然后通过U盘拷贝到根文件系统下解压到/usr/lib目录下。

mount /dev/sda1 /mnt //挂载U盘到mnt目录下
tar -xvf /mnt/lib.tar.gz -C /usr/lib //直接解压lib.tar.gz到/usr/lib目录下

“-C”指定解压的目录。


2 libnl库移植

wpa_supplicant 也依赖于 libnl,因此还需要移植一下 libnl 库,获取libnl-3.2.23.tar.gz压缩包,然后拷贝到Ubuntu系统下并解压,得到libnl-3.2.23文件夹,然后在新建一个名为“libnl”的文件夹,用于存放 libnl 的编译结果。进入到 libnl-3.2.23 文件夹中,然后执行如下命令进行配置:

./configure --host=arm-linux-gnueabihf --prefix=/home/topeet/tool/libnl/

–host 用于指定交叉编译器的前缀,这里设置为“arm-linux-gnueabihf”,–prefix 用于指定编译结果存放目录,这里要设置为我们刚刚创建的 libnl 文件夹。配置完成以后就可以执行如下命令对 libnl 库进行编译、安装:

make -j12
make install

编译安装完成后的libnl目录下如图 2.1所示:
在这里插入图片描述
图 2.1
需要用到libnl文件下的lib库文件,通过U盘拷贝lib下的库文件到/usr/lib目录下。


3 wpa_supplicant 移植

接下来移植wpa_supplicant,获取wpa_supplicant源码包wpa_supplicant-2.7.tar.gz,拷贝到Ubuntu系统下并解压,得到wpa_supplicant-2.7文件夹,进入wpa_supplicant-2.7目录下,有如图 3.1内容:
在这里插入图片描述
图 3.1
进入到图中的 wpa_supplicant 目录下,然后进行配置,wpa_supplicant 的配置比较特殊,需要将 wpa_supplicant 下的 defconfig 文件拷贝一份并重命名为.config,命令如下:

cd wpa_supplicant/
cp defconfig .config

完成以后打开.config 文件,在里面指定交叉编译器、openssl、libnl 库和头文件路径,设置如下:

CC = arm-linux-gnueabihf-gcc/* openssl 库文件和头文件路径*/CFLAGS += -I/home/topeet/tool/libopenssl/includeLIBS += -L/home/topeet/tool/libopenssl/lib -lssl -lcrypto/*libnl库文件和头文件路径*/CFLAGS += -I/home/topeet/tool/libnl/include/libnl3LIBS += -L/home/topeet/tool/libnl/lib

CC 变量用于指定交叉编译器,这里就是arm-linux-gnueabihf-gcc,CFLAGS 指定需要使用的库头文件路径,LIBS 指定需要用到的库路径。编译 wap_supplicant 的时候需要用到 openssl 和libnl 库,所以在代码中指定了这两个的库路径和头文件路径。上述内容在.config 中的如图 3.2所示:
在这里插入图片描述
图 3.2
.config文件修改完成后就可以编译wap_supplicant了,在wap_supplicant目录下使用下列命令编译:

export PKG_CONFIG_PATH=/home/topeet/tool/libnl/lib/pkgconfig:$PKG_CONFIG_PATH
make

首先我们使用 export 指定了 libnl 库的 pkgconfig 路径,环境变量 PKG_CONFIG_PATH 保存着 pkgconfig 包路径。在tool/libnl/lib/下有个名为“pkgconfig”的目录,如图 3.3所示;
在这里插入图片描述
图 3.3
编译 wpa_supplicant 的时候是需要指定 libnl 的 pkgconfig 路径,否则会提示“libnl-3.0”或者“libnl-3.0.pc”找不到等错误。编译完成以后就会在本目录下生成 wpa_supplicant 和 wpa_cli这两个命令,如图 3.4所示:
在这里插入图片描述
图 3.4
将编译好的wpa_cli 和 wpa_supplicant 这两个文件拷贝到开发板根文件系统的/usr/bin 目录下,拷贝完成后,可以测试一下这两个命令能否使用,在终端下输入下面的命令:

wpa_supplicant -v

上面的命令查看一下 wpa_supplicant 版本号,如果 wpa_supplicant 工作正常的话就会打印出版本号,如图 3.5所示:
在这里插入图片描述图 3.5
可以看出wpa_supplicant 的版本号输出正常,说明 wpa_supplicant 移植成功,接下来就是使用 wpa_supplicant 将开发板的 WIFI 链接到热点上,实现 WIFI 上网功能。


四、WIFI联网测试


1. 创建配置文件

在开发板根目录/etc下创建配置文件:wpa_supplicant.conf,添加以下配置内容:

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={ssid="Mculover666"psk="mculover666"
}

在var目录下创建用到的目录:

mkdir -p /var/run/wpa_supplicant

2. 连接热点

wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &

在这里插入图片描述


3. 获取ip地址

udhcpc -i wlan0

在这里插入图片描述
查看网卡:
在这里插入图片描述
查看路由表:
在这里插入图片描述


4. ping通外网测试

在这里插入图片描述


五、问题记录


1. 问题描述

udhcpc获取到ip地址后,没有设置到网卡。
在这里插入图片描述


2. 问题定位

该问题是由于使用busybox制作根文件系统时,没有把udhcpc的脚本拷贝过去。


3. 问题解决

下载之前制作根文件系统使用的busybox源码

拷贝busybox源码中 examples/udhcp/simple.script 脚本,到开发板根文件系统的 /usr/share/udhcpc(不能改路径,否则要重新修改编译busybox源码),并重命名为:default.script。
在这里插入图片描述


推荐阅读
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • PHP 5.4.8 编译安装指南
    本文详细介绍了如何在Linux环境下编译安装PHP 5.4.8,并配置为FastCGI模式运行。包括所需依赖包的安装、源代码下载、编译配置及启动服务等步骤。 ... [详细]
  • Linux环境下的PHP7安装与配置指南
    本文详细介绍了如何在Linux操作系统中安装和配置PHP7,包括检查当前PHP版本、升级PHP以及配置MySQL支持等步骤,适合后端开发者参考。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • 本文介绍了如何在Windows操作系统中安装FFTW库,并详细说明了使用Visual Studio 2010进行4096点快速傅里叶变换(FFT)的步骤。包括下载预编译文件、生成库文件以及配置环境等关键环节。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 本文介绍了如何通过源码编译和PECL命令来升级Swoole扩展,详细记录了可能遇到的问题及解决方案。 ... [详细]
  • 我们正在使用GNU Make来构建我们的系统,在makefile文件的末尾,我们通过一个名为Makedepends的包含来生成一系列的.d文件。然而,当文件被删除或移动时,依赖关系会中断,我们需要寻找一种方法来优雅地处理这种情况。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 在Linux系统中使用EncFS实现文件夹加密
    为了保护个人隐私或敏感数据不被未经授权的访问,可以通过加密技术来增强安全性。本文介绍如何在Linux系统上使用EncFS工具创建和管理加密文件夹,以确保即使在系统登录状态下,特定文件夹中的数据也保持加密状态。 ... [详细]
  • Linux内核中的内存反碎片技术解析
    本文深入探讨了Linux内核中实现的内存反碎片技术,包括其历史发展、关键概念如虚拟可移动区域以及具体的内存碎片整理策略。旨在为开发者提供全面的技术理解。 ... [详细]
  • Unix与Linux的起源与发展
    本文详细探讨了Unix与Linux的操作系统起源,从自由软件运动的兴起,到Linux内核的诞生,全面解析了这两款操作系统的发展历程及其对现代计算技术的影响。 ... [详细]
  • 本文主要解决了在编译CM10.2时出现的关于Samsung Exynos 4 HDMI HAL库中SecHdmiV4L2Utils.cpp文件的编译错误。 ... [详细]
author-avatar
张琇萍家云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有