#!/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