Yocto 可以讓User自訂image以滿足特定需求, 這個章節就是在介紹如何自訂image.
最簡單的image.bb就是全部空白
images/machine-image-brook.bb
inherit image IMAGE_FEATURES = "" LICENSE = "MIT" IMAGE_LINGUAS = ""build結果
brook@vista:~/apps_proc/poky/build/tmp-glibc/work/oe-linux-gnueabi/machine-image-brook$ find 1.0-r0/rootfs/ 1.0-r0/rootfs/ 1.0-r0/rootfs/var 1.0-r0/rootfs/var/cache 1.0-r0/rootfs/var/cache/opkg 1.0-r0/rootfs/var/lib 1.0-r0/rootfs/var/lib/opkg 1.0-r0/rootfs/lib 1.0-r0/rootfs/lib/systemd 1.0-r0/rootfs/lib/systemd/system 1.0-r0/rootfs/lib/systemd/system/run-postinsts.service 1.0-r0/rootfs/etc 1.0-r0/rootfs/etc/timestamp 1.0-r0/rootfs/etc/version 1.0-r0/rootfs/etc/systemd 1.0-r0/rootfs/etc/systemd/system 1.0-r0/rootfs/etc/systemd/system/sysinit.target.wants 1.0-r0/rootfs/etc/systemd/system/sysinit.target.wants/run-postinsts.service 1.0-r0/rootfs/run 1.0-r0/rootfs/usr 1.0-r0/rootfs/usr/sbin 1.0-r0/rootfs/usr/sbin/run-postinsts
3.2.1. Customizing Images Using local.conf
最簡單的客製化image就是在local.conf中加入一個package, 雖然彈性有限, 但相對簡單. 比如在local.conf加入一行IMAGE_INSTALL_append = " strace"記住, strace前面有一個空白, 爾且是必須的. 此外, 善用+=運算符號可以增加可讀性.
images/machine-image-brook.bb
inherit image IMAGE_FEATURES = "" LICENSE = "MIT" IMAGE_LINGUAS = ""
build結果
brook@vista:~/apps_proc/poky/build/tmp-glibc/work/oe-linux-gnueabi/machine-image-brook$ find 1.0-r0/rootfs/ 1.0-r0/rootfs/ 1.0-r0/rootfs/var 1.0-r0/rootfs/var/cache 1.0-r0/rootfs/var/cache/opkg 1.0-r0/rootfs/var/lib 1.0-r0/rootfs/var/lib/opkg 1.0-r0/rootfs/lib 1.0-r0/rootfs/lib/libnss_compat.so.2 1.0-r0/rootfs/lib/libresolv.so.2 1.0-r0/rootfs/lib/libresolv-2.28.so 1.0-r0/rootfs/lib/libnss_files.so.2 1.0-r0/rootfs/lib/libm.so.6 1.0-r0/rootfs/lib/libBrokenLocale-2.28.so 1.0-r0/rootfs/lib/libc-2.28.so 1.0-r0/rootfs/lib/libanl.so.1 1.0-r0/rootfs/lib/libutil.so.1 1.0-r0/rootfs/lib/libc.so.6 1.0-r0/rootfs/lib/libutil-2.28.so 1.0-r0/rootfs/lib/libnss_dns-2.28.so 1.0-r0/rootfs/lib/libnsl.so.1 1.0-r0/rootfs/lib/libdl-2.28.so 1.0-r0/rootfs/lib/libnss_compat-2.28.so 1.0-r0/rootfs/lib/ld-linux-armhf.so.3 1.0-r0/rootfs/lib/libnsl-2.28.so 1.0-r0/rootfs/lib/libpthread-2.28.so 1.0-r0/rootfs/lib/libnss_files-2.28.so 1.0-r0/rootfs/lib/libm-2.28.so 1.0-r0/rootfs/lib/libnss_dns.so.2 1.0-r0/rootfs/lib/librt-2.28.so 1.0-r0/rootfs/lib/libpthread.so.0 1.0-r0/rootfs/lib/libBrokenLocale.so.1 1.0-r0/rootfs/lib/libdl.so.2 1.0-r0/rootfs/lib/systemd 1.0-r0/rootfs/lib/systemd/system 1.0-r0/rootfs/lib/systemd/system/run-postinsts.service 1.0-r0/rootfs/lib/libanl-2.28.so 1.0-r0/rootfs/lib/ld-2.28.so 1.0-r0/rootfs/lib/librt.so.1 1.0-r0/rootfs/sbin 1.0-r0/rootfs/sbin/ldconfig 1.0-r0/rootfs/etc 1.0-r0/rootfs/etc/timestamp 1.0-r0/rootfs/etc/version 1.0-r0/rootfs/etc/ld.so.conf 1.0-r0/rootfs/etc/systemd 1.0-r0/rootfs/etc/systemd/system 1.0-r0/rootfs/etc/systemd/system/sysinit.target.wants 1.0-r0/rootfs/etc/systemd/system/sysinit.target.wants/run-postinsts.service 1.0-r0/rootfs/run 1.0-r0/rootfs/usr 1.0-r0/rootfs/usr/sbin 1.0-r0/rootfs/usr/sbin/run-postinsts 1.0-r0/rootfs/usr/bin 1.0-r0/rootfs/usr/bin/strace 1.0-r0/rootfs/usr/bin/strace-log-merge
3.2.2. Customizing Images Using Custom IMAGE_FEATURES and EXTRA_IMAGE_FEATURES
另一個方式是設定IMAGE_FEATURES與EXTRA_IMAGE_FEATURES, 這兩個功能相似, IMAGE_FEATURES是在recipe使用, 而EXTRA_IMAGE_FEATURES是在local.conf 使用. 可以參考meta/classes/core-image.bbclass了解更多細節簡單來說, IMAGE_FEATURES 會被轉成是當的packages或configurations後加入IMAGE_INSTALL變數中. 而EXTRA_IMAGE_FEATURES變數會在bitbake.conf中, 將其加入IMAGE_FEATURES內.
EXTRA_IMAGE_FEATURES ??= "" IMAGE_FEATURES += "${EXTRA_IMAGE_FEATURES}"
3.2.3. Customizing Images Using Custom .bb Files
你也可以透過recipe (.bb)自訂image內容, images/machine-image-brook.bbinherit image IMAGE_INSTALL = "strace" IMAGE_FEATURES = "" LICENSE = "MIT" IMAGE_LINGUAS = ""build結果與3.2.1.結果相同
3.2.4. Customizing Images Using Custom Package Groups
複雜一點的image,可以透過創建package group recipe來客製化image, 比如在meta/recipes-core/packagegroups/創建packagegroup-image-brook.bb, 內容如下SUMMARY = "Brook's sckagegroup" PR = "r0" inherit packagegroup PACKAGES = "\ ${PN}-apps \ ${PN}-tools \ " RDEPENDS_${PN}-apps = "\ strace \ " RDEPENDS_${PN}-tools = "\ busybox \ " RRECOMMENDS_${PN}-tools = "\ openssl \ "
加完之後, 可以使用bitbake確認是否可用
jenkins@vista:~/apps_proc/poky/build$ bitbake -s|grep brook packagegroup-image-brook :1.0-r0
接著就可以在images/machine-image-brook.bb中使用這packagegroup
inherit image IMAGE_INSTALL = "packagegroup-image-brook-tools" IMAGE_FEATURES = "" LICENSE = "MIT" IMAGE_LINGUAS = ""結果就是會安裝busybox, 當然你也可以安裝"packagegroup-image-brook-apps".
-
參考資料:
- https://www.yoctoproject.org/docs/3.1/dev-manual/dev-manual.html, The Yocto Project Development Tasks Manual