Yocto 내에서 관련이 있는 Recipe들을 모아놓은 곳을 Layer라고 부르며, naming을 Meta-으로 규약하고 있습니다.
이전에 받아 놓은 poky directory를 한번 살펴보도록 하겠습니다.
poky directory를 보면 meta, meta-poky, meta-selftest, meta-skeleton, meta-yocto-bsp라는 layer들이 존재하고 있는 것을 볼 수 있습니다.
이것들은 yocto project를 구성하는 핵심 layer이며, 이것들 뿐만 아니라 개발자는 custom layer를 생성하여 기능적인 요소들을 추가할 수 있습니다.
yocto에서 굳이 layer를 만들어 사용하는 이유는 무엇일까요? 그것은 바로 내부 컴포넌트들을 좀 더 체계적으로 관리하기 위해서입니다.
구성 layer 중 하나인, meta-poky의 구조를 예로 살펴보도록 하겠습니다.
한편, 디렉토리 구조를 살펴볼 때, 저는 tree라는 명령어를 사용합니다.
tree는 폴더의 하위 구조를 계층적으로 표시해주어서 전체 디렉토리 구조를 파악할 때 유용하며, -L 옵션을 사용하여 얼마나 자세히 구조를 표현할 지 결정합니다.
$apt-get install tree
이런식으로 layter는 conf, recipe, classes, 그리고 이외 항목들을 종류에 맞게 체계적으로 분리하여 좀 더 깔끔하게 yocto를 사용할 수 있게 만들어 줍니다.
오늘은 이 layer를 직접 만들어보는 시간을 가져보도록 하겠습니다.
Layer를 만들기 위해 제일 먼저 수행해야 하는 것은 빌드에 대한 기본 환경을 구성해주는 것입니다.
하는 방법은 다음과 같습니다.
$source oe-init-build-env [build_directory_name]
이 과정을 통해 build라는 directory가 자동으로 생성되었고 build를 현재 directory로 만들었습니다.
보통 이 작업을 할 때 아무 값도 지정하지 않으면, 다음과 같이 ARM QEMU emulator가 자동으로 생성됩니다.
이것에 대한 설정은 conf/local.conf에서 확인할 수 있는데 우선 맨 앞에 있는 bblayer.conf부터 순차적으로 살펴보도록 하겠습니다.
bblayer.conf는 poky가 build를 진행할 때 어떤 레이어를 사용할 것인지 정의해 주는 공간입니다.
방금 poky 디렉토리에서 봤던 meta, meta-poky, meta-yocto-bsp가 있는 것을 볼 수 있습니다.
개발할 때 필요한 bsp-layer나 custom으로 만든 layer들의 경로들을 여기에 추가해서 사용하시면 됩니다
local.conf는 target machine과 crosscompiler와 같은 빌드하는데 필요한 설정들을 해주는 공간입니다.
방금 얘기했던 데로 현재 qemux86-64가 default로 설정되어있으며, target을 바꾸고 싶다면 해당 machine에 있는 주석을 해제해서 사용하시면 됩니다.
Layer를 만드는데 필요한 구성 요소들을 어느 정도 알아본 것 같으니 이제 Layer를 만들어보도록 하겠습니다.
Layer를 만드는 명령어는 다음과 같습니다.
$bitbake-layers create-layer meta-<LAYER NAME>
meta-test layer를 create 한 후 디렉토리를 확인해보면 실제로 meta-test layer가 디렉토리에 생성되어 있는 것을 확인할 수 있습니다.
그 다음 할 작업은 생성한 layer를 mybuild/conf/bblayer.conf에 추가하는 것입니다.
layer가 잘 추가되었는지 확인해보려면 example recipe를 사용하면 됩니다. example recipe는 layer를 생성하면서 자동으로 생기며, bitbake test를 할 때 사용합니다.
문제 없이 bitbake가 완료 되었다면 성공적으로 layer가 구성된 것입니다.