himix200 openssl
openssl 新版本 config 变化较大
git clone https://github.com/openssl/openssl.git
1、 openssl 移植
https://www.openssl.org/ 下载解压后先阅读 README 和INSTALL 文档
git clone --branch OpenSSL_1_1_1d https://github.com/openssl/openssl.git
可能出现的错误提示
remote: Enumerating objects: 9817, done.
error: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
解决方法
apt-get install gnutls-bin
git config --global http.sslVerify false
git config --global http.postBuffer 1048576000
安装依赖
apt-get update
apt-get install build-essential checkinstall zlib1g-dev -y
下载包
wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar -zxf openssl-1.1.1d.tar.gz
执行configure
cd ./openssl-1.1.1d/./Configure linux-armv4 no-asm no-async no-shared --prefix=${PWD}/../libssl --cross-compile-prefix=arm-himix200-linux-
make depend
如果编译报错,并提示"m64"字样报错信息,多半是交叉编译器不支持m64选项。解决办法:
修改Makefile ,若有-m32或-m64 字段,直接删除即可
* linux-armv4 解决错误 cc1: error: unrecognized command line option "-m64"
* no-asm 在交叉编译过程中不使用汇编代码代码加速编译过程
* no-async 没有提供GNU C的ucontext库,避免如下报错:
```text
./libcrypto.so: warning: gethostbyname is obsolescent, use getnameinfo() instead.
./libcrypto.so: undefined reference to `getcontext'
./libcrypto.so: undefined reference to `setcontext'
./libcrypto.so: undefined reference to `makecontext'
```
* no-shared 生成静态链接库
* --prefix 指定生成lib include bin目录的路径,不修改此项则默认为OPENSSLDIR目录
编译
make -j16
make install
创建软链接
ln -sv /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sv /usr/local/openssl/include/openssl /usr/include/openssl
设置动态库地址
export LD_LIBRARY_PATH=/usr/local/libssl/lib:$LD_LIBRARY_PATH
echo '/usr/local/openssl/lib' > /etc/ld.so.conf.d/openssl-ld.conf
ldconfig -v
查看版本
openssl version
完成安装后,你可以在/home/alex/openssl/发现include和lib。其中include包含头文件集合,lib是生成的静态库(.a.1.1)和动态库文件(.so.1.1)。
- 打开Makefile,删除里面所有的-m64和-m32编译选项。
三、编译
1.执行make编译工程;
2.执行make install,在源文件路径会生成一个install文件。
自己编译的时候使用的交叉编译工具链有点特殊,是在每次编译前运行一个shell来设置编译所需的环境变量(CC、CXX、AR等),这个时候编译可能会出问题,需要修改Makefile,注释以下几行:
#CC=$(CROSS_COMPILE)gcc #注释掉
#CXX=$(CROSS_COMPILE)g++ #注释掉
CPPFLAGS=
CFLAGS=-Wall -O3
CXXFLAGS=-Wall -O3
LDFLAGS=
EX_LIBS=
MAKEDEPEND=$(CROSS_COMPILE)gcc #不确定是否一定要注释掉,验证后再来说明
PERL=/usr/bin/perl
#AR=$(CROSS_COMPILE)ar #注释掉
ARFLAGS= r
RANLIB=$(CROSS_COMPILE)ranlib #不确定是否一定要注释掉,验证后再来说明
RC= $(CROSS_COMPILE)windres #不确定是否一定要注释掉,验证后再来说明
RCFLAGS=
编译 sha1_test.c 实例
#include <stdio.h>
#include <openssl/sha.h>
int main()
{
SHA_CTX s;
int i, size;
char c[512];
unsigned char hash[20];
// 初始化 SHA Contex, 成功返回1,失败返回0
SHA1_Init(&s);
// 循环调用此函数,可以将不同的数据加在一起计算SHA1,成功返回1,失败返回0
while ((size = read(0, c, 512)) > 0){ // 0 从标准输入读 ·man 2 read·
SHA1_Update(&s, c, size);
}
// 输出SHA1结果数据,成功返回1,失败返回0
SHA1_Final(hash, &s);
for (i = 0; i < 20; i++){
printf("%.2x", (int)hash[i]);
}
printf("\n");
}
arm-himix200-linux-gcc sha1.c -I ../libssl/include/ -L ../libssl/lib/ -lssl -lcrypto -ldl
编译通过,在当前目录生成sha1_test.out可执行文件
将sha1_test.out拷贝到ARM设备上export LD_LIBRARY_PATH=../libssl/lib:$LD_LIBRARY_PATH
执行./sha1_test.out < sha1_test.out
输出:78b32a7882a5ffea5d48b2f2b6bea633fa78e0e1
移植成功。
————————————————
版权声明:本文为CSDN博主「智能天下」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zntx02/article/details/82798522
Openssl 精简
grep -r '^#if.*OPENSSL_NO' . | grep -o 'OPENSSL_NO_[a-zA-Z0-9_]*' | sort -u | sed 's/OPENSSL_//' | tr '[A-Z_]' '[a-z-]'
执行Configure是常见参数选项如下:
安装参数:
安装目录,默认是 /usr/local/ssl 。
--openssldir=OPENSSLDIR
设置 lib include bin 目录的前缀,默认为 OPENSSLDIR 目录。
--prefix=PREFIX
设置安装时以此目录作为"根"目录,通常用于打包,默认为空。
--install_prefix=DESTDIR
使用静态的zlib压缩库、使用动态的zlib压缩库、不使用zlib压缩功能。
zlib
zlib-dynamic
no-zlib
是否编译支持多线程的库。默认支持。
threads
no-threads
是否生成动态连接库。
shared
no-shared
是否在编译过程中使用汇编代码加快编译过程。
asm
no-asm
启用/禁用SSE2指令集加速。如果你的CPU支持SSE2指令集,就可以打开,否则就要关闭。
enable-sse2
no-sse2
启用/禁用GMP库
gmp
no-gmp
启用/禁用实现X509v3证书的IP地址扩展
rfc3779
no-rfc3779
启用/禁用 Kerberos 5 支持
krb5
no-krb5
启用/禁用 SSL(包含了SSL2/SSL3) TLS 协议支持。
ssl
no-ssl
ssl2
ssl3
no-ssl2
no-ssl3
tls
no-tls
启用/禁用调用其它动态链接库的功能。[提示]no-dso仅在no-shared的前提下可用。
dso
no-dso
禁用选项
摘要算法
no-md2,no-md4,no-mdc2,no-ripemd
对称加密算法
no-des,no-rc2,no-rc4,no-rc5,no-idea,no-bf,no-cast,no-camellia
不对称加密算法
no-ec,no-dsa,no-ecdsa,no-dh,no-ecdh
数据压缩算法
no-comp
对象存储功能
no-store