Yocto Initramfs的基本介绍
今天我们主要讲述下Yocto的initramfs如何配置,同时会通过源码进行介绍配置项中的含义
一、Yocto提供了一个initramfs的模版,我们就从这里开始入手。
initramfs的模版的位置在poky/meta/recipes-core/images/core-image-minimal-initramfs.bb
下述是core-image-minimal-initramfs的源码,用户对于initramfs的各种客制化也都是从下列各种配置进行引申出来的。我们一一进行解释,
INITRAMFS_SCRIPTS表示需要打包到initramfs image的binary,每个代表一个binary,具体的binary的阐述可以从poky/meta/recipes-core/initrdscripts/进行查看到
initramfs-framework-base包含了init, rootfs, finish。
Initramfs-modules-rootfs 进行rootfs的mount, Initramfs-modues-finish的作用是执行rootfs中的init
INITRAMFS_SCRIPTS ?= "
initramfs-framework-base
initramfs-module-setup-live
initramfs-module-udev
initramfs-module-install
initramfs-module-install-efi
"
PACKAGE_INSTALL = "${INITRAMFS_SCRIPTS} ${VIRTUAL-RUNTIME_base-utils} udev base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}"
LICENSE = "MIT"
定义initramfs的格式,当前ramfs的格式默认是cpio格式,poky/meta/conf/bitbake.conf#835
IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
inherit core-image
IMAGE_ROOTFS_SIZE = "8192"
IMAGE_ROOTFS_EXTRA_SPACE = "0"
二:许多时候开发者想要将initramfs与kernel Image放置在同一Image(不同于android繁琐的image构成),Yocto 提供了do_bundle_initramfs task。此task需要在initramfs和Kernel Image都生成了再执行。
Yocto Doc对于do_bundle_initramfs的介绍:Combines an initial ramdisk image and kernel together to form a single image
yocto将initramfs和kernel image放置到一个目录后就有两种方案选择,一种是system image + boot image , 另一种就是enable esp partition的主流做法: efi.bin + system.image。enable esp partition的话需要enable uki image,这里不再进行过多赘述。
Note:开发者如果想要在initramfs中调试的话也十分简单,修改poky/meta/recipes-core/initrdscripts/rootfs,在rootfs_run function前面加入/bin/sh,这样子开机就能进入initramfs,可以进行ramfs的调试了。

浙公网安备 33010602011771号