aboutsummaryrefslogtreecommitdiffstats
path: root/common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch')
-rw-r--r--common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch73
1 files changed, 73 insertions, 0 deletions
diff --git a/common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch b/common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch
new file mode 100644
index 00000000..1548f505
--- /dev/null
+++ b/common/mentor-swupdate/recipes-core/initrdscripts/files/0004-init-install-efi-pick-kernel-and-rootfs-from-grub.en.patch
@@ -0,0 +1,73 @@
+From 78d26166a8ad1bc8d29822d45a6a382b87fa095d Mon Sep 17 00:00:00 2001
+From: Awais Belal <awais_belal@mentor.com>
+Date: Mon, 14 Jan 2019 19:40:50 +0500
+Subject: [PATCH 4/7] init-install-efi: pick kernel and rootfs from grub.env
+
+This allows for simply modifying variables to switch between
+different kernels and rootfs from user-space without having to
+modify grub configurations directly.
+
+Signed-off-by: Awais Belal <awais_belal@mentor.com>
+---
+ init-install-efi.sh | 22 +++++++++++++++++++---
+ 1 file changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/init-install-efi.sh b/init-install-efi.sh
+index 2adfe02..d69520f 100644
+--- a/init-install-efi.sh
++++ b/init-install-efi.sh
+@@ -287,6 +287,7 @@ mkdir -p $EFIDIR
+ cp /run/media/$1/EFI/BOOT/*.efi $EFIDIR
+
+ GRUBCFG="$EFIDIR/grub.cfg"
++GRUBENV="$EFIDIR/grub.env"
+ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then
+ root_part_uuid=$(blkid -o value -s PARTUUID ${rootfs1})
+ cp /run/media/$1/EFI/BOOT/grub.cfg $GRUBCFG
+@@ -297,9 +298,14 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then
+ sed -i "/initrd /d" $GRUBCFG
+ # Delete any LABEL= strings
+ sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG
++ # Mentor- SWUpdate - force grub to load our env which we'll use to specify RFS and KERNEL
++ sed -i "1iload_env --file ${GRUBENV#\/boot}" $GRUBCFG
++ # Set current and fallback rootfs using variable via our grub.env
++ grub-editenv $GRUBENV set "RFS=PARTUUID=$root_part_uuid"
++ grub-editenv $GRUBENV set "FB_RFS=PARTUUID=$root_part_uuid"
+ # Replace root= and add additional standard boot options
+ # We use root as a sentinel value, as vmlinuz is no longer guaranteed
+- sed -i "s/ root=[^ ]*/ root=PARTUUID=$root_part_uuid rw $rootwait quiet /g" $GRUBCFG
++ sed -i "s/ root=[^ ]*/ root=\$RFS rw $rootwait quiet /g" $GRUBCFG
+ fi
+
+ if [ -d /run/media/$1/loader ]; then
+@@ -321,15 +327,25 @@ fi
+
+ umount /tgt_root
+
++if [ -e "/proc/cmdline" ]; then
++ current_kernel=$(basename $(cat /proc/cmdline | awk '{print $1}' | cut -d"=" -f2))
++fi
+ # Copy kernel artifacts. To add more artifacts just add to types
+ # For now just support kernel types already being used by something in OE-core
+ for types in bzImage zImage vmlinux vmlinuz fitImage; do
+ # MEL - SWUpdate - copy all kernel images as <image>A, this is our first copy
+ for kernel in `find /run/media/$1/ -name $types*`; do
+ kernel_name=$(basename $kernel)
+- cp $kernel /boot/${kernel_name}A
++ cp ${kernel} /boot/${kernel_name}A
+ if [ -e $GRUBCFG ]; then
+- sed -i "s/\/${kernel_name} /\/${kernel_name}A /" $GRUBCFG
++ if [ "${kernel_name}" = "${current_kernel}" ]; then
++ sed -i "s/\/${kernel_name} /\/\$KERNEL /" $GRUBCFG
++ # Set the current and fallback kernel to current kernel's <image>A
++ grub-editenv $GRUBENV set "KERNEL=${kernel_name}A"
++ grub-editenv $GRUBENV set "FB_KERNEL=${kernel_name}A"
++ else
++ sed -i "s/\/${kernel_name} /\/${kernel_name}A /" $GRUBCFG
++ fi
+ fi
+ done
+ done
+--
+2.11.1
+