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