Yocto 프로젝트에서 레시피는 패키지를 빌드하기 위한 모든 정보를 포함하는 스크립트이다. 레시피는 .bb
확장자를 가지며, 다양한 최소 필수 요소를 포함하고 있다.
기본 구조
레시피는 여러 부분으로 나뉜다. 기본적인 구조는 다음과 같다:
- Description (
DESCRIPTION
): 레시피의 간단한 설명이다. - Homepage (
HOMEPAGE
): 프로젝트나 소프트웨어의 홈페이지 URL이다. - License (
LICENSE
): 사용된 라이선스이다. - Source URI (
SRC_URI
): 소스 코드의 위치이다. - Checksum (
SRC_URI[md5sum]
및SRC_URI[sha256sum]
): 파일의 무결성을 확인하기 위한 체크섬이다. - Dependencies (
DEPENDS
): 빌드를 위한 종속성이다. - Package Name (
PN
): 패키지 이름이다. - Package Version (
PV
): 패키지 버전이다.
예제 레시피
아래는 기본적인 Yocto 레시피의 예제이다:
DESCRIPTION = "Simple hello world application"
HOMEPAGE = "http://www.example.com"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SRC_URI = "http://www.example.com/downloads/hello-1.0.tar.gz"
SRC_URI[md5sum] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SRC_URI[sha256sum] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
DEPENDS = "glibc"
S = "${WORKDIR}/hello-1.0"
inherit autotools
do_configure() {
./configure --prefix=${prefix}
}
do_compile() {
oe_runmake
}
do_install() {
install -d ${D}${bindir}
install -m 0755 hello ${D}${bindir}
}
주요 변수 설명
- DESCRIPTION: 패키지에 대한 간단한 설명을 포함한다.
- HOMEPAGE: 프로젝트의 홈페이지 링크를 포함한다.
- LICENSE: 소스 코드의 라이선스를 명시한다.
- LIC_FILES_CHKSUM: 라이선스 파일과 그 파일의 체크섬을 지정한다.
- SRC_URI: 소스 코드의 다운로드 위치를 지정한다.
- SRC_URI[md5sum] 및 SRC_URI[sha256sum]: 다운로드된 소스 파일의 무결성을 확인하기 위한 체크섬이다.
- DEPENDS: 빌드 시 필요한 다른 패키지를 명시한다.
- S: 소스 파일의 경로를 지정한다.
- inherit:
autotools
와 같은 Yocto 클래스(class)를 상속받는다. 이는 기본적인 빌드 과정(구성, 컴파일, 설치 등)을 정의한다. - do_configure: 구성 단계를 수행하는 함수이다. 보통
./configure
스크립트를 실행한다. - do_compile: 컴파일 단계를 수행하는 함수이다. 보통
make
명령을 실행한다. - do_install: 설치 단계를 수행하는 함수이다. 종종 설치 파일과 그 파일의 적절한 위치를 지정한다.
이 외에도 레시피에 포함될 수 있는 중요한 변수와 함수들이 몇 가지 더 있다.
추가 변수
-
RDEPENDS
: 런타임 종속성을 지정한다.bitbake RDEPENDS_${PN} = "dependency1 dependency2"
-
RRECOMMENDS
: 권장되는 런타임 패키지를 지정한다.bitbake RRECOMMENDS_${PN} = "recommended-pkg"
-
RPROVIDES
: 패키지가 제공하는 기능을 지정한다. 패키지 간의 가상 종속성을 관리할 때 유용하다.bitbake RPROVIDES_${PN} = "virtual-package"
-
RCONFLICTS
: 패키지가 충돌하는 다른 패키지를 지정한다.bitbake RCONFLICTS_${PN} = "conflicting-pkg"
추가 함수
-
do_patch
: 소스 코드를 패치하는 단계이다. 패치 파일을 적용하여 소스 코드를 수정할 수 있다.SRC_URI
에 패치 파일 경로를 추가한 후 Yocto가 자동으로do_patch
함수를 실행한다.bitbake SRC_URI += "file://fix-build.patch"
-
do_fetch
: 소스 코드와 패치 파일을 다운로드하는 단계이다. 보통은 이 함수를 수동으로 정의하지 않는다. -
do_unpack
: 다운로드한 파일을 작업 디렉토리에 풀어내는 단계이다. 일반적으로 Yocto는 자동으로 이 단계를 처리한다.
Yocto 클래스
Yocto에서 제공하는 많은 클래스가 있으며, 이를 통해 많은 작업을 자동화할 수 있다. 주요 클래스는 다음과 같다:
autotools
: GNU autotools를 사용하는 프로젝트에 사용한다../configure
,make
,make install
을 자동으로 처리한다.cmake
: CMake를 사용하는 프로젝트에 사용한다.pkgconfig
: 패키지 구성 정보를 관리하는데 사용된다.kernel
: 리눅스 커널을 빌드하는 데 사용된다.image
: 최종 이미지를 생성하는데 사용된다.
환경 변수
레시피에서 종종 사용되는 중요한 환경변수는 다음과 같다:
${WORKDIR}
: 현재 작업 디렉토리이다. 소스 코드가 다운로드되고 빌드 프로세스가 여기에 저장된다.${D}
: 설치 경로를 지정한다.do_install
함수에서 사용된다.${bindir}
: 바이너리 파일의 설치 경로이다. 보통/usr/bin
이다.${prefix}
: 설치 경로의 기본 경로이다. 보통/usr
이다.
커스터마이징
기본적인 구조를 이해한 후에는 레시피를 쉽게 커스터마이징하여 다양한 소프트웨어를 빌드할 수 있다. 예를 들어 특정 컴파일러 플래그를 추가하거나, 특수한 패치 파일을 적용하거나, 빌드 과정을 수정할 수 있다.
EXTRA_OECONF = "--disable-static --enable-shared"
CFLAGS += "-O2"
이와 같은 방식으로 Yocto 레시피는 유연하고 강력하게 다양한 소프트웨어와 패키지 빌드를 지원한다.