From 4d3300e85a8e65207a415b9cf84c9fa1f71b0406 Mon Sep 17 00:00:00 2001 From: "Ng, Wei Tee" Date: Sun, 23 Jul 2017 16:51:55 -0700 Subject: initramfs-framework: module to support boot live image setup-live module is a new module being introduced to integrate the functionality of init-live.sh into new scriptlet named setup-live in order to support the live boot image. The udev-extraconf rdepends is being added to perform automounting. It gets to run before the rootfs and finish module. The setup-live scriplet include the changes for: - Create a conditional loop for the bootparam_root variable. If it is not set, then it will boot from ROOT_IMAGE. Else, it will boot normally which is not from removable media. - Gives a standard path to the original boot disk mount which can be used to. While /media/sda is a good guess, it isn't always right, nor is it a good assumption that only one boot disk is in the system. - The current rootfs module has no support for rootfs images, currently it only support for rootfs partitions for wic image. Therefore, there is a need to assign the rootfs image for live image. [YOCTO #11701] Signed-off-by: Ng, Wei Tee Signed-off-by: Richard Purdie --- .../initrdscripts/initramfs-framework/setup-live | 66 ++++++++++++++++++++++ .../initrdscripts/initramfs-framework_1.0.bb | 13 ++++- 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 meta/recipes-core/initrdscripts/initramfs-framework/setup-live (limited to 'meta') diff --git a/meta/recipes-core/initrdscripts/initramfs-framework/setup-live b/meta/recipes-core/initrdscripts/initramfs-framework/setup-live new file mode 100644 index 0000000000..ec4a139084 --- /dev/null +++ b/meta/recipes-core/initrdscripts/initramfs-framework/setup-live @@ -0,0 +1,66 @@ +#/bin/sh +# Copyright (C) 2011 O.S. Systems Software LTDA. +# Licensed on MIT + +setup_enabled() { + return 0 +} + +setup_run() { +ROOT_IMAGE="rootfs.img" +ISOLINUX="" +ROOT_DISK="" +shelltimeout=30 + + if [ -z $bootparam_root ]; then + echo "Waiting for removable media..." + C=0 + while true + do + for i in `ls /run/media 2>/dev/null`; do + if [ -f /run/media/$i/$ROOT_IMAGE ] ; then + found="yes" + ROOT_DISK="$i" + break + elif [ -f /run/media/$i/isolinux/$ROOT_IMAGE ]; then + found="yes" + ISOLINUX="isolinux" + ROOT_DISK="$i" + break + fi + done + if [ "$found" = "yes" ]; then + break; + fi + # don't wait for more than $shelltimeout seconds, if it's set + if [ -n "$shelltimeout" ]; then + echo -n " " $(( $shelltimeout - $C )) + if [ $C -ge $shelltimeout ]; then + echo "..." + echo "Mounted filesystems" + mount | grep media + echo "Available block devices" + cat /proc/partitions + fatal "Cannot find $ROOT_IMAGE file in /run/media/* , dropping to a shell " + fi + C=$(( C + 1 )) + fi + sleep 1 + done + # The existing rootfs module has no support for rootfs images. Assign the rootfs image. + bootparam_root="/run/media/$ROOT_DISK/$ISOLINUX/$ROOT_IMAGE" + else + break + fi + + if [ "$bootparam_LABEL" != "boot" -a -f /init.d/$bootparam_LABEL.sh ] ; then + if [ -f /run/media/$i/$ISOLINUX/$ROOT_IMAGE ] ; then + ./init.d/$bootparam_LABEL.sh $i/$ISOLINUX $ROOT_IMAGE $video_mode $vga_mode $console_params + else + fatal "Could not find $bootparam_LABEL script" + fi + + # If we're getting here, we failed... + fatal "Target $bootparam_LABEL failed" + fi +} diff --git a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb index 67a1b04d28..211e89d5d3 100644 --- a/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb +++ b/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb @@ -13,7 +13,8 @@ SRC_URI = "file://init \ file://mdev \ file://udev \ file://e2fs \ - file://debug" + file://debug \ + file://setup-live" S = "${WORKDIR}" @@ -25,6 +26,9 @@ do_install() { install -m 0755 ${WORKDIR}/rootfs ${D}/init.d/90-rootfs install -m 0755 ${WORKDIR}/finish ${D}/init.d/99-finish + # setup-live + install -m 0755 ${WORKDIR}/setup-live ${D}/init.d/80-setup-live + # mdev install -m 0755 ${WORKDIR}/mdev ${D}/init.d/01-mdev @@ -48,7 +52,8 @@ PACKAGES = "${PN}-base \ initramfs-module-udev \ initramfs-module-e2fs \ initramfs-module-rootfs \ - initramfs-module-debug" + initramfs-module-debug \ + initramfs-module-setup-live" FILES_${PN}-base = "/init /init.d/99-finish /dev" @@ -68,6 +73,10 @@ SUMMARY_initramfs-module-udev = "initramfs support for udev" RDEPENDS_initramfs-module-udev = "${PN}-base udev" FILES_initramfs-module-udev = "/init.d/01-udev" +SUMMARY_initramfs-module-setup-live = "initramfs support for setup live" +RDEPENDS_initramfs-module-setup-live = "${PN}-base udev-extraconf" +FILES_initramfs-module-setup-live = "/init.d/80-setup-live" + SUMMARY_initramfs-module-e2fs = "initramfs support for ext4/ext3/ext2 filesystems" RDEPENDS_initramfs-module-e2fs = "${PN}-base" FILES_initramfs-module-e2fs = "/init.d/10-e2fs" -- cgit 1.2.3-korg