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

