
Yocto reference manual: https://docs.yoctoproject.org/ref-manual/index.html
OpenEmbedded-Core(OpenEmbedded project와 공유되는 core meta data, base layer 묶음)Poky: Yocto Project의 reference system으로, 다양한 tool과 metadata로 이루어짐. 여기서 자신만의 레시피를 이용해 이미지 생성 가능bitbake: python과 shell script로 이루어진 task scheduler. build하고자하는 source를 다운로드, 빌드, install한다..rpm,.deb, ipk) 등이 생성된다.$ sourcebash명령으로 oe-init-build-env를 현재 쉘에 쉘 명령을 먹이면, 현재 쉘은 지정한 'build' 디렉토리를 관리하는 쉘이 된다.
$ source ./oe-init-build-env [BUILD DIRECTORY]
$ # 여기서 부터 지정한 [BUILD DIRECTORY]를 관리하는 쉘 명령이 먹힌다.
[BUILD DIRECTORY]를 공란으로 두면, build 디렉토리가 생성되고 이 디렉토리를 관리하게 된다.
build/conf/build/conf/에서,bblayer.conf: 사용할 레이어 관리, 레이어 우선순위 등 관리
local.conf: 현재 build 디렉토리 환경 설정 설정
build/conf/bblayers.conf에서 관리

BBLAYERS 변수에 레이어 디렉토리가 나열되어 있다.conf/layer.conf 파일을 찾아 그 레이어에 있는 레시피, 클래스, 설정 파일의 집합을 가리키게 하려 -> BBPATH 목록에 이 레이어를 추가한다.$ bitbake-layers show-layers 명령한다.
build/ 다른 디렉토리들tmp/deploy/images/[machine]: image는 여기 존재한다.meta-<layername>

meta: OpenEmbedded core를 위한 meta datameta-yocto: poky를 포함한 Yocto Project를 위한 meta datameta-yocto-bsp: Yocto Project가 지원하는 reference machine에 대한 BSP를 포함하는 meta datameta-ti, meta-fsl-arm, meta-raspberrypi: SoC specific layermeta-browser: web browsers (Chrominum, Firefox)meta-filesystem: support for additional filesystems.meta-gstreamer10: support for GStreamer 1.0.meta-java, meta-oracle-java: Java supportmeta-linaro-toolchain: Linaro toolchain recipes.meta-qt5: QT5 modulesmeta-realtime: real time tools and test programspoky/meta-yocto-bsp/conf/machine/*.conf에 BSP-Layer에 의해 지원되는 HW 디바이스들이 리스트되어 있다.


*.conf.conf 파일(메타데이터)는 주로 설정 역할bblayers.confbuild/conf/bblayers.conf$ export LC_ALL=en_US.UTF-8
local.confbuild/conf/local.conf
local.conf에 변화된 사항은 어떠한 소스코드 추적 불가이기 때문에 임시 변경으로 생각한다.local.conf 역할은 아주 중요하므로 local.conf 변수는 링크에서 설명따라서, 레시피는 특정한 소프트웨어 컴포넌트에 대한 정보를 묘사한다.
meta*/classes) 디렉토리 둔다.
cmake.bbclass : 레서피 내 cmake를 처리한다.kernel.bbclass : 커널 building을 처리한다. 모든 커널 트리를 빌드하는 코드를 포함module.bbclass : 리눅스 커널 모듈 out-of-tree building에 대한 support를 제공한다.OpenEmbedded는 best-in-class 크로스 컴파일 환경을 제공한다.
이것으로 디벨로퍼가 embedded system용 리눅스 배포판 완성케한다.
From http://www.openembedded.org/wiki/Main_Page
vi meta/recipes-multimedia/libtiff/tiff_4.0.10.bbPACKAGES =+ "tiffxx tiff-utils"
1) 50 GBytes of free disk space
2) 지원되는 리눅스 배포판
3-1) Git 1.8.3.1 or greater
3-2) tar 1.28 or greater
3-3) Python 3.6.0 or greater
3-4) gcc 5.0 or greater
4) 8G 이상의 Host RAM
$ sudo apt-get install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev
$ sudo apt list --installed | grep oss # oss4-dev [installed] 면 현재 빌드 시스템에서 oss4-dev 패키지가 설치된 상태
/usr/include/linux/soundcard.h 때문이라는데 아래의 명령어를 이용해$ sudo apt-get build-dep qemu
$ sudo apt-get remove oss4-dev
apt-get을 통해 python3-git, pylint3가 더이상 사용불가$ sudo pip3 install GitPython pylint==1.9.5
locale을 en_US.UTF-8로 setting!$ sudo dpkg-reconfigure locales
$ sudo locale-gen en_US.UTF-8 && sudo update-locale LC_ALL=en_US.UTF-8 \
LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8
$ export LC_ALL=en_US.UTF-8
libxcb 라이브러리 패키지를 못찾는 문제$ sudo apt-get install libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev
1. Download Poky source code
$ git clone git://git.yoctoproject.org/poky
2. Checkout the latest branch/release
$ git checkout dunfell
3. Prepare the build environment
oe-init-build-env 스크립트가 있는데, 빌드 환경을 설치하는 스크립트이다.build 로 디렉토리 명을 짓는다.$ source poky/oe-init-build-env [BUILD DIRECTORY]
conf 디렉토리에 생성한다.conf/local.confconf/bblayers.conf 

4. local.conf 설정
build/conf/local.conf에서 타겟 시스템의 MACHINE 설정
qemuarm64 설정
MACHINE을 설정하지 않으면 기본 값으로 qemux86-64가 셋 됨5. Image 생성
$ bitbake <image_name>
core-image-minimal: Device가 boot할 수 있게 하는 small image. very useful
bitbake core-image-minimal 명령 실행
결과 타겟 시스템 정보 표시된다.x86_64-linuxx86_64-poky-linuxqemux86-64 (target machine)poky
nproc

5. Command to run the generated image in QEMU
Currently emulations are supported for:
- ARM
- MIPS
- MIPS64
- PowerPC
- X86
- X86_64
Poky는 Yocto가 생산한 이미지를 사용하는 QEMU를 실행할 수 있게 하는 스크립트 runqemu를 제공한다.
poky/scripts/runqemu에 있다.
$ runqemu <machine> <zimage> <filesystem>
<machine>은 machine/architecture to use (qemuarm/qemumips/qemuppc/qemux86/qemux86-64)
Examples:
runqemu
runqemu qemuarm
runqemu tmp/deploy/images/qemuarm
runqemu tmp/deploy/images/qemux86/<qemuboot.conf>
runqemu qemux86-64 core-image-sato ext4
runqemu qemux86-64 wic-image-minimal wic
runqemu path/to/bzImage-qemux86.bin path/to/nfsrootdir/ serial
runqemu qemux86 iso/hddimg/wic.vmdk/wic.qcow2/wic.vdi/ramfs/cpio.gz...
runqemu qemux86 qemuparams="-m 256"
runqemu qemux86 bootparams="psplash=false"
runqemu path/to/<image>-<machine>.wic
runqemu path/to/<image>-<machine>.wic.vmdk
$ runqemu qemux86-64 core-image-minimal

$ runqemu qemux86-64 core-image-minimal$ runqemu qemux86-64 core-image-minimal nographic
df -h in qemu

cat /proc/cpuinfo in qemu

둘러보고 qemu 종료는 poweroff
$ runqemu qemux86-64 <IMAGE> slirp nographic
source oe-init-build-env <BUILD DIR>을 먼저 실행 후 <BUILD DIR>에서 bitbake, runqemu 명령어가 먹는다.
source oe-init-build-env ./build_rpi4 실행하면 어디서든 bitbake 명령이 build_rpi4 기준으로 되는 점 주의!source 명령은 현재 shell에 영향을 주기 때문에, 깔끔하게 다른 쉘을 켜서 다른 bitbake job을 하는 것을 추천
이런 양질의 정보글 올려 주셔서 정말 감사합니다.
Yocto Project로 한참 해메고 있었는데 어느정도 갈피를 잡은 것 같습니다.다시 한번 감사의 말씀 드립니다. 좋은 하루 보내십시오.
문연수 올림.