개요
본 문서에서는 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 |