X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=qemu-sanity-check.in;h=5a3594af9a525e8051e076b8c16e44f2602d1d91;hb=0460bb87b6fba08fb5df8056cc3fb67ffa8e8080;hp=bda6cc724752aedf6631fd7114e144cd25aad757;hpb=4867f949f382658998a6cb5c98bca24b09632680;p=qemu-sanity-check.git diff --git a/qemu-sanity-check.in b/qemu-sanity-check.in index bda6cc7..5a3594a 100644 --- a/qemu-sanity-check.in +++ b/qemu-sanity-check.in @@ -1,7 +1,7 @@ #!/bin/bash # -*- shell-script -*- # qemu-sanity-check -# Copyright (C) 2013 Red Hat Inc. +# Copyright (C) 2013-2020 Red Hat Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,7 +24,29 @@ initrd="@libdir@/qemu-sanity-check/initrd" arch="$(uname -m)" canonical_arch="$(uname -m | sed 's/i[456]86/i386/')" +verbose=no timeout=10m +accel=kvm:tcg +cpu= +machine= + +# Both libguestfs and virt-manager choose cpu=host when we think that +# KVM is available, and default otherwise. Although testing for KVM +# is hairy, I found that on aarch64 it can fail unless we choose +# cpu=host for KVM. +if test -r /dev/kvm; then + cpu=host +fi + +# Default machine and CPU type depends on arch. You can override this +# using -m|--machine and --cpu options. +case "$canonical_arch" in + arm*) + machine=virt ;; + aarch*) + if [ "$cpu" = "" ]; then cpu=cortex-a57; fi + machine=virt ;; +esac # Handle command line parsing. @@ -32,21 +54,29 @@ function usage { echo "qemu-sanity-check [options]" echo "Options:" echo " --help Display this help" + echo " --accel=[kvm|tcg] Force KVM or software emulation" + echo " --cpu=cpu Set CPU" echo " -i|--initrd=initrd Set location of initramfs" echo " -k|--kernel=vmlinuz Set location of kernel" + echo " -m|--machine=machine Set machine type" echo " -q|--qemu=qemu Set location of qemu/KVM binary" echo " -t|--timeout=timeout Set the timeout" + echo " -v|--verbose Verbose output" echo " -V|--version Display version and exit" exit 0 } TEMP=$(getopt \ - -o i:k:q:t:V \ + -o i:k:m:q:t:vV \ --long help \ + --long accel: \ + --long cpu: \ --long initrd: \ --long kernel: \ + --long machine: \ --long qemu: \ --long timeout: \ + --long verbose \ --long version \ -n 'qemu-sanity-check' -- "$@") if [ $? != 0 ]; then exit 2; fi @@ -57,6 +87,14 @@ while true; do --help) usage ;; + --accel) + accel="$2" + shift 2 + ;; + --cpu) + cpu="$2" + shift 2 + ;; -i|--initrd) initrd="$2" shift 2 @@ -65,6 +103,10 @@ while true; do kernel="$2" shift 2 ;; + -m|--machine) + machine="$2" + shift 2 + ;; -q|--qemu) qemu="$2" shift 2 @@ -73,6 +115,10 @@ while true; do timeout="$2" shift 2 ;; + -v|--verbose) + verbose=yes + shift + ;; -V|--version) echo "@PACKAGE_NAME@ @PACKAGE_VERSION@" exit 0 @@ -99,7 +145,7 @@ fi # Locate kernel if not specified. if [ -z "$kernel" ]; then - kernel="$(ls -vr /boot/vmlinuz-*.$arch | head -1)" + kernel="$(ls -1dvr /boot/vmlinuz-*.$arch* 2>/dev/null | grep -v xen | head -1)" if [ -z "$kernel" ]; then echo "$0: cannot find a Linux kernel in /boot" echo "Choose a kernel to test using --kernel=/path/to/vmlinuz" @@ -113,7 +159,7 @@ fi # Locate qemu if not specified. if [ -z "$qemu" ]; then - for q in qemu-kvm qemu-system-$canonical_arch qemu kvm; do + for q in @QEMU_LIST@; do if "$q" --help >/dev/null 2>&1; then qemu="$q" break @@ -133,9 +179,16 @@ test_output="$(mktemp --suff=.out)" declare -a argv i=0 argv[$((i++))]="$qemu" -argv[$((i++))]="-nographic" -argv[$((i++))]="-nodefconfig" +argv[$((i++))]="-display" +argv[$((i++))]="none" +argv[$((i++))]="-no-user-config" argv[$((i++))]="-nodefaults" +argv[$((i++))]="-machine" +argv[$((i++))]="$machine${machine:+,}accel=$accel" +if [ "$cpu" != "" ]; then + argv[$((i++))]="-cpu" + argv[$((i++))]="$cpu" +fi argv[$((i++))]="-no-reboot" argv[$((i++))]="-serial" argv[$((i++))]="file:$test_output" @@ -144,9 +197,11 @@ argv[$((i++))]="$kernel" argv[$((i++))]="-initrd" argv[$((i++))]="$initrd" argv[$((i++))]="-append" -argv[$((i++))]="console=ttyS0 panic=1" +argv[$((i++))]="console=ttyS0 oops=panic panic=-1" -#echo "${argv[@]}" +if [ "$verbose" = "yes" ]; then + echo "${argv[@]}" +fi # Run the command. timeout "$timeout" "${argv[@]}"