66
77set -eu -o pipefail
88
9- if [ " $# " -ne 2 ]; then
9+ if [ " $# " -ne 3 ]; then
1010 echo " $0 : Invalid arguments" >&2
11- echo " Expect: $0 VM_IMAGE VM_HOSTNAME" >&2
11+ echo " Expect: $0 VM_IMAGE VM_HOSTNAME RASPI " >&2
1212 exit 1
1313fi
1414set -x
1515
1616VM_IMAGE=" $1 "
1717VM_HOSTNAME=" $2 "
18+ RASPI=" $3 "
1819
1920TEST_PWD=" $PWD "
2021TEST_TMPDIR=$( mktemp -d)
@@ -28,7 +29,7 @@ bailout() {
2829 ps --pid=" ${QEMU_PID} " -o pid= | grep -q ' .' && kill " ${QEMU_PID:- } "
2930 fi
3031
31- rm -rf " ${TEST_TMPDIR} "
32+ sudo rm -rf " ${TEST_TMPDIR} "
3233
3334 [ -n " ${1:- } " ] && EXIT_CODE=" $1 " || EXIT_CODE=1
3435 exit " $EXIT_CODE "
@@ -72,17 +73,30 @@ declare -a qemu_command
7273
7374DPKG_ARCHITECTURE=$( dpkg --print-architecture)
7475if [ " ${DPKG_ARCHITECTURE} " = " amd64" ]; then
75- qemu_command=( qemu-system-x86_64 )
76- qemu_command+=( -machine q35 )
76+ qemu_command=( qemu-system-x86_64 )
77+ qemu_command+=( -machine q35 )
7778elif [ " ${DPKG_ARCHITECTURE} " = " arm64" ]; then
79+ if [ " $RASPI " = ' yes' ]; then
80+ if ! rpi_bootdata=" $( sudo " $TEST_PWD " /tests/extract-rpi-bootdata.sh " $VM_IMAGE " ) " ; then
81+ echo " E: could not extract RPi boot data" >&2
82+ exit 1
83+ fi
84+ IFS=' |' read rpi_kern rpi_initrd rpi_kerncmd <<< " $rpi_bootdata"
85+ qemu_command=( qemu-system-aarch64 )
86+ qemu_command+=( -machine " type=virt,gic-version=max,accel=kvm:tcg,highmem=off" )
87+ qemu_command+=( -kernel " $rpi_kern " )
88+ qemu_command+=( -initrd " $rpi_initrd " )
89+ qemu_command+=( -append " $rpi_kerncmd " )
90+ else
7891 cp /usr/share/AAVMF/AAVMF_VARS.fd efi_vars.fd
7992 qemu_command=( qemu-system-aarch64 )
8093 qemu_command+=( -machine " type=virt,gic-version=max,accel=kvm:tcg" )
8194 qemu_command+=( -drive " if=pflash,format=raw,unit=0,file.filename=/usr/share/AAVMF/AAVMF_CODE.no-secboot.fd,file.locking=off,readonly=on" )
8295 qemu_command+=( -drive " if=pflash,format=raw,unit=1,file=efi_vars.fd" )
96+ fi
8397else
84- echo " E: unsupported ${DPKG_ARCHITECTURE} "
85- exit 1
98+ echo " E: unsupported ${DPKG_ARCHITECTURE} " >&2
99+ exit 1
86100fi
87101qemu_command+=( -cpu max )
88102qemu_command+=( -smp 2 )
0 commit comments