Yocto SDK 생성과 활용
1. Yocto SDK란?
Yocto SDK(Software Development Kit)는 특정 플랫폼과 호환되는 소프트웨어를 개발하고 테스트할 수 있도록 환경을 제공하는 도구입니다. Yocto를 사용하여 빌드된 이미지와 함께 SDK를 생성하면, 해당 보드에서 동작하는 애플리케이션과 라이브러리를 크로스 컴파일하고 디버그할 수 있습니다. 이는 특히 임베디드 시스템에서 필수적인 개발 환경입니다.
이번 포스팅에서는 Yocto를 이용해 RK3399 보드를 위한 SDK를 생성하고, 이를 활용하여 크로스 컴파일 환경을 구축하는 방법을 설명합니다. 또한 생성된 SDK를 이용해 패키지를 배포하고 필드에서 업데이트하는 과정까지 다룹니다.
2. Yocto SDK 생성
RK3399 보드를 타겟으로 Yocto SDK를 생성하기 위해서는 Yocto 빌드 시스템을 활용해야 합니다. 먼저 Yocto 프로젝트 환경에서 bitbake
명령어를 통해 SDK를 생성할 수 있습니다.
2.1 SDK 생성 설정
local.conf
파일에 아래와 같이 SDK와 관련된 변수를 설정합니다.
# local.conf 파일에서 아래 설정을 추가합니다.
MACHINE = "rk3399"
SDKMACHINE = "x86_64"
MACHINE
변수는 타겟 보드를 지정하는 항목입니다.SDKMACHINE
변수는 SDK를 실행할 호스트 아키텍처를 정의하는 항목입니다. 일반적으로 x86_64 환경에서 작업하므로x86_64
로 설정합니다.
2.2 SDK 생성 명령어
다음과 같이 명령어를 입력하여 SDK를 생성합니다.
# core-image-minimal 기반으로 SDK를 생성하는 명령어
bitbake core-image-minimal -c populate_sdk
이 명령어는 core-image-minimal
을 기반으로 SDK를 생성합니다. 생성이 완료되면 tmp/deploy/sdk/
디렉터리에서 아래와 같은 파일을 확인할 수 있습니다.
ls tmp/deploy/sdk/
# 예: poky-glibc-x86_64-core-image-minimal-cortexa72-toolchain-3.1.2.sh
이제 해당 설치 스크립트를 사용해 SDK를 설치하면 됩니다.
3. Yocto SDK 설치 및 환경 설정
3.1 SDK 설치
생성된 SDK는 다음과 같이 설치할 수 있습니다.
# 설치 스크립트를 실행합니다.
./poky-glibc-x86_64-core-image-minimal-cortexa72-toolchain-3.1.2.sh
스크립트를 실행하면 설치 경로를 묻는 메시지가 표시됩니다. 기본 경로를 사용하거나 원하는 경로를 지정한 뒤 설치를 진행하면 됩니다.
3.2 SDK 환경 설정
SDK 설치가 완료되면 환경 변수를 설정해야 합니다. SDK 경로 내에 제공되는 환경 설정 스크립트를 실행합니다.
# 환경 설정
source /opt/poky/3.1.2/environment-setup-cortexa72-poky-linux
환경 설정이 완료되면 크로스 컴파일 도구와 라이브러리를 사용할 수 있는 상태가 됩니다.
4. RK3399 크로스 컴파일 환경 구축
4.1 크로스 컴파일러 확인
환경 설정이 완료된 상태에서 다음 명령어로 크로스 컴파일러를 확인할 수 있습니다.
$ echo $CC
arm-poky-linux-gnueabi-gcc
크로스 컴파일러가 정상적으로 설정되었음을 확인한 뒤 간단한 C 프로그램을 작성해보겠습니다.
4.2 예제 프로그램 작성 및 빌드
hello.c
파일을 다음과 같이 작성합니다.
#include <stdio.h>
int main() {
printf("Hello, RK3399 Yocto SDK!\n");
return 0;
}
다음 명령어로 크로스 컴파일을 진행합니다.
$ ${CC} hello.c -o hello
생성된 바이너리를 RK3399 보드로 전송하고 실행해보면 다음과 같이 출력됩니다.
# 보드에서 실행
./hello
Hello, RK3399 Yocto SDK!
5. 패키지 배포 및 필드 업데이트
생성된 애플리케이션이나 라이브러리를 Yocto 환경에서는 패키지로 생성하고 배포하는 것이 가능합니다. 이를 위해 bitbake
의 패키징 기능을 활용합니다.
5.1 패키지 레시피 작성
meta-myapp/recipes-myapp/myapp
디렉터리를 생성하고, myapp_1.0.bb
레시피 파일을 작성합니다.
DESCRIPTION = "MyApp for RK3399"
LICENSE = "MIT"
SRC_URI = "file://hello.c"
S = "${WORKDIR}"
do_compile() {
${CC} ${WORKDIR}/hello.c -o ${WORKDIR}/hello
}
do_install() {
install -d ${D}${bindir}
install -m 0755 ${WORKDIR}/hello ${D}${bindir}
}
FILES_${PN} += "${bindir}/hello"
5.2 패키지 빌드
다음과 같이 패키지를 빌드합니다.
bitbake myapp
빌드가 완료되면 tmp/deploy/ipk/
디렉터리에서 myapp
패키지를 확인할 수 있습니다.
5.3 패키지 설치
보드에서 패키지를 설치하려면 다음과 같이 진행합니다.
# 보드에서 패키지 설치
opkg install myapp_1.0-r0_cortexa72.ipk
설치 후 hello
명령어를 실행하면 앞서 작성한 프로그램이 실행되는 것을 확인할 수 있습니다.
6. 필드 업데이트
필드에서 소프트웨어를 업데이트할 때는 새로운 패키지를 빌드하고 배포하는 방식으로 진행하면 됩니다. 예를 들어, hello.c
의 내용을 변경한 뒤 다시 패키지를 빌드하고, 보드에서 opkg upgrade
명령어를 사용하면 간편하게 업데이트할 수 있습니다.
7. 결론
이번 포스팅에서는 Yocto SDK를 생성하고, 이를 활용하여 RK3399 보드에서 크로스 컴파일 환경을 구축하는 방법을 살펴보았습니다. 또한 패키지를 생성하고 배포하여 필드에서 간편하게 소프트웨어를 업데이트하는 방법까지 설명하였습니다.
이와 같이 Yocto SDK를 활용하면 개발과 배포, 유지보수까지 통합된 워크플로우를 구성할 수 있으며, 특히 임베디드 환경에서 보다 효율적으로 작업을 진행할 수 있습니다.
'Linux > yocto' 카테고리의 다른 글
Yocto 애플리케이션 개발 (0) | 2025.05.23 |
---|---|
고급 개발 기법: 커널 커스터마이징 및 Device Tree 수정 (0) | 2025.05.22 |
Yocto 고급 개발 기법: 디버깅과 성능 튜닝 (0) | 2025.05.19 |
Yocto 프로젝트: 이미지 커스터마이징 (0) | 2025.05.18 |
Yocto 커스텀 레이어: 애플리케이션과 라이브러리 레시피 작성 (0) | 2025.05.16 |