15e61cba0SAndrew Jones#!/bin/bash 25e61cba0SAndrew Jones 3b6ff178dSAndrew Jonesif [ -z "$STANDALONE" ]; then 45e61cba0SAndrew Jones if [ ! -f config.mak ]; then 5b6ff178dSAndrew Jones echo "run ./configure && make first. See ./configure -h" 65e61cba0SAndrew Jones exit 2 75e61cba0SAndrew Jones fi 85e61cba0SAndrew Jones source config.mak 9b2a2aa5dSAndrew Jones source scripts/arch-run.bash 10b6ff178dSAndrew Jonesfi 1139ac3f84SAndrew Jonesprocessor="$PROCESSOR" 125e61cba0SAndrew Jones 130601b85cSAndrew Jonesif [ -c /dev/kvm ]; then 140601b85cSAndrew Jones if [ "$HOST" = "arm" ] && [ "$ARCH" = "arm" ]; then 150601b85cSAndrew Jones kvm_available=yes 160601b85cSAndrew Jones elif [ "$HOST" = "aarch64" ]; then 170601b85cSAndrew Jones kvm_available=yes 180601b85cSAndrew Jones fi 190601b85cSAndrew Jonesfi 200601b85cSAndrew Jones 213a5ed97eSAndrew Jonesif [ "$ACCEL" = "kvm" ] && [ "$kvm_available" != "yes" ]; then 22*d5f55dccSRadim Krčmář echo "KVM is needed, but not available on this host" 230601b85cSAndrew Jones exit 2 240601b85cSAndrew Jonesfi 250601b85cSAndrew Jones 260601b85cSAndrew Jonesif [ -z "$ACCEL" ]; then 273a5ed97eSAndrew Jones if [ "$kvm_available" = "yes" ]; then 280601b85cSAndrew Jones ACCEL="kvm" 290601b85cSAndrew Jones else 300601b85cSAndrew Jones ACCEL="tcg" 310601b85cSAndrew Jones fi 320601b85cSAndrew Jonesfi 330601b85cSAndrew Jones 343382e779SAndrew Jonesif [ "$HOST" = "aarch64" ] && [ "$ACCEL" = "kvm" ]; then 350601b85cSAndrew Jones processor="host" 363382e779SAndrew Jones if [ "$ARCH" = "arm" ]; then 373382e779SAndrew Jones processor+=",aarch64=off" 383382e779SAndrew Jones fi 390601b85cSAndrew Jonesfi 400601b85cSAndrew Jones 4139ac3f84SAndrew Jonesqemu="${QEMU:-qemu-system-$ARCH_NAME}" 425e61cba0SAndrew Jonesqpath=$(which $qemu 2>/dev/null) 435e61cba0SAndrew Jones 445e61cba0SAndrew Jonesif [ -z "$qpath" ]; then 455e61cba0SAndrew Jones echo $qemu not found. 465e61cba0SAndrew Jones exit 2 475e61cba0SAndrew Jonesfi 485e61cba0SAndrew Jones 495e61cba0SAndrew Jonesif ! $qemu -machine '?' 2>&1 | grep 'ARM Virtual Machine' > /dev/null; then 505e61cba0SAndrew Jones echo "$qpath doesn't support mach-virt ('-machine virt'). Exiting." 515e61cba0SAndrew Jones exit 2 525e61cba0SAndrew Jonesfi 535e61cba0SAndrew Jones 545e61cba0SAndrew JonesM='-machine virt' 555e61cba0SAndrew Jones 565e61cba0SAndrew Jonesif ! $qemu $M -device '?' 2>&1 | grep virtconsole > /dev/null; then 575e61cba0SAndrew Jones echo "$qpath doesn't support virtio-console for chr-testdev. Exiting." 585e61cba0SAndrew Jones exit 2 595e61cba0SAndrew Jonesfi 605e61cba0SAndrew Jones 61b6f901ceSAndrew Jonesif $qemu $M -chardev testdev,id=id -initrd . 2>&1 \ 625e61cba0SAndrew Jones | grep backend > /dev/null; then 635e61cba0SAndrew Jones echo "$qpath doesn't support chr-testdev. Exiting." 645e61cba0SAndrew Jones exit 2 655e61cba0SAndrew Jonesfi 665e61cba0SAndrew Jones 675e61cba0SAndrew Joneschr_testdev='-device virtio-serial-device' 685e61cba0SAndrew Joneschr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd' 695e61cba0SAndrew Jones 700601b85cSAndrew JonesM+=",accel=$ACCEL" 7139ac3f84SAndrew Jonescommand="$qemu $M -cpu $processor $chr_testdev" 725e61cba0SAndrew Jonescommand+=" -display none -serial stdio -kernel" 73fd149358SAndrew Jonescommand="$(timeout_cmd) $command" 745e61cba0SAndrew Jonesecho $command "$@" 7592a1afcbSAndrew Jones 76b2a2aa5dSAndrew Jonesrun_qemu $command "$@" 77