레시피의 종류

  • 비트베이크의 레시피에는 두 종류의 레시피가 존재하며, 각 레시피는 간략히 다음과 역할을 한다.
    • Image 레시피: 패키지들을 묶어 최종 파일 시스템 구조(rootfs)를 생성
    • Package 레시피: 소스코드를 가져와 컴파일하고 하나의 패키지로 생성

 

Image 레시피

# 1.

require recipes-extended/images/core-image-full-cmdline.bb

IMAGE_FEATURES:remove = "splash"
CORE_IMAGE_EXTRA_INSTALL += "myapp"

-------------------------
# 2.

inherit core-image

IMAGE_FEATURES += "ssh-server-openssh splash"
CORE_IMAGE_EXTRA_INSTALL += "strace myapp"
  • Image 레시피는 기본적으로 위와 같은 구조를 가진다.
  • 1.의 경우, 기존의 core-image-full-cmdline 레시피를 그대로 불러와 이를 수정하는 방법이다.
  • 2.의 경우, 이미지 생성을 위한 새 레시피를 작성하는 방법이다. 이땐 core-image를 레시피에서 상속한다.
  • 위 레시피에 사용된 IMAGE_FEATURES와 CORE_IMAGE_EXTRA_INSTALL 변수는 다음의 역할을 한다.
  • IMAGE_FEATURES
    • 이미지에 특정한 기능을 활성화하기 위해 사용하는 변수이다.
    • allow-root-login: SSH로 Root로 로그인할 수 있게 허용해주는 기능
    • allow-empty-password: SSH에서 빈 암호를 사용해 Root로 로그인할 수 있게 허용해주는 기능
    • empty-root-password: 빈 암호로 Root로 로그인 하기 위해 활성화 해줘야하는 기능
    • serial-autologin-root: 시리얼 콘솔에서 자동으로 Root로 접근을 허용해주는 기능
    • dbg-pkgs: 이미지에 설치된 모든 패키지에 디버그 심볼을 설치하는 기능
    • 이 외에도 더 많은 기능을 제공하며 다음 링크를 참조하면 된다. → 링크
  • CORE_IMAGE_EXTRA_INSTALL
    • 이미지에 새 패키지를 등록하기 위한 변수이다.
    • Package 레시피로 작성된 패키지를 해당 변수에 등록해주면 된다.
    • 여기에 패키지가 등록되어야, Package 레시피가 빌드 시스템에 의해 빌드된다.
    • 레시피 간의 의존 관계(DEPENDS, RDEPENDS 등)에 따라서도 Package 레시피는 빌드되기도 한다.

 

Package 레시피

DESCRIPTION = "Simple Helloworld Application"
SECTION = "examples"
LICENSE = "MIT"

SRC_URI = "file://helloworld.c"
SRC_URI[md5sum] = "a1b2c3d4e5f6g7h8i9j0..."
SRC_URI[sha256sum] = "z9y8x7w6v5u4t3s2r1q0..."

S = "${WORKDIR}"

do_compile() {
	${CC} helloworld.c -o helloworld
}

do_install() {
	install -D -m 0755 helloworld ${D}${bindir}/helloworld
}
  • Image 레시피 혹은 의존 관계에 따라 Package 레시피는 비트베이크에 의해서 빌드가 진행된다.
  • 위 Package 레시피는 이미지에 등록될 때 /usr/bin 하위에 바이너리 실행 파일로 등록되는 예제이다.
  • Package 레시피에서 사용되는 SRC_URI, D, bindir 등의 변수는 다음과 같은 역할을 한다.
  • SRC_URI
    • 빌드 과정 중 do_fetch 태스크 과정에서 소스코드를 다운로드받는 경로를 지정
    • SRC_URI[md5sum, sha256sum]은 다운로드 받은 소스가 변경되지 않았는지 확인하기 위한 목적
    • 이 변수에 대한 자세한 내용은 "[Yocto 학습] 2장"을 참고
  • D
    • 임시 rootfs 경로를 나타냄
    • 기본적으로 build/tmp/work/.../<recipe>/<version>/imgae/ 경로로 설정됨
  • bindir
    • rootfs 중 /usr/bin 경로를 가리킴
    • ${bindir} 말고도 ${base_bindir}, ${base_sbindir} 등 다양한 rootfs 경로를 비트베이크에서 제공함
    • 다양한 rootfs 경로는 다음 장에서 이어서 설명

 

autotools 클래스

  • Autotools 기반 프로젝트를 자동으로 configure/build/install 해주는 표준 클래스이다.
  • 즉, autoconf와 automake 그리고 libtool 기반의 프로젝트의 자동 빌드를 수행해준다.
  • 대표적으로 소스에 configure.ac, Makefile.am 등 있는 경우 자동 빌드를 수행해준다.

  • dbus-wait 패키지를 예로 들자면, 해당 패키지는 autoconf와 automake 기반의 프로젝트이다.
  • 따라서, 패키지의 소스에는 configure.ac와 Makefile.am이 존재한다.
  • 이 패키지를 빌드하기 위해서 위 캡쳐와 같이 레시피에서는 inherit autotools을 사용하는 것을 볼 수 있다.
  • inherit은 특정 클래스를 레시피에서 상속받아 사용하기 위한 키워드이다.

 

※ 다음 장에서는 레시피의 태스크 확장, 소스 패치, rootfs 경로 변수 등을 설명한다.

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기