aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/qemu-boot-kernel
blob: 5e4aae5fa477049b521012fb0097d26746283521 (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
88
89
90
91
92
93
#!/bin/sh

# config
timeout="3m"

# figure qemu
arch="$(uname -m)"
for item in /usr/libexec/qemu-kvm \
            /usr/bin/qemu-kvm \
            /usr/bin/qemu-system-${arch} \
            /usr/local/bin/qemu-system-${arch} \
; do
	test -x "$item" || continue
	qemu="$item"
	break
done

# figure kernel
kernel="/boot/vmlinuz-$(uname -r)"

# logfiles
kernellog=$(mktemp /tmp/kernel-XXXXXX.log)
firmwarelog=$(mktemp /tmp/firmware-XXXXXX.log)
trap "rm -f $kernellog $firmwarelog" EXIT

# build cmd line
declare -a args
args[0]="-nodefaults"
args[1]="-no-reboot"
args[2]="-machine"
args[3]="accel=kvm:tcg"
args[4]="-m"
args[5]="1G"
args[6]="-display"
args[7]="none"

args[8]="-chardev"
args[9]="file,id=kernellog,path=${kernellog}"
args[10]="-chardev"
args[11]="file,id=firmwarelog,path=${firmwarelog}"
args[12]="-device"
args[13]="isa-serial,chardev=kernellog"
args[14]="-device"
args[15]="isa-debugcon,iobase=0x402,chardev=firmwarelog"

args[16]="-kernel"
args[17]="$kernel"
args[18]="-append"
args[19]="console=ttyS0,115200 panic=1"

# go!
echo ""
echo "#########################################################"
echo "###"
echo "### kernel boot test"
echo "###     qemu:       $qemu"
echo "###     kernel:     $kernel"
echo "###     extra args: $*"
echo "###"
(set -x; timeout --foreground "$timeout" "$qemu" "${args[@]}" "$@")
rc="$?"

# print result
echo "###"
echo "### firmware log"
echo "###"
cat "$firmwarelog"
echo ""

echo "###"
echo "### kernel log"
echo "###"
cat "$kernellog"
echo ""

if test "$rc" != "0"; then
	echo "###"
	echo "### FAILED: timeout, rc=$rc"
	echo "###"
	exit $rc
fi

if grep -q "Unable to mount root" "$kernellog"; then
	echo "###"
	echo "### OK"
	echo "###"
	exit 0
else
	echo "###"
	echo "### FAILED: kernel log check"
	echo "###"
	exit 1
fi