core-image-minimal分析1

先不去考虑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"
FEATURE_PACKAGES_x11-base = "packagegroup-core-x11-base"
FEATURE_PACKAGES_x11-sato = "packagegroup-core-x11-sato"
FEATURE_PACKAGES_tools-debug = "packagegroup-core-tools-debug"
FEATURE_PACKAGES_eclipse-debug = "packagegroup-core-eclipse-debug"
FEATURE_PACKAGES_tools-profile = "packagegroup-core-tools-profile"
FEATURE_PACKAGES_tools-testapps = "packagegroup-core-tools-testapps"
FEATURE_PACKAGES_tools-sdk = "packagegroup-core-sdk packagegroup-core-standalone-sdk-target"
FEATURE_PACKAGES_nfs-server = "packagegroup-core-nfs-server"
FEATURE_PACKAGES_nfs-client = "packagegroup-core-nfs-client"
FEATURE_PACKAGES_ssh-server-dropbear = "packagegroup-core-ssh-dropbear"
FEATURE_PACKAGES_ssh-server-openssh = "packagegroup-core-ssh-openssh"
FEATURE_PACKAGES_qt4-pkgs = "packagegroup-core-qt-demoapps"
FEATURE_PACKAGES_hwcodecs = "${MACHINE_HWCODECS}"

说明有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














你可能感兴趣的:(yocto)