himix200 openssl


原文链接: 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)。

  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

`