Jelajahi Sumber

script to load a new kernel without rebooting the system

Signed-off-by: Martin Thomas <mthomas@conet.de>
Martin Thomas 9 tahun lalu
induk
melakukan
215d18163c
1 mengubah file dengan 49 tambahan dan 0 penghapusan
  1. 49 0
      package/kexec-tools/files/kreboot

+ 49 - 0
package/kexec-tools/files/kreboot

@@ -0,0 +1,49 @@
+#!/bin/sh
+
+KERNEL="/mnt/boot/kernel"
+KEXEC_ARG=" -l --atags "
+PART_A=2
+PART_B=3
+
+load_kernel(){
+  # get the Bootargs and replace the current Partition with
+  # the one in $1 e.g. replace /dev/mmcblk0p2 with /dev/mmcblk0p3
+  BOOT_ARGS="$(cat /proc/cmdline | sed s#$CURRENT_PART#$1#g)"
+  # echo "kexec $KEXEC_ARG --append=\"$BOOT_ARGS\" $KERNEL"
+  # set -x
+  # Load the new kernel, unmount the partition and exec the new kernel
+  kexec -l --atags --append=\""$BOOT_ARGS"\" $KERNEL
+  umount /mnt
+  kexec -e
+}
+
+# just to be sure
+umount /mnt 2> /dev/null
+
+# get the partiton of the current kernel
+PART="/dev/$(readlink /dev/root)"
+# extract the partition number
+C_M_PART_NUM=$(readlink /dev/root | grep -o -e '[[:digit:]]*$')
+#$(readlink /dev/root | grep -o '.$')
+
+#Cut off the Partition Number
+C_M_PART=$(readlink /dev/root | sed "s/$C_M_PART_NUM\$//")
+
+CURRENT_PART="/dev/${C_M_PART}${C_M_PART_NUM}"
+
+case $C_M_PART_NUM in
+  "$PART_A")
+    DEVICE="/dev/${C_M_PART}${PART_B}"
+    mount -r $DEVICE /mnt
+    load_kernel $DEVICE
+  ;;
+  "$PART_B")
+    DEVICE="/dev/${C_M_PART}${PART_A}"
+    mount -r $DEVICE /mnt
+    load_kernel $DEVICE
+  ;;
+  *)
+    echo "FAILURE"
+  ;;
+esac
+