From 9dcfcdb9aa2da833a3b86b87fbbb22b60e5d7e3c Mon Sep 17 00:00:00 2001 From: Yevgeny Popovych Date: Tue, 19 Jun 2018 13:08:50 +0300 Subject: classes, images: Use standard variables for initramfs This will reduce the level of indirection and improve compatibility with the rest of OE. For example, FIT that includes initramfs may now be built. Signed-off-by: Yevgeny Popovych --- classes/sota_raspberrypi.bbclass | 1 + 1 file changed, 1 insertion(+) (limited to 'classes/sota_raspberrypi.bbclass') diff --git a/classes/sota_raspberrypi.bbclass b/classes/sota_raspberrypi.bbclass index a5558b4..e69ccf8 100644 --- a/classes/sota_raspberrypi.bbclass +++ b/classes/sota_raspberrypi.bbclass @@ -2,6 +2,7 @@ RPI_USE_U_BOOT_sota = "1" KERNEL_CLASSES_append_sota = " kernel-fitimage" KERNEL_IMAGETYPE_sota = "fitImage" +OSTREE_KERNEL = "${KERNEL_IMAGETYPE}-${INITRAMFS_IMAGE}-${MACHINE}.bin" PREFERRED_PROVIDER_virtual/bootloader_sota ?= "u-boot" UBOOT_ENTRYPOINT_sota ?= "0x00008000" -- cgit v1.2.3-54-g00ecf From 212d71d273023470b82854c363854b301bd11314 Mon Sep 17 00:00:00 2001 From: Yevgeny Popovych Date: Fri, 20 Jul 2018 18:14:20 +0300 Subject: ostree-initrd: Make it an initramfs, not initrd The reasoning here is to allow initramfs generated by this recipe to be included in FIT. To do so w/o changing openembedded-core (it allows only cpio format) - init script should be able to execute from a rootfs (i.e. true initramfs), not ramdisk (initrd). See [1] for more information on these keywords. The gist of this change is switch from `pivot_root` to `switch_root`. This also allows to get rid of some clutter, since `switch_root` handles transition to new sysroot all by itself. Again, see [1] for details on these utility/syscall. [1] https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt Signed-off-by: Yevgeny Popovych --- classes/sota.bbclass | 2 +- classes/sota_qemux86-64.bbclass | 2 +- classes/sota_raspberrypi.bbclass | 1 + recipes-sota/ostree-initrd/files/init.sh | 22 ++++------------------ recipes-sota/ostree-initrd/ostree-initrd.bb | 10 +++++----- 5 files changed, 12 insertions(+), 25 deletions(-) (limited to 'classes/sota_raspberrypi.bbclass') diff --git a/classes/sota.bbclass b/classes/sota.bbclass index 0eb8981..f5c6247 100644 --- a/classes/sota.bbclass +++ b/classes/sota.bbclass @@ -23,7 +23,7 @@ WKS_FILE_sota ?= "sdimage-sota.wks" EXTRA_IMAGEDEPENDS_append_sota = " parted-native mtools-native dosfstools-native" -INITRAMFS_FSTYPES ??= "${@oe.utils.ifelse(d.getVar('OSTREE_BOOTLOADER', True) == 'u-boot', 'ext4.gz.u-boot', 'ext4.gz')}" +INITRAMFS_FSTYPES ??= "${@oe.utils.ifelse(d.getVar('OSTREE_BOOTLOADER', True) == 'u-boot', 'cpio.gz.u-boot', 'cpio.gz')}" # Please redefine OSTREE_REPO in order to have a persistent OSTree repo OSTREE_REPO ?= "${DEPLOY_DIR_IMAGE}/ostree_repo" diff --git a/classes/sota_qemux86-64.bbclass b/classes/sota_qemux86-64.bbclass index 9ef531d..0850af6 100644 --- a/classes/sota_qemux86-64.bbclass +++ b/classes/sota_qemux86-64.bbclass @@ -4,7 +4,7 @@ IMAGE_FSTYPES_remove = "wic" PREFERRED_PROVIDER_virtual/bootloader_sota = "u-boot" UBOOT_MACHINE_sota = "qemu-x86_defconfig" OSTREE_BOOTLOADER ?= "u-boot" -INITRAMFS_FSTYPES ?= "ext4.gz" +INITRAMFS_FSTYPES ?= "cpio.gz" OSTREE_KERNEL_ARGS ?= "ramdisk_size=16384 rw rootfstype=ext4 rootwait rootdelay=2 ostree_root=/dev/hda" diff --git a/classes/sota_raspberrypi.bbclass b/classes/sota_raspberrypi.bbclass index e69ccf8..e5f002d 100644 --- a/classes/sota_raspberrypi.bbclass +++ b/classes/sota_raspberrypi.bbclass @@ -3,6 +3,7 @@ RPI_USE_U_BOOT_sota = "1" KERNEL_CLASSES_append_sota = " kernel-fitimage" KERNEL_IMAGETYPE_sota = "fitImage" OSTREE_KERNEL = "${KERNEL_IMAGETYPE}-${INITRAMFS_IMAGE}-${MACHINE}.bin" +INITRAMFS_FSTYPES = "cpio.gz" PREFERRED_PROVIDER_virtual/bootloader_sota ?= "u-boot" UBOOT_ENTRYPOINT_sota ?= "0x00008000" diff --git a/recipes-sota/ostree-initrd/files/init.sh b/recipes-sota/ostree-initrd/files/init.sh index d7e0429..4818a07 100644 --- a/recipes-sota/ostree-initrd/files/init.sh +++ b/recipes-sota/ostree-initrd/files/init.sh @@ -41,7 +41,6 @@ do_mount_fs sysfs /sys do_mount_fs devtmpfs /dev do_mount_fs devpts /dev/pts do_mount_fs tmpfs /dev/shm -do_mount_fs tmpfs /tmp do_mount_fs tmpfs /run # check if smack is active (and if so, mount smackfs) @@ -63,23 +62,10 @@ mount "$ostree_sysroot" /sysroot || { sleep 5 mount "$ostree_sysroot" /sysroot || bail_out "Unable to mount $ostree_sysroot as physical sysroot" } -ostree-prepare-root /sysroot - -# move mounted devices to new root -cd /sysroot -for x in dev proc run; do - log_info "Moving /$x to new rootfs" - mount -o move "/$x" "$x" -done - -# switch to new rootfs -log_info "Switching to new rootfs" -mkdir -p run/initramfs -pivot_root . run/initramfs || bail_out "pivot_root failed." - -log_info "Launching target init" +ostree-prepare-root /sysroot -exec chroot . sh -c 'umount /run/initramfs; exec /sbin/init' \ - dev/console 2>&1 +log_info "Switching to rootfs" +exec switch_root /sysroot /sbin/init +bail_out "Failed to switch_root to $ostree_sysroot" diff --git a/recipes-sota/ostree-initrd/ostree-initrd.bb b/recipes-sota/ostree-initrd/ostree-initrd.bb index 6046c81..26525c8 100644 --- a/recipes-sota/ostree-initrd/ostree-initrd.bb +++ b/recipes-sota/ostree-initrd/ostree-initrd.bb @@ -1,20 +1,20 @@ -SUMMARY = "Extremely basic live image init script" +SUMMARY = "Initramfs for booting into libostree managed system" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" + SRC_URI = "file://init.sh" S = "${WORKDIR}" -PV = "3" +PV = "4" do_install() { install -dm 0755 ${D}/etc touch ${D}/etc/initrd-release install -dm 0755 ${D}/dev - install -dm 0755 ${D}/sbin - install -m 0755 ${WORKDIR}/init.sh ${D}/sbin/init + install -m 0755 ${WORKDIR}/init.sh ${D}/init } inherit allarch -FILES_${PN} += " /dev /etc/initrd-release /sbin/init " +FILES_${PN} += " /dev /etc/initrd-release /init " -- cgit v1.2.3-54-g00ecf