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
) 등이 생성된다.$ source
bash명령으로 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.conf
build/conf/bblayers.conf
$ export LC_ALL=en_US.UTF-8
local.conf
build/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.bb
PACKAGES =+ "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.conf
conf/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 usefulbitbake core-image-minimal
명령 실행x86_64-linux
x86_64-poky-linux
qemux86-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
로 한참 해메고 있었는데 어느정도 갈피를 잡은 것 같습니다.다시 한번 감사의 말씀 드립니다. 좋은 하루 보내십시오.
문연수 올림.