如何为 arm linux 构建 openssl
How to build openssl for arm linux
我使用 Ubuntu x86 并拥有适用于 Arm linux 的 gcc 交叉编译器。
我想为手臂 linux 构建 open ssl github project。
我阅读了文档,但无法理解如何构建它。
假设您正在为 64 位 arm Linux 系统构建,此后的独立程序应该可以工作 - 为我工作 Ubuntu 19.10
x86_64
:
# openssl
wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz
tar zxf openssl-1.1.1e.tar.gz
# a toolchain I know is working
wget "https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz?revision=61c3be5d-5175-4db6-9030-b565aae9f766&la=en&hash=0A37024B42028A9616F56A51C2D20755C5EBBCD7" -O gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz
mkdir -p /opt/arm/9
tar Jxf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/arm/9
# building
cd openssl-1.1.1e
./Configure linux-aarch64 --cross-compile-prefix=/opt/arm/9/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- --prefix=/opt/openssl-1.1.1e --openssldir=/opt/openssl-1.1.1e -static
make install
ls -gG /opt/openssl-1.1.1e/bin/
total 10828
-rwxr-xr-x 1 6214 Mar 23 23:27 c_rehash
-rwxr-xr-x 1 11077448 Mar 23 23:27 openssl
file /opt/openssl-1.1.1e/bin/openssl
/opt/openssl-1.1.1e/bin/openssl: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.7.0, with debug_info, not stripped
如果您想构建一个支持硬件浮点的 32 位 arm 系统,我们只需稍微修改一下程序以适应三个命令:
wget "https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz?revision=fed31ee5-2ed7-40c8-9e0e-474299a3c4ac&la=en&hash=76DAF56606E7CB66CC5B5B33D8FB90D9F24C9D20" -O gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz
tar Jxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz -C /opt/arm/9
./Configure linux-generic32 --cross-compile-prefix=/opt/arm/9/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf- --prefix=/opt/openssl-1.1.1e --openssldir=/opt/openssl-1.1.1e -static
更新:阅读评论后提供更多信息。
1) linux-generic32
顾名思义,是一个通用的 32 位 linux 目标,应该可以在任何 32 位系统上运行。您可以在 Internet 上的很多地方找到此信息,例如 here。缺点是可执行文件可能未针对您的目标进行优化。如果您阅读 Configure
脚本,您将看到一个环境变量列表,您可以指定这些环境变量来指导编译。例如,如果你的 SoC 是 cortex-a9,你可以通过设置 CFLAGS
来传递选项 -mtune=cortex-a9
- 你会在互联网上找到很多信息,但我建议看看 Configure
,它确实包含了很多有用的评论。
顺便说一下,如果你用一个不存在的目标执行Configure
,你会得到所有可能的目标的列表:
./Configure does-not-exist
2) hf 代表硬件浮点数。一些 32 位 arm SoC 确实有浮点运算的硬件支持,有些则没有。由于您没有指定所针对的 SoC 的确切 brand/model,我进行了猜测,并使用了能够为 arm 浮点硬件生成代码的工具链(如果存在)。
我使用 Ubuntu x86 并拥有适用于 Arm linux 的 gcc 交叉编译器。
我想为手臂 linux 构建 open ssl github project。
我阅读了文档,但无法理解如何构建它。
假设您正在为 64 位 arm Linux 系统构建,此后的独立程序应该可以工作 - 为我工作 Ubuntu 19.10
x86_64
:
# openssl
wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz
tar zxf openssl-1.1.1e.tar.gz
# a toolchain I know is working
wget "https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz?revision=61c3be5d-5175-4db6-9030-b565aae9f766&la=en&hash=0A37024B42028A9616F56A51C2D20755C5EBBCD7" -O gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz
mkdir -p /opt/arm/9
tar Jxf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/arm/9
# building
cd openssl-1.1.1e
./Configure linux-aarch64 --cross-compile-prefix=/opt/arm/9/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- --prefix=/opt/openssl-1.1.1e --openssldir=/opt/openssl-1.1.1e -static
make install
ls -gG /opt/openssl-1.1.1e/bin/
total 10828
-rwxr-xr-x 1 6214 Mar 23 23:27 c_rehash
-rwxr-xr-x 1 11077448 Mar 23 23:27 openssl
file /opt/openssl-1.1.1e/bin/openssl
/opt/openssl-1.1.1e/bin/openssl: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.7.0, with debug_info, not stripped
如果您想构建一个支持硬件浮点的 32 位 arm 系统,我们只需稍微修改一下程序以适应三个命令:
wget "https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz?revision=fed31ee5-2ed7-40c8-9e0e-474299a3c4ac&la=en&hash=76DAF56606E7CB66CC5B5B33D8FB90D9F24C9D20" -O gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz
tar Jxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz -C /opt/arm/9
./Configure linux-generic32 --cross-compile-prefix=/opt/arm/9/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf- --prefix=/opt/openssl-1.1.1e --openssldir=/opt/openssl-1.1.1e -static
更新:阅读评论后提供更多信息。
1) linux-generic32
顾名思义,是一个通用的 32 位 linux 目标,应该可以在任何 32 位系统上运行。您可以在 Internet 上的很多地方找到此信息,例如 here。缺点是可执行文件可能未针对您的目标进行优化。如果您阅读 Configure
脚本,您将看到一个环境变量列表,您可以指定这些环境变量来指导编译。例如,如果你的 SoC 是 cortex-a9,你可以通过设置 CFLAGS
来传递选项 -mtune=cortex-a9
- 你会在互联网上找到很多信息,但我建议看看 Configure
,它确实包含了很多有用的评论。
顺便说一下,如果你用一个不存在的目标执行Configure
,你会得到所有可能的目标的列表:
./Configure does-not-exist
2) hf 代表硬件浮点数。一些 32 位 arm SoC 确实有浮点运算的硬件支持,有些则没有。由于您没有指定所针对的 SoC 的确切 brand/model,我进行了猜测,并使用了能够为 arm 浮点硬件生成代码的工具链(如果存在)。