1. 새로운 레이어 생성

Yocto 프로젝트에서 커스텀 레이어를 만드는 첫 번째 단계는 새로운 레이어를 생성하는 것이다. 이는 주로 bitbake-layers create-layer 명령어를 사용하여 수행된다. 예를 들어 meta-mycustomlayer라는 이름의 레이어를 생성하려면 다음과 같이 명령어를 입력한다:

bitbake-layers create-layer meta-mycustomlayer

이 명령어는 기본 디렉토리 구조와 몇 가지 필수 파일 및 폴더를 포함하는 새로운 레이어를 생성한다.

2. 레이어 디렉토리 구조 이해

생성된 레이어 디렉토리 구조는 다음과 같다:

meta-mycustomlayer/
├── conf
│   ├── layer.conf
├── COPYING.MIT
├── README

각 파일 및 디렉토리의 역할은 다음과 같다:

3. layer.conf 파일 설정

conf/layer.conf 파일은 레이어의 동작을 정의하는 중요한 파일이다. 이 파일에는 빌드 시스템에 해당 레이어를 어떻게 취급할지 알리는 여러 가지 설정이 포함된다. 기본 layer.conf 파일의 예는 다음과 같다:

BBPATH .= ":${LAYERDIR}"

BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
            ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "mycustomlayer"
BBFILE_PATTERN_mycustomlayer = "^${LAYERDIR}/"
BBFILE_PRIORITY_mycustomlayer = "7"

LAYERSERIES_COMPAT_mycustomlayer = "sumo"

여기서 중요한 설정 항목들은 다음과 같다:

4. 레이어를 빌드 시스템에 추가하기

생성한 레이어를 빌드 환경에서 사용하려면, bblayers.conf 파일에 방금 만든 레이어의 경로를 추가해야 한다.

conf/bblayers.conf 파일을 열고, 다음 줄을 추가한다:

BBLAYERS += "${TOPDIR}/../mycustomlayer"

이렇게 하면 빌드 시스템이 정의된 레이어를 포함하여 빌드를 수행할 수 있게 된다.

5. 레시피 작성 및 추가

레이어를 생성하고 설정한 후, 원하는 소프트웨어를 빌드하기 위한 레시피를 작성해야 한다. 새로운 레시피를 추가하려면 레이어 디렉토리에 적절한 폴더를 만들어야 한다.

예를 들어, helloworld라는 소프트웨어의 레시피를 작성하려면 meta-mycustomlayer 디렉토리 내에 recipes-example/helloworld 디렉토리를 만들고 그 안에 .bb 파일을 생성한다:

mkdir -p meta-mycustomlayer/recipes-example/helloworld
touch meta-mycustomlayer/recipes-example/helloworld/helloworld_0.1.bb

helloworld_0.1.bb 파일의 기본 내용은 다음과 같다:

DESCRIPTION = "Simple helloworld application"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835c4aadcc9f856815b4b026f65342d"

SRC_URI = "file://helloworld.c"

S = "${WORKDIR}"

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

do_install() {
    install -d ${D}${bindir}
    install -m 0755 helloworld ${D}${bindir}
}

FILES_${PN} = "${bindir}/helloworld"

위 레시피는 간단한 helloworld 프로그램을 빌드하고 설치하는 방법을 정의한다. SRC_URI는 소스 파일(helloworld.c)이 위치한 경로를 지정한다. do_compiledo_install 함수는 각각 컴파일과 설치 과정을 정의한다.

6. 소스 파일 추가

소스 파일(helloworld.c)도 레시피 경로에 추가해야 한다. 이를 위해 files 디렉토리를 생성하고 소스 파일을 그 안에 넣습니다:

mkdir -p meta-mycustomlayer/recipes-example/helloworld/files

그리고 helloworld.c 파일의 내용은 다음과 같다:

#include <stdio.h>

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

이 파일을 meta-mycustomlayer/recipes-example/helloworld/files 디렉토리에 저장한다.

7. 빌드 시스템 준비 및 빌드

모든 설정이 완료되면 Yocto 빌드 시스템을 통해 새로운 레시피를 빌드한다. 터미널에서 Yocto 빌드 디렉토리로 이동한 후, 새로운 레시피를 빌드한다:

bitbake helloworld

성공적으로 빌드되었는지 확인하려면 다음 명령어를 사용하여 패키지가 생성되었는지 확인할 수 있다:

ls tmp/deploy/ipk/*/helloworld_0.1-r0_*.ipk

이제 커스텀 레이어를 생성하고 새로운 소프트웨어 레시피를 작성 및 빌드하는 방법을 완전히 이해하셨을 것이다. 이 과정은 실제 프로젝트에 적용될 수 있으며, 다양한 소프트웨어와 설정을 Yocto 프로젝트를 통해 효율적으로 관리하고 배포할 수 있는 방법을 제공한다.