先不去考虑local.conf里面的一些配置内容,比如MACHINE等等,同时也不深入分析代码的构建那一部分,我们只分析通过Documentation可以查询到的。
只从bb文件以及配置的角度来查看。
image的一些定制内容和参考可以在这里找到
http://www.yoctoproject.org/docs/2.1/ref-manual/ref-manual.html
描述这个 bb
SUMMARY = "A small image just capable of allowing a device to boot."
指定了了需要安装到这个image里面的包,使用的时候需要很小心避免顺序的问题。
当core-image-minimal-initramfs使用的时候,不要使用这个变量,而是是要使用PACKAGE_INTALL来替代,这样可以使initial内存磁盘菜谱使用一些固定的包。而不受到IMAGE_INSTALL的影响。
IMAGE_INSTALL = "packagegroup-core-boot ${ROOTFS_PKGMANAGE_BOOTSTRAP} ${CORE_IMAGE_EXTRA_INSTALL}"
packagegroup-core-boot 包含了最小启动需要的一些文件并且继承了packagegroup.bbcalss。
bbclass里面可以看到
do_fetch一直到do_polulate_rootfs都是[noexec] 也就是不执行的。因为packagegroup都只需要一个打包过程就可以了。
使用包组来管理一类包 PACKAGES变量指定了这个包组里面需要的所有包
RDEPENDS包含了一定需要安装的包
RRECOMMENDS 包含了推荐安装的包。
例如
DESCRIPTION = "My Custom Package Groups" inherit packagegroup PACKAGES = "\ packagegroup-custom-apps \ packagegroup-custom-tools \ " RDEPENDS_packagegroup-custom-apps = "\ dropbear \ portmap \ psplash" RDEPENDS_packagegroup-custom-tools = "\ oprofile \ oprofileui-server \ lttng-tools" RECOMMENDS_packagegroup-custom-tools = "\ kernel-module-oprofile"
指定image的本地化设置
IMAGE_LINGUAS = " "
LICENSE = "MIT"
继承core-image
inherit core-image
定义最终的image文件的大小。最终的决定还是通过一个算法来计算这个值。
IMAGE_ROOTFS_SIZE ?= "8192"
指定映像剩余的空间大小。比如镜像安装完毕后还预留的空闲空间。
IMAGE_ROOTFS_EXTRA_SPACE_append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "" ,d)}"
所有的bb都继承base.class
查看继承的core-image.bbclass
core-image.bbclass里面包含了很多
FEATURE_PACKAGES
这些FEATURE都是可以指定添加到image里面去的。
具体变量通过 IMAGE_FEATURES来配置
FEATURE_PACKAGES_x11 = "packagegroup-core-x11"说明有N种特性这可以添加到这个image里面。
然后通过在bb文件里面配置来指定安装哪个。比如
core-image-sato.bb里面就有如下的配置,说明要把这些东西包配置到image里面去。
IMAGE_FEATURES += "splash package-management x11-base x11-sato ssh-server-dropbear hwcodecs"
而core-image-minimal.bb里面就没有。
注意区分 IMAGE_FEATURES和IMAGE_INSTALL 两个
IMAGE_FEATURES主要是从PACKAGE_GROUP(已经更名为FEATURE_PACKAGES
) 还有 COMPLEMENTARY_GLOB 来定义
而IMAGE_INSTALL 可以直接从PACKAGE包来设置。
比如core-image-sato的IMAGE_FEATURES+=的变量 都是在core-image.bbclass里面的FEATURE_PACKAGES_xx里面定义的。
如果使用IMAGE_INSTALL+=x11-sato就不会起作用
IMAGE_INSTALL += "packagegroup-core-x11-sato-games"
core-image.bbclass里面包含了
inherit image
再看image.bbclass
里面定义了许多函数,用于构建rootfs的时候进行检查等等。
将不需要执行的函数也列出来了
do_fetch[noexec] = "1"
do_unpack[noexec] = "1"
do_patch[noexec] = "1"
do_configure[noexec] = "1"
do_compile[noexec] = "1"
do_install[noexec] = "1"
do_populate_sysroot[noexec] = "1"
do_package[noexec] = "1"
do_package_qa[noexec] = "1"
do_packagedata[noexec] = "1"
do_package_write_ipk[noexec] = "1"
do_package_write_deb[noexec] = "1"
do_package_write_rpm[noexec] = "1"
然后添加了两个任务
addtask rootfs before do_build
addtask bundle_initramfs after do_rootfs