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