网卡驱动学习五、hostapd 移植测试

1. openssl-1.1.1h 移植

1.1 openssl 简介

  在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。

  SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。

  SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

1.2 openssl-1.1.1h 下载

1.2 openssl-1.1.1h 解压配置

输入 tar -zxvf openssl-1.1.1h.tar.gz命令进行解压,进入openssl-1.1.1h 目录创建install文件夹;
执行./config no-asm no-async shared --prefix=$(pwd)/install CROSS_COMPILE=arm-linux-gnueabihf- 命令配置相关文件生成Makefile 在这里插入图片描述
配置说明
no-asm:在交叉编译过程中不使用汇编代码加速编译过程
shared:生成动态链接库
no-async: 交叉编译工具链没有提供GNU C的ucontext库
--prefix=:安装路径(修改为当前自己的路径)

配置成功界面如下:
在这里插入图片描述
修改Makefile相管配置
修改平台的版本,将x86_64修改成armv7(依据自己所在的平台选)
在这里插入图片描述
删除所有-m64
在这里插入图片描述
在这里插入图片描述

1.3 openssl-1.1.1h 编译安装

    编译:make -j6
    安装:make install//将生成的相关库文件安装到创建的install目录

在这里插入图片描述
安装完成后install目录下会生成按装好的文件如下图:
在这里插入图片描述
install/lib 目录下会生成动态库(xx.so)
注意: 若要在install/lib 目录下生成静态库(xx.a)
若要生成静态库 执行./config no-asm no-async no-shared --prefix=$(pwd)/install CROSS_COMPILE=arm-linux-gnueabi- 命令

1.4 openssl-1.0.2h 的配置有所区别

    ./config no-asm no-async shared --prefix=$(pwd)/install//生成动态库
    ./config no-asm no-async no-shared --prefix=$(pwd)/install//生成静态库

Makefile的配置移植的相关配置界面如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. libnl-3.5.0 移植

2.1 libnl 简介

libnl (Netlink Protocol Library Suite) 套件是一组库,为基于 netlink 协议的 Linux 内核接口提供 API。
Netlink 是一种主要介于内核和用户空间进程之间的 IPC 机制。它被设计为 ioctl 的更灵活的继承者,主要提供与网络相关的内核配置和监控接口。

2.2 libnl-3.5.0 下载

注意有两个下载地址,应该下载的文件名为:libnl-3.5.0.tar.gz
下载网站: http://www.linuxfromscratch.org/blfs/view/svn/basicnet/libnl.html
Download (HTTP): https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-3.5.0.tar.gz

2.2 libnl-3.5.0 解压配置

输入 tar -zxvf libnl-3.5.0.tar.gz 命令进行解压,进入libnl-3.5.0 解压后的目录创建install文件夹;
执行./configure --host=arm-linux-gnueabihf --prefix=$PWD/install 命令配置相关文件生成Makefile
在这里插入图片描述
在这里插入图片描述

2.3 编译安装

 make -j6
 make  instal

编译安装完成后如下: 在这里插入图片描述在install目录下会生成如下文件夹
在这里插入图片描述
在install/lib目录下会生成如下文件夹生成动态库
在这里插入图片描述

2.4 生成静态库

输入 ./configure --host=arm-linux-gnueabi --prefix=$PWD/install --enable-static 命令
make -j6
make install
编译安装后会在install/lib文件夹生成静态库
在这里插入图片描述
若是低版本的按照如下修改Makefile生成静态库: https://www.cnblogs.com/TiddlerYu/p/12643041.html

3. hostapd 安装

3.1 hostapd 简介

  hostapd 是Linux下一款IEEE 802.11 AP创建软件,它可以通过使用一块无线网卡来创建WiFi访问点,将当前的网络共享出来,实现的功能类似于Windows下面的百度WiFi或者360WiFi。和Windows下面一样,要成功的创建一个AP访问点,除了要有合适的无线网卡和驱动之外,dhcp服务的配置和开启内核的流量转发也必须同时到位。

3.1 hostapd 下载

下载链接: http://w1.fi/releases/
最新的hostapd版本为v2.9
在这里插入图片描述

3.2 解压配置

输入 tar -zxvf hostapd -2.9.tar.gz 命令进行解压,解压后进入hostapd-2.9/hostapd/目录
运行 cp defconfig .congfig //复制出执行文件,配置相关依赖环境,如下:
在这里插入图片描述

  CC=arm-linux-gnueabihf-gcc
  CFLAGS += -I../../openssl-1.1.1h/install/include
  LIBS += -L../../openssl-1.1.1h/install/lib -lcrypto -lssl
  CFLAGS += -I../../libnl-3.5.0/install/include
  LIBS += -L../../libnl-3.5.0/install/lib 

  LDFLAGS += -lpthread
  LDFLAGS += -lm

在这里插入图片描述
若后面编译出现如下错误此处需将 LDFLAGS += -lpthread改成 LDFLAGS += -pthread
在这里插入图片描述
pthread_atfork是POSIX标准,在编译时要加上-pthread-lpthread是老版本的gcc编译器用的,在新版本中应该用-pthread取代-lpthread

3.3 添加环境变量

编译hostapd的时候是需要指定libnl的pkgconfig路径,否则会提示“libnl-3.0”或者“libnl-3.0.pc”找不到等错误。
vi ~/.bashrc
在这里插入图片描述 生效source ~/.bashrc刚才配置的环境变量
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.4 编译安装

执行make & make install命令编译和安装,安装完后如下
在这里插入图片描述
编译完成以后就会在本目录下生成hostapd和hostapd_cli这两个软件
在这里插入图片描述

3.5 打包hostapd相关的库文件

准备所需的库文件、配置文件、执行文件到开发板arm-linux-gnueabi-readelf -d hostapd
在这里插入图片描述移植测试
将生成的hostapd、hostapd_cli移植到根文件系统/sbin目录下
因为Openssl-1.1.1h的库是静态的,编译hostapd时已经移到固件中,只需要移植Libnl-3.5.0生成的两个动态库文件在根文件系统的/lib目录下,如下图:
在这里插入图片描述
移植成功后在开发板执行hostapd -v命令后有如下反馈则移植成功:
在这里插入图片描述

3.6 hostapd的两种依赖方式(CONFIG_TLS)

3.6.1 依赖openssl

配置.config文件,将CONFIG_TLS配置为openssl
在这里插入图片描述此时需调用Oenssl相关的库文件(具体安装如上),在Makefile中 配置相关的库
在这里插入图片描述
此种方式生成的执行文件偏大
在这里插入图片描述
使用strip工具,将hostapd,hostapd_cli等工具调试信息去掉,减少可执行文件的大小(arm-linux-gnueabi-strip hostapd)
在这里插入图片描述

3.6.2 不依赖openssl(依赖internal)

  • 配置.config(将CONFIG_TLS配置为openssl),并取消如下注释
    在这里插入图片描述
  • Makefile文件中,取消对Openssl库的调用
    在这里插入图片描述修改完后 make clean & make,此时在当前文件下生成固件
    在这里插入图片描述
    使用strip工具,将hostapd,hostapd_cli等工具调试信息去掉,减少可执行文件的大小 arm-linux-gnueabi-strip hostapd
    在这里插入图片描述
    由于开发板flash空间较小,出于节省空间的考虑,选用第二种

4. 移植过程中的问题

  • 出现找不到相应的库文件,提示版本冲突,一般是交叉编译工具链不同,调用libnl相关的库与hostapd所有的工具链不一致,注意修改libnl生成Makefile的编译工具链默认gcc。 在这里插入图片描述
  • 找不到相应的文件有可能是调用库的版本太高,降低版本可解决。
  • 可用的工具链如下:
	arm-linux-guneabihf-gcc  (编译完后命令跑不起来)
	arm-linux-guneabi-gcc (编译内核是用的较多) //推荐
	arm-none-linux-guneabi-gcc (同行推荐用的未验证)
  • make编译hostapd后生成hostapd执行文件注意查看其属性,必须是arm才行,使用”file hostapd“命令查看如下图:
    在这里插入图片描述
    若平台未修改默认是x86_64,或者未用交叉工具链,生成的文件为64位的则不能在开发板上运行如下图:
    在这里插入图片描述
  • CONFIG_TLS配置问题
    在这里插入图片描述
    在这里插入图片描述
  • 若hostapd版本低于2.7时,需打开.config里面的
    在这里插入图片描述
    否侧会出现如下错误
    在这里插入图片描述
    2.7版本以上此处默认打开#CONFIG_LIBNL32=y

5. 关于裁减

由于开发板的falsh空间较小,为8M,,生成的hostapd大小为3.5M左右,因此需要对生成的hostapd大小进行裁剪,减少部分用不到的功能,配置 /hostapd2.7/hostapd/.config 文件取消掉部分冗余的功能。
在这里插入图片描述编译完之后 使用arm-linux-gnueabi-strip hostapd命令去掉符号表信息固件会很小
在这里插入图片描述
.config相关功能配置说明
https://blog.csdn.net/sean_8180/article/details/86496922
在这里插入图片描述
裁减相关链接: https://www.cnblogs.com/TiddlerYu/p/12887557.html

6. 相关的参考连接如下:

https://www.bilibili.com/read/cv8387154/
https://blog.csdn.net/happygrilclh/category_7789655.html
https://www.cnblogs.com/tiddleryu/p/12887557.html
https://blog.csdn.net/Turix/article/details/112910483

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Engineer-Jaylen_Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值