프로그래밍/Embedded

OpenSSL-1.1.1i cross-compile for AM335X

채윤아빠 2020. 12. 29. 18:05
728x90
반응형

 

개요

본 문서에서는 AM335X 보드의 리눅스를 위한 OpenSSL-1.1.1i cross-compile 방법에 대하여 설명합니다.

기본 운영 환경은 다음과 같습니다.

  • Host PC OS : Windows 10
  • Virtual Machine : VirtualBox 6.x
  • Guest OS : Ubuntu-14.04.2 x86
  • Target AM335X SBC : ARMv7, 512MB RAM, 512MB eMMC, Linux 3.2 kernel

개발환경 설정

필수 S/W

개발 환경 설정을 위하여 다음 S/W를 미리 준비하여 둡니다.

  • VirtualBox or VMWare
  • putty or Teraterm

본 문서에서는 VirtualBox와 putty를 주로 이용합니다.

Ubuntu-14.04 Guest OS installation

VirtualBox에 Guest로 설치할 OS로 Ubuntu-14.04 x86 Desktop 버전의 ISO 파일을 다운로드 받아 놓습니다.

 

VirtualBox에 다운로드 받은 Ubuntu-14.04 x86 Desktop ISO 파일로 Guest OS를 설치합니다.

OpenSSH-1.1.1i 소스 준비

VirtualBox에 설치된 Guest OS인 Ubuntu에 로그인하여,
다음과 같이 최신 OpenSSL 소스를 빌드할 폴더에 내려 받고, 압축을 풀어 빌드할 OpenSSL 소스를 준비합니다.

# cd ~
# mkdir work ; cd work
# wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz
# tar xfz openssl-1.1.1i.tar.gz

TI cross-compiler 개발 환경 구성

다음 절차대로 AM335X cross-compiler 개발 환경 구성을 위한 SDK를 설치합니다.

  • 다음 링크에서 2개의 파일을 다운로드
    • ti-sdk-am335x-evm-06.00.00.00-Linux-x86-Install.bin
    • sitara-linuxsdk-sdg-06.00.00.00.pdf ; 개발 환경 구성 설명서
    • Ubuntu 14.04 (x86) 이하에서만 설치 프로그램이 정상 동작
  • ti-sdk-am335x-evm-06.00.00.00-Linux-x86-Install.bin를 실행하여 SDK 설치
    • chmod +x ti-sdk-am335x-evm-06.00.00.00-Linux-x86-Install.bin
    • ./ti-sdk-am335x-evm-06.00.00.00-Linux-x86-Install.bin
  • 함께 다운로드 받은 sitara-linuxsdk-sdg-06.00.00.00.pdf 파일 33페이지부터 SDK설치 방법
  • 설치 후 setup script 실행, 36페이지에 설명되어 있음
  • SDK가 설치된 디렉토리 내에 cross compiler가 포함되어 있음
    • cross compiler 경로 : ~/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin

OpenSSH-1.1.1i 빌드

cross-compiler 개발 환경 로딩

현재 콘솔에서 설치된 TI SDK 빌드 환경 정보를 다음과 같이 구성합니다.

# cd ~/work/openssl-1.1.1i
# source ~/ti-sdk-am335x-evm/linux-devkit/environment-setup
[linux-devkit]:~/work/openssl-1.1.1i>

빌드 환경이 구성되면 콘솔의 프롬프트에 "[linux-devkit]"이 표시됩니다.

Makefile 구성

cross-platform 빌드 환경이 구성된 상태에서 openssl 빌드를 위한 Makefile을 다음과 같이 생성합니다.

[linux-devkit]:~/work/openssl-1.1.1i> sudo mkdir -p /data/openssl
[linux-devkit]:~/work/openssl-1.1.1i> sudo chown -R hunature:hunature /data
[linux-devkit]:~/work/openssl-1.1.1i> ./Configure linux-armv4 shared --prefix=/data/openssl
Configuring OpenSSL version 1.1.1i (0x1010109fL) for linux-armv4
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL file first)         ***
***                                                                ***
**********************************************************************

본 문서에서는 target board의 "/data" 파티션에 여유 공간이 있어서 prefix를 "/data/openssl"로 하여 빌드합니다.

build openssl-1.1.1i

빌드 준비가 완료되었으므로, 소스를 빌드하고 설치합니다.

[linux-devkit]:~/work/openssl-1.1.1i> time make

make[1]: Leaving directory `/home/hunature/work/openssl-1.1.1i'

real    2m57.945s
user    2m20.948s
sys     0m10.700s

install openssl-1.1.1i

위와 같이 정상적으로 빌드가 완료되었다면, 다음과 같이 설치합니다.
용량 등의 제약이 있어서 man page 등의 문서가 필요 없다면, "make install_sw"로 용량을 줄여서 설치할 수도 있습니다.

[linux-devkit]:~/work/openssl-1.1.1i> time make install

*** Installing runtime programs
install apps/openssl -> /data/openssl/bin/openssl
install ./tools/c_rehash -> /data/openssl/bin/c_rehash

real    2m3.694s
user    1m40.616s
sys     0m7.928s

예전 openssl 소스를 빌드하고, "make install" 과정에서 다음과 같은 오류 발생할 수 있습니다.

참고 : https://qastack.kr/ubuntu/454575/error-255-when-trying-to-install-openssl-1-0-1g-from-source

 

POD 파일과 perl 버전이 맞지 않아서 발생하는 경우가 많습니다.

POD document had syntax errors at /usr/bin/pod2man line 71.
make: *** [install_docs] Error 255

이 경우 "make install_sw"로 문서 설치를 제외하여 일단 해당 문제를 우회할 수 있습니다.

 

최종 빌드된 "lib" 폴더의 내용은 다음과 같습니다.

drwxrwxr-x 2 hunature hunature    4096 12월 28 13:51 engines-1.1/
-rw-r--r-- 1 hunature hunature 4520996 12월 28 13:51 libcrypto.a
lrwxrwxrwx 1 hunature hunature      16 12월 28 13:51 libcrypto.so -> libcrypto.so.1.1*
-rwxr-xr-x 1 hunature hunature 3349271 12월 28 13:51 libcrypto.so.1.1*
-rw-r--r-- 1 hunature hunature  865120 12월 28 13:51 libssl.a
lrwxrwxrwx 1 hunature hunature      13 12월 28 13:51 libssl.so -> libssl.so.1.1*
-rwxr-xr-x 1 hunature hunature  735858 12월 28 13:51 libssl.so.1.1*
drwxrwxr-x 2 hunature hunature    4096 12월 28 13:51 pkgconfig/

*.a 파일은 정적 빌드시 필요한 파일이므로, target board에서는 삭제합니다.


Target 보드에 적용 및 동작 시험

scp 명령을 이용하여 cross-compile된 결과 파일을 target board로 복사합니다.

# scp -r /data/openssl/* root@192.168.123.196:/data/openssl

target board에서 다음과 같이 실제 동작하는데 필요하지 않은 파일들은 삭제합니다.

# cd /data/openssl
# rm -fr include/ share/ lib/libcrypto.a lib/libssl.a

다음과 같이 심볼릭 링크를 새로 생성하여 줍니다.

# cd /data/openssl/lib
# rm -f libcrypto.so libssl.so
# ln -s libcrypto.so.1.1 libcrypto.so
# ln -s libssl.so.1.1 libssl.so

openssl 공용 라이브러리를 위하여 "LD_LIBRARY_PATH"를 다음과 같이 설정합니다.

export LD_LIBRARY_PATH='/data/openssl/lib'

설정한 "openssl" 버전을 확인합니다.

# /data/openssl/bin/openssl version
OpenSSL 1.1.1i  8 Dec 2020

"openssl.cnf" 파일 경로는 "Configure"에서 "/data/openssl"로 prefix를 설정하였으므로 "/data/openssl/ssl" 으로 빌드됩니다.

"make install"로 설치한 경우, "/data/openssl/ssl"에 기본적인 설정 파일이 함께 있으나, "make install_sw"로 설치하면 "/data/openssl/ssl" 폴더 자체가 없으므로, 해당 폴더를 만든 후 "openssl.cnf" 파일을 직접 생서하여 주면 됩니다.




'프로그래밍 > Embedded' 카테고리의 다른 글

CSR uEnergy Starter Dev Kit SDK Installation  (3) 2014.06.13
개발보드 관련 자료 정리  (0) 2014.05.22