툴체인(toolchain)은 특정 아키텍처에서 소프트웨어를 개발하고 빌드하기 위한 도구들의 집합을 말한다. Yocto 프로젝트에서는 호스트 시스템에서 타겟 시스템의 바이너리를 생성하기 위해 교차 컴파일(cross-compilation) 도구를 사용한다. 이 장에서는 Yocto 프로젝트의 개발 환경을 설정하고, 적절한 툴체인을 구성하는 방법에 대해 설명한다.

툴체인 다운로드 및 설치

Yocto 프로젝트는 meta-toolchain 클래스를 사용해 툴체인을 생성할 수 있다. meta-toolchain 클래스를 이용하면 SDK(Software Development Kit)를 생성할 수 있으며, 이를 통해 호스트 시스템에서 타겟 바이너리를 컴파일할 수 있다.

  1. 빌드 설정

빌드 디렉토리로 이동하여, 설정을 위해 oe-init-build-env 스크립트를 실행한다.

sh cd /path/to/yocto/project source oe-init-build-env

  1. local.conf 설정

conf/local.conf 파일을 열어 SDK 설정을 추가한다. 다소 기본적인 예를 들어보겠다.

sh # 추가 또는 다음과 같이 수정 MACHINE ??= "qemux86"

  1. 툴체인 생성

bitbake 명령어를 사용하여 SDK 및 툴체인을 빌드한다.

sh bitbake core-image-sato -c populate_sdk

이는 core-image-sato 이미지를 생성하고 그에 맞는 SDK를 생성한다. 다른 이미지 타입도 사용할 수 있다.

  1. 툴체인 설치

생성된 SDK가 호스트에 설치된다. 일반적으로 아래와 같은 위치에 설치 파일이 생성된다.

sh tmp/deploy/sdk/poky-glibc-x86_64-core-image-sato-i586-toolchain-2.4.sh

설치 파일을 실행하여 툴체인을 설치한다.

sh ./tmp/deploy/sdk/poky-glibc-x86_64-core-image-sato-i586-toolchain-2.4.sh

스크립트를 실행하면 설치 디렉토리를 묻는 메시지가 표시된다. 디렉토리를 입력하여 설치를 완료한다.

환경 변수 설정

툴체인이 설치된 후에는 해당 툴체인을 사용하기 위해 몇 가지 환경 변수를 설정해야 한다.

  1. 환경 설정 스크립트 실행

설치 후에는 $INSTALL_DIR/environment-setup-* 스크립트를 실행하여 환경을 설정한다.

sh source /opt/poky/2.4/environment-setup-i586-poky-linux

이 스크립트는 컴파일러, 라이브러리 경로 및 기타 필수 변수를 설정한다.

  1. 환경 변수 확인

환경 변수가 제대로 설정되었는지 확인한다.

sh echo $CC

출력은 /opt/poky/2.4/sysroots/x86_64-pokysdk-linux/usr/bin/i586-poky-linux/i586-poky-linux-gcc와 같은 경로를 가리켜야 한다.

크로스 컴파일

설치된 툴체인을 사용하여 타겟 애플리케이션을 크로스 컴파일할 수 있다. 여기서는 간단한 "Hello World" 프로그램을 예로 들어 보겠다.

  1. 소스 파일 작성

hello.c 파일을 작성한다.

```c #include

int main() { printf("Hello, World!\n"); return 0; } ```

  1. 크로스 컴파일

환경 설정 스크립트를 실행한 터미널에서 크로스 컴파일한다.

sh $CC hello.c -o hello

  1. 타겟에서 실행

타겟 시스템으로 컴파일된 바이너리를 전송하고 실행한다.

sh scp hello user@target:/path/to/executable ssh user@target /path/to/executable/hello

실행 결과로 "Hello, World!" 메시지가 출력될 것이다.

빌드 스크립트 및 설정

프로젝트 빌드 과정을 자동화하기 위해 Makefile이나 CMake를 사용할 수 있다. 이는 크게 차이는 없지만 설정 과정이 약간 다르다.

  1. Makefile 예제

간단한 Makefile 예제를 보겠다. Makefile을 작성한다.

```makefile CC = $(CROSS_COMPILE)gcc CFLAGS = -O2

hello: hello.c (CC)(CFLAGS) -o hello hello.c ```

  1. CMake 예제

CMake를 사용하는 경우, CMakeLists.txt 파일을 작성한다.

```cmake cmake_minimum_required(VERSION 3.10) project(hello)

set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR i586)

set(CMAKE_C_COMPILER /opt/poky/2.4/sysroots/x86_64-pokysdk-linux/usr/bin/i586-poky-linux/i586-poky-linux-gcc)

add_executable(hello hello.c) ```

CMake 빌드 디렉토리를 만들고, 빌드 과정을 진행한다.

sh mkdir build cd build cmake .. make