Skip to contentSkip to conversation

initramfs-framework: configuration to boot up live image

PATCH Superseded [email protected] 1 participant 4 messages Jun 30, 2017

v1 of 6 Superseded Latest is v6 →

lore
Share & tools
lore
#0 lore raw

cover initramfs-framework: configuration to boot up live image

From: "Ng, Wei Tee" <[email protected]>

This patch is to get initramfs-framework able to boot up live image.
In order to implement this framework, there is a need to add runtime dependency on udev-extraconf due to the automounting process.

Secondly, a new scriptlet named setup-live module has been created to handle the removeable media detection and assign the rootfs.img. This is because the current rootfs module has no support for rootfs images, only rootfs partitions.

This change has been verified with build test and boot up test on Minnowboard Max platform.

Please review and provide feedback if you have any. The patches are targeted for merging into poky master branch.

Thanks and regards,
Wei Tee

The following changes since commit 98099349e358a9caaec8ec81f0d4abe588909cfe:

bitbake: npm fetcher: fix unknown variable name. (2017-06-29 14:33:42 +0100)

are available in the git repository at:

ssh://git.yoctoproject.org/poky-contrib weiteeng/initramfs-v2
http://git.yoctoproject.org/cgit.cgi//log/?h=weiteeng/initramfs-v2

Ng, Wei Tee (3):
initramfs-framework: udev: Add a runtime dependency on udev-extraconf
initramfs-framework: setup-live: detect media and assign rootfs image
initramfs-framwork: module to support boot live image

 .../initrdscripts/initramfs-framework/setup-live   | 67 ++++++++++++++++++++++
 .../initrdscripts/initramfs-framework_1.0.bb       |  8 ++-
 2 files changed, 72 insertions(+), 3 deletions(-)
 create mode 100644 meta/recipes-core/initrdscripts/initramfs-framework/setup-live
Signature · 1 line
2.7.4
#1 lore raw

PATCH 1/3 initramfs-framework: udev: Add a runtime dependency on udev-extraconf

From: "Ng, Wei Tee" <[email protected]>

In order to implement initramfs-framework for boot up process, it depends on udev performing automounting, which happens in udev-extraconf. Explicitly depend on it so that we always have it installed.

---
 meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb +1 -1
index 67a1b04..6bbe4c1 100644
@@ -65,7 +65,7 @@ RDEPENDS_initramfs-module-mdev = "${PN}-base busybox-mdev"
 FILES_initramfs-module-mdev = "/init.d/01-mdev"
 
 SUMMARY_initramfs-module-udev = "initramfs support for udev"
-RDEPENDS_initramfs-module-udev = "${PN}-base udev"
+RDEPENDS_initramfs-module-udev = "${PN}-base udev udev-extraconf"
 FILES_initramfs-module-udev = "/init.d/01-udev"
 
 SUMMARY_initramfs-module-e2fs = "initramfs support for ext4/ext3/ext2 filesystems"
Signature · 1 line
2.7.4
#2 lore raw

PATCH 2/3 initramfs-framework: setup-live: detect media and assign rootfs image

In reply to [email protected]

From: "Ng, Wei Tee" <[email protected]>

Integrate the featuers in init-live.sh into new scriptlet to handle boot up live image process using framework method.

This commit 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.

---
 .../initrdscripts/initramfs-framework/setup-live   | 67 ++++++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100644 meta/recipes-core/initrdscripts/initramfs-framework/setup-live
meta/recipes-core/initrdscripts/initramfs-framework/setup-live new file +67 -0
new file mode 100644
index 0000000..16da34a
@@ -0,0 +1,67 @@
+#/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
+}
Signature · 1 line
2.7.4
#3 lore raw

PATCH 3/3 initramfs-framwork: module to support boot live image

In reply to [email protected]

From: "Ng, Wei Tee" <[email protected]>

setup-live module is a new module being introduced to integrate the functionality of init-live.sh into new scriptlet in order to support the live boot image. It gets to run before the rootfs and finish module.

---
 meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb +4 -2
index 6bbe4c1..f7b47d9 100644
@@ -13,7 +13,8 @@ SRC_URI = "file://init \
            file://mdev \
            file://udev \
            file://e2fs \
-           file://debug"
+           file://debug \
+           file://setup-live"
 
 S = "${WORKDIR}"
 
@@ -24,6 +25,7 @@ do_install() {
     install -m 0755 ${WORKDIR}/init ${D}/init
     install -m 0755 ${WORKDIR}/rootfs ${D}/init.d/90-rootfs
     install -m 0755 ${WORKDIR}/finish ${D}/init.d/99-finish
+    install -m 0755 ${WORKDIR}/setup-live ${D}/init.d/80-setup-live
 
     # mdev
     install -m 0755 ${WORKDIR}/mdev ${D}/init.d/01-mdev
@@ -50,7 +52,7 @@ PACKAGES = "${PN}-base \
             initramfs-module-rootfs \
             initramfs-module-debug"
 
-FILES_${PN}-base = "/init /init.d/99-finish /dev"
+FILES_${PN}-base = "/init /init.d/99-finish /init.d/80-setup-live /dev"
 
 # 99-finish in base depends on some other module which mounts
 # the rootfs, like 90-rootfs. To replace that default, use
Signature · 1 line
2.7.4