BOBO's Note

Cross Compile 본문

Embedded System

Cross Compile

bobo_hee 2020. 5. 25. 00:41

Host와 Target

임베디드 소프트웨어를 개발할 때, host와 target으로 나뉜다.

  • Host: 애플리케이션을 개발하는 머신

  • Target: 개발된 애플리케이션을 실행할 머신

host와 target은 다양한 방법으로 연결되는데 주로 serial 통신, 이더넷, JTAG 등으로 연결된다.

 

Toolchain

툴체인은 소프트웨어를 개발하는 데에 필요한 툴들을 모아놓은 것이다. Native toolchain은 host에서 실행되어 host에서 실행되는 프로그램을 생성한다. 반면, cross-compiling toolchain은 host에서 실행되지만 target에서 실행될 프로그램을 생성한다.

Toolchain

cross-compiling toolchain에는 다음과 같은 것들이 포함된다.

  • Binutils: 해당 CPU 아키텍처에 해당하는 바이너리(=오브젝트) 파일을 생성 및 조작하기 위한 툴들의 집합

    • 예) as, ld, objdump 등

  • Kernel Headers: 라이브러리 및 애플리케이션에서 커널 기능을 사용하기 위해 제공되어야 하는 정보들

    • <linux/...>, <asm/...>과 커널 소스의 include 디렉토리 밑에 정의되어 있다.

    • 예) 시스템 콜 및 시스템 콜 번호, 매크로 상수 등

  • C/C++ Libraries: 시스템 콜을 이용해 애플리케이션에 표준 API를 제공

    • cross-compiling toolchain 생성할 때 사용할 라이브러리를 선택한다. 라이브러리마다 용량이 다르기 때문에 target 환경에 맞게 선택한다.

    • 예) glibc, uClibc, uClibc-ng 등

  • C/C++ Compiler: GCC (C, C++ 등의 컴파일러 집합, 다양한 CPU 아키텍처에 대해 컴파일한다)

  • GDB Debugger: optional하게 포함할 수 있다.

 

Crosstool-NG

cross-compiling toolchain을 직접 컴파일하기는 어렵다. 설정해줘야 하는 것도 많고, 빌드해야 할 파일도 많기 때문이다. 따라서 대부분의 경우, 미리 컴파일된 툴체인을 다운받아 사용하거나 자동으로 컴파일해주는 툴을 사용한다.

 

미리 컴파일된 툴체인을 다운받는 경우, 다음과 같이 바로 설치할 수 있다.

$ sudo apt install gcc-arm-linux-gnueabihf

가장 간단하고 편리한 방법이지만 니즈에 맞게 세부 설정을 조정하지 못한다는 단점이 있다.

 

Crosstool-NG는 툴체인 빌드 과정을 자동화해준다. 사용자가 쉽게 툴체인 설정을 바꾸어 빌드할 수 있게 도와준다.

 

cf) Buildroot/Yocto: 툴체인, 루트 파일 시스템, 커널, 부트로더를 빌드해주는 툴

'Embedded System' 카테고리의 다른 글

Android Boot Sequence  (0) 2020.05.26
임베디드 시스템의 Boot Sequence  (0) 2020.05.26
Generic Boot Sequence  (0) 2020.05.25
Linux Kernel의 개념  (0) 2020.05.22
Embedded System의 개념  (0) 2020.05.22
Comments