툴체인(toolchain)은 특정 아키텍처에서 소프트웨어를 개발하고 빌드하기 위한 도구들의 집합을 말한다. Yocto 프로젝트에서는 호스트 시스템에서 타겟 시스템의 바이너리를 생성하기 위해 교차 컴파일(cross-compilation) 도구를 사용한다. 이 장에서는 Yocto 프로젝트의 개발 환경을 설정하고, 적절한 툴체인을 구성하는 방법에 대해 설명한다.
툴체인 다운로드 및 설치
Yocto 프로젝트는 meta-toolchain
클래스를 사용해 툴체인을 생성할 수 있다. meta-toolchain
클래스를 이용하면 SDK(Software Development Kit)를 생성할 수 있으며, 이를 통해 호스트 시스템에서 타겟 바이너리를 컴파일할 수 있다.
- 빌드 설정
빌드 디렉토리로 이동하여, 설정을 위해 oe-init-build-env
스크립트를 실행한다.
sh
cd /path/to/yocto/project
source oe-init-build-env
- local.conf 설정
conf/local.conf
파일을 열어 SDK 설정을 추가한다. 다소 기본적인 예를 들어보겠다.
sh
# 추가 또는 다음과 같이 수정
MACHINE ??= "qemux86"
- 툴체인 생성
bitbake
명령어를 사용하여 SDK 및 툴체인을 빌드한다.
sh
bitbake core-image-sato -c populate_sdk
이는 core-image-sato
이미지를 생성하고 그에 맞는 SDK를 생성한다. 다른 이미지 타입도 사용할 수 있다.
- 툴체인 설치
생성된 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
스크립트를 실행하면 설치 디렉토리를 묻는 메시지가 표시된다. 디렉토리를 입력하여 설치를 완료한다.
환경 변수 설정
툴체인이 설치된 후에는 해당 툴체인을 사용하기 위해 몇 가지 환경 변수를 설정해야 한다.
- 환경 설정 스크립트 실행
설치 후에는 $INSTALL_DIR/environment-setup-*
스크립트를 실행하여 환경을 설정한다.
sh
source /opt/poky/2.4/environment-setup-i586-poky-linux
이 스크립트는 컴파일러, 라이브러리 경로 및 기타 필수 변수를 설정한다.
- 환경 변수 확인
환경 변수가 제대로 설정되었는지 확인한다.
sh
echo $CC
출력은 /opt/poky/2.4/sysroots/x86_64-pokysdk-linux/usr/bin/i586-poky-linux/i586-poky-linux-gcc
와 같은 경로를 가리켜야 한다.
크로스 컴파일
설치된 툴체인을 사용하여 타겟 애플리케이션을 크로스 컴파일할 수 있다. 여기서는 간단한 "Hello World" 프로그램을 예로 들어 보겠다.
- 소스 파일 작성
hello.c
파일을 작성한다.
```c
#include
int main() { printf("Hello, World!\n"); return 0; } ```
- 크로스 컴파일
환경 설정 스크립트를 실행한 터미널에서 크로스 컴파일한다.
sh
$CC hello.c -o hello
- 타겟에서 실행
타겟 시스템으로 컴파일된 바이너리를 전송하고 실행한다.
sh
scp hello user@target:/path/to/executable
ssh user@target /path/to/executable/hello
실행 결과로 "Hello, World!" 메시지가 출력될 것이다.
빌드 스크립트 및 설정
프로젝트 빌드 과정을 자동화하기 위해 Makefile이나 CMake를 사용할 수 있다. 이는 크게 차이는 없지만 설정 과정이 약간 다르다.
- Makefile 예제
간단한 Makefile 예제를 보겠다. Makefile
을 작성한다.
```makefile CC = $(CROSS_COMPILE)gcc CFLAGS = -O2
hello: hello.c (CC)(CFLAGS) -o hello hello.c ```
- 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