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