1. 새로운 레이어 생성
Yocto 프로젝트에서 커스텀 레이어를 만드는 첫 번째 단계는 새로운 레이어를 생성하는 것이다. 이는 주로 bitbake-layers create-layer
명령어를 사용하여 수행된다. 예를 들어 meta-mycustomlayer
라는 이름의 레이어를 생성하려면 다음과 같이 명령어를 입력한다:
bitbake-layers create-layer meta-mycustomlayer
이 명령어는 기본 디렉토리 구조와 몇 가지 필수 파일 및 폴더를 포함하는 새로운 레이어를 생성한다.
2. 레이어 디렉토리 구조 이해
생성된 레이어 디렉토리 구조는 다음과 같다:
meta-mycustomlayer/
├── conf
│ ├── layer.conf
├── COPYING.MIT
├── README
각 파일 및 디렉토리의 역할은 다음과 같다:
conf/layer.conf
: 레이어 설정 파일로, 이 파일에는 레이어의 우선순위와 포함해야 하는 다른 레이어 등을 설정한다.COPYING.MIT
: MIT 라이선스 파일로, Yocto 프로젝트는 기본적으로 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"
여기서 중요한 설정 항목들은 다음과 같다:
BBPATH
: 빌드 시스템이 레이어의conf
디렉토리와 클래스 디렉토리를 찾을 수 있도록 경로를 추가한다.BBFILES
: 레이어 내의 모든 레시피 파일(.bb 및 .bbappend)을 설정한다.BBFILE_COLLECTIONS
: 레이어의 이름을 정의한다.BBFILE_PATTERN
: 이 레이어의 레시피 파일들이 위치해 있는 경로 패턴을 정의한다.BBFILE_PRIORITY
: 레이어의 우선순위를 설정한다. 값이 클수록 우선순위가 높아진다.LAYERSERIES_COMPAT
: 지원하는 Yocto 버전을 정의한다. 예: "sumo", "thud" 등.
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_compile
과 do_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 프로젝트를 통해 효율적으로 관리하고 배포할 수 있는 방법을 제공한다.