blob: 9b22ffeea1c2be6a3ed344f2a3333e813cd42f29 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
|