Как собрать openssl для arm linux - PullRequest
0 голосов
/ 24 марта 2020

Я работаю с Ubuntu x86 и у меня есть кросс-компилятор g cc для Arm linux.

Я хочу собрать open ssl github project для arm linux.

Я прочитал документы, но не смог понять, как это сделать.

1 Ответ

1 голос
/ 24 марта 2020

Предполагая, что здесь вы строите для 64-битной системы 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-битную систему с поддержкой аппаратного обеспечения с плавающей запятой, нам просто нужно немного изменить адаптировать процедуру для трех команд:

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 - это, как следует из его названия, обобщенная цель c 32 бит linux, которая должна работать в любой 32-битной системе. Вы можете найти эту информацию во многих местах на Inte rnet, например, здесь . Недостатком является то, что исполняемый файл не может быть оптимизирован для вашей цели. Если вы прочтете сценарий Configure, вы увидите список переменных среды, которые вы можете указать для направления компиляции. Например, если ваш So C является cortex-a9, вы можете передать опцию -mtune=cortex-a9, установив CFLAGS - вы найдете много информации о Inte rnet, но я бы посоветовал взглянуть на Configure, он содержит много полезных комментариев.

Кстати, если вы выполните Configure с несуществующей целью, вы получите список всех возможных:

./Configure does-not-exist

2) hf означает аппаратное с плавающей запятой. Некоторые 32-битные манипуляторы Так что C имеет аппаратную поддержку для операций с плавающей запятой, а некоторые нет. Поскольку вы не указали точную марку / модель So C, на которую вы нацеливались, я предположил и использовал цепочку инструментов, способную генерировать код для аппаратного обеспечения с плавающей запятой, когда оно присутствует.

...