openssl移植到arm-linux全过程

本文章记录了将openssl移植到arm-linux下的全部过程

移植环境

编译环境:Ubuntu18.04-amd64
模板环境:i.mx6ul Linux 4.1.15
编译链:arm-linux-gnueabihf-4.7

下载openssl源代码

在官网下载源代码,我使用的最新版本1.1.1c,官网链接如下:
https://www.openssl.org/source/
或者直接下载链接如下
直接下载链接
在linux下可以使用如下命令直接下载

wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz

下载完成后解压,解压命令如下:

tar zxvf openssl-1.1.1c.tar.gz

交叉编译

进入解压后的openssl-1.1.1c文件夹下,根据习惯应该使用./config进行配置自动生成Makefile文件

./config no-asm shared --prefix=/home/xx/arm-openssl/ CROSS_COMPILE=/home/xx/arm-linux-gnueabihf-4.7/bin/arm-linux-gnueabihf- CC=gcc

完成后直接make就行
但是!发现编译过程大量警告,基本都是64位和32位不兼容问题。这个可以忽略。
然后严重的问题是arm-linux-gnueabihf-4.7编译器是不提供GNU C的ucontext库,最后有些tools找不到对应函数,导致编译报错。
也就是./config的简单配置是不行的,要用./Configure的自定义配置

./Configure linux-generic32 no-asm shared no-async --prefix=/home/xx/arm-software/arm-openssl CROSS_COMPILE=/home/xx/arm-linux-gnueabihf-4.7/bin/arm-linux-gnueabihf- CC=gcc

这里解释下:
linux-generic32表示标准32位linux
no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的
shared :生成动态连接库
no-async:没有提供GNU C的ucontext库
完成后直接

make
make install


然后在上面—prefix=指定路径下就找到了编译好的文件

编译好的openssl
然后查看文件属性
openssl文件属性
确定交叉编译成功。

移植到开发板下

将编译好的文件夹打包发送到开发板下任意可读写目录,然后解压缩。
例如我放在了/opt/openssl下,得到如下路径和文件夹

进入bin目录运行openssl报错
运行报错
查看该so文件在lib目录下呢,说明环境变量不对,修改环境变量

export LD_LIBRARY_PATH=/opt/openssl/lib:$LD_LIBRARY_PATH

上面命令以我的路径为例,请自行修改自己的lib路径。运行后再进入bin目录运行openssl程序,看到>就是说明运行成功了
运行成功
下面测试下openssl在i.mx6ul(Cortex A7单核800MHz)下的性能吧,以RSA-2048为例:

./openssl speed rsa2048


妈耶!私匙生成每秒8.4次???!!!还好这个过程不会很频繁啊(大概吧,SSL和TLS我也不懂)。

结语

总之记录下所有移植过程,方便自己回忆并放在其他人走弯路。不过i.mx6ul跑openssl确实不太适合,低频Cortex-A7对于大运算量还是有点吃力了。
之前移植ptyhon2.7和sqlite过程就没有记录,现在也不想再来一次了。下一步有时间了计划移植ubuntu-core文件系统到i.mx6ul下,不知道256MB的FLASH能否放得下。如果可以就能免去交叉编译之苦了。

有啥不对的地方欢迎指正,有什么问题欢迎留言探讨。

已标记关键词 清除标记
相关推荐
make时出错: 报错内容:cc1: warning: include location "/usr/include" is unsafe for cross-compilation [-Wpoison-system-directories] In file included from cryptlib.h:62:0, from cryptlib.c:117: /usr/include/stdlib.h:759:34: fatal error: bits/stdlib-bsearch.h: No such file or directory compilation terminated. make[1]: *** [cryptlib.o] Error 1 make: *** [build_crypto] Error 1 具体编译安装过程如下: 安装文件: openssl-1.0.2h.tar.gz 参考网址: http://blog.csdn.net/zy799894671/article/details/22289039 1、 arm-config.sh : ./config no-asm shared --prefix=/usr/local/arm-openssl 解决1:./config no-asm shared --prefix=/usr/local/arm-openssl --host=arm-xilinx-linux-gnueabi 解决4:CC=arm-xilinx-linux-gnueabi-gcc ./config no-asm shared --prefix=/usr/local/arm-openssl 2、修改MakeFile: #CC= gcc CC= arm-xilinx-linux-gnueabi-gcc #CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -march=pentium -DL_ENDIAN -O3 -fomit-frame-pointer -Wall CFLAG= -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_N -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_SSL2 -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DOPENSSL_NO_WEAK_SSL_CIPHERS PEX_LIBS= EX_LIBS= -ldl EXE_EXT= ARFLAGS= #AR= ar $(ARFLAGS) r AR= arm-xilinx-linux-gnueabi-ar $(ARFLAGS) r #RANLIB= /usr/bin/ranlib RANLIB= arm-xilinx-linux-gnueabi-ranlib #NM= nm NM= arm-xilinx-linux-gnueabi-nm PERL= /usr/bin/perl TAR= tar TARFLAGS= --no-recursion #MAKEDEPPROG= gcc MAKEDEPPROG= arm-xilinx-linux-gnueabi-gcc LIBDIR=lib make depend后出现错误: cc1: error: include location "/usr/include" is unsafe for cross-compilation [-Werror=poison-system-directories] cc1: all warnings being treated as errors 错误分析原因: 这种错误在网上有两种可能: 1、不能交叉编译到默认目录下,需要编译到单独的文件夹中(之前已经那么做了) 2、依赖库需要先交叉编译,这里错误目录是"/usr/include" 故也不是这个问题。 错误解决尝试1: 将配置后增加--host=arm-xilinx-linux-gnueabi ,详看1点 然后修改 makefile 错误不变 错误解决尝试2: 1步骤后 增加一步 # ./config -t 错误不变 错误尝试解决3 2步骤 多修改Makefile文件一处 #PLATFORM=linux-elf PLATFORM=arm-xilinx-linux-gnueabi 错误不变 错误尝试解决4 1步骤 将arm-config.sh前增加为:CC=arm-xilinx-linux-gnueabi-gcc 错误不变 错误尝试解决5 增加arm的环境变量 export ARCH=arm export CROSS_COMPILE=arm-xilinx-linux-gnueabi- 错误不变
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页