summaryrefslogtreecommitdiff
path: root/kexec-test.sh
blob: c75e769595c56000bda689fc1047b19dc87846a0 (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/bash
# Test script to validate kexec reboots

kexec_tools_instance=$((RANDOM%99999+10000))
metadata="/home/root/.kexec-test-data"
kernel="/boot/vmlinux.strip"
cmdline="$( cat /proc/cmdline) kexec_tools_instance=$kexec_tools_instance"
dtb="/boot/fdt.dtb"
load_type="--load"

usage(){
	echo "Usage:"
	echo "kexec-test [--metadata <file>] [--kernel <kernel> --append <command line> --dtb <dtb_file> --panic] [--validate] [--reset] [--help]"
	echo
	echo "--[m]etadata	default - /home/root/.kexec-test-data"
	echo "--[k]ernel	default - /boot/vmlinux.strip"
	echo "--[p]anic	load the kernel for use on panic"
	echo "--[a]ppend	defalut - current /proc/cmdline + KERNEL ID"
	echo "--[d]tb		default - /boot/fdt.dtb"
	echo "--[v]alidate	Checks whether recent kexec boot Success or Fail"
	echo "--[r]eset	Deletes metadata"
	echo "--[h]elp	Shows this menu"
	echo
}

reset(){
	rm $metadata
}

validate(){
	recent_id=`cat $metadata | grep "BOOTING KERNEL" | tail -1 |  cut -d ' ' -f 4`
	kexec_success=`cat /proc/cmdline | grep $recent_id | wc -l`
	if [ $kexec_success -eq 0 ]
	then
		echo "kexec-test: KERNEL ID $recent_id REBOOT FAIL"
		exit 1
	else
		echo "kexec-test: KERNEL ID $recent_id REBOOT SUCCESS"
		exit 0
	fi
}

while [ "$1" ]
do
    case $1 in
        -m | --metadata )       shift
                                metadata=$1
                                ;;
        -k | --kernel )         shift
                                kernel=$1
                                ;;
        -p | --panic )          load_type="--load-panic"
                                panic=" PANIC"
                                ;;
        -a | --append )         shift
                                cmdline="$1 kexec_tools_instance=$kexec_tools_instance"
                                ;;
        -d | --dtb )            shift
                                dtb=$1
                                ;;
        -v | --validate )       validate
                                exit 1
                                ;;
        -r | --reset )          reset
                                exit
                                ;;
        -h | --help )           usage
                                exit
                                ;;
        * )                     usage
                                exit 1
    esac
    shift
done

echo "kexec-test: LOADING$panic KERNEL $kexec_tools_instance" | tee -a $metadata
echo "kexec -d $load_type $kernel "--append=$cmdline" --dtb=$dtb" | tee -a $metadata
sleep 3
kexec -d $load_type $kernel "--append=$cmdline" --dtb=$dtb
echo "kexec-test: BOOTING$panic KERNEL $kexec_tools_instance" | tee -a $metadata
sleep 3
if [ $panic ]
then
echo c > /proc/sysrq-trigger
else
kexec -d -e
fi