在armv7上用现有的openssl版本交叉编译蚊子

您所在的位置:网站首页 交叉编译openssl 在armv7上用现有的openssl版本交叉编译蚊子

在armv7上用现有的openssl版本交叉编译蚊子

2023-03-27 03:26| 来源: 网络整理| 查看: 265

我(到目前为止)还没能成功地在嵌入式armv7设备上交叉编译蚊子和TLS。如果没有TLS,交叉编译就可以正常工作。

嵌入式设备数据:

# cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 2 (v7l) BogoMIPS : 548.86 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x3 CPU part : 0xc08 CPU revision : 2 Hardware : Generic AM33XX (Flattened Device Tree) Revision : 0000 Serial : 0000000000000000 # openssl version -a OpenSSL 1.1.1i 8 Dec 2020 not available platform: linux-armv4 options: bn(64,32) rc4(char) des(long) idea(int) blowfish(ptr) compiler: gcc -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DNDEBUG -DOPENSSL_TLS_SECURITY_LEVEL=0 OPENSSLDIR: "/usr/ssl" ENGINESDIR: "/usr/lib/engines-1.1" Seeding source: random-device ( "/dev/urandom" "/dev/random" "/dev/hwrng" "/dev/srandom" )

我从嵌入式设备发行商那里得到了交叉编译器,并将其安装在我的机器上:

$ mkdir /opt/advantech $ cd /opt/advantech $ git clone https://bitbucket.org/bbsmartworx/Toolchains.git $ sudo dpkg -i Toolchains/deb/*.deb ### The cross compiler is saved under /opt/toolchain/gcc-conel-armv7-linux-gnueabi

接下来,下载与嵌入式设备相同的OpenSSL版本(1.1.1i)

$ wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz $ tar xfz openssl-1.1.1i.tar.gz $ cd openssl-1.1.1i $ ./Configure linux-armv4 --cross-compile-prefix=/opt/toolchain/gcc-conel-armv7-linux-gnueabi/bin/armv7-linux-gnueabi- --prefix=/opt/arm/v7/openssl/ --openssldir=/opt/arm/v7/openssl shared ### I have also tried using the options I got when doing "openssl version -a" on the embedded device, ### but the final result is the same.. ### ./Configure linux-armv4 --cross-compile-prefix=/opt/toolchain/gcc-conel-armv7-linux-gnueabi/bin/armv7-linux-gnueabi- --prefix=/opt/arm/v7/openssl/ --openssldir=/opt/arm/v7/openssl shared -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DNDEBUG -DOPENSSL_TLS_SECURITY_LEVEL=0 -fPIC -pthread -Wa,--noexecstack -Wall -O3 $ make $ make install $ cd /opt/arm/v7/openssl/bin/ $ file openssl openssl: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.12.10, stripped $ ls -la openssl -rwxr-xr-x 1 eh eh 554356 Feb 19 09:36 openssl ### The file size on my machine does NOT matches the one on the embedded device: $ ssh root@embedded-device # ls -la /usr/bin/openssl -rwxr-xr-x 1 root root 535796 Dec 17 10:36 /usr/bin/openssl # exit Connection to embedded-device closed.

在交叉编译器的sysroot中移动OpenSSLs包含和库:

$ cd /opt/toolchain/gcc-conel-armv7-linux-gnueabi/sysroot/usr/lib $ sudo cp -P /opt/arm/v7/openssl/lib/libcrypto* . $ sudo cp -P /opt/arm/v7/openssl/lib/libssl* . $ cd /opt/toolchain/gcc-conel-armv7-linux-gnueabi/sysroot/usr/include $ sudo cp -r /opt/arm/v7/openssl/include/openssl .

下载蚊子并交叉编译它

$ wget https://mosquitto.org/files/source/mosquitto-2.0.7.tar.gz $ tar xvfz mosquitto-2.0.7.tar.gz $ cd mosquitto-2.0.7 $ make CC=/opt/toolchain/gcc-conel-armv7-linux-gnueabi/bin/armv7-linux-gnueabi-gcc CXX=/opt/toolchain/gcc-conel-armv7-linux-gnueabi/bin/armv7-linux-gnueabi-g++ AR=/opt/toolchain/gcc-conel-armv7-linux-gnueabi/bin/armv7-linux-gnueabi-ar LD=/opt/toolchain/gcc-conel-armv7-linux-gnueabi/bin/armv7-linux-gnueabi-ld $ file src/mosquitto src/mosquitto: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.12.10, stripped $ file lib/libmosquitto.so.1 lib/libmosquitto.so.1: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, stripped

将交叉编译的蚊子和库转移到嵌入式设备:

$ scp src/mosquitto root@embedded-device:/opt/mosquitto/bin/. $ scp lib/libmosquitto.so.1 root@embedded-device:/usr/lib/. $ ssh root@embedded-device # cd /opt/mosquitto/bin/ # ./mosquitto ./mosquitto: symbol lookup error: ./mosquitto: undefined symbol: ENGINE_load_builtin_engines, version OPENSSL_1_1_0

如前所述,当我修改蚊子的config.mk以不使用TLS和TLS_PSK时,它可以在嵌入式设备上正常工作。

config.mk:

WITH_TLS:=yes # when set to "no", no errors on embedded device WITH_TLS_PSK:=yes # when set to "no", no errors on embedded device WITH_CJSON:=no # is always set to no

如何交叉编译OpenSSL,使其与嵌入式设备上安装的版本100%匹配?

不能更改嵌入式设备上的OpenSSL。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3