[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 15/15] grub-shell: Add flexibility in QEMU firmware handling
From: |
Glenn Washburn |
Subject: |
[PATCH v3 15/15] grub-shell: Add flexibility in QEMU firmware handling |
Date: |
Thu, 10 Feb 2022 15:51:32 -0600 |
The current qemu firmware paths for arm-efi and arm64-efi are not available
on Ubuntu/Debian but are hardcoded. Switch to first looking for firmware
files in the source directory and if not found, look for them in locations
where Debian installs them. Prefer to use the firmware file usable with the
QEMU '-bios' option and if not found use the newer pflash firmware files.
This allows supporting older systems more easily. By looking for files in
the source directory first, system firmware files can be overridden and it
can be ensured that the tests can be run regardless of the distro and where
it stores firmware files. If no firmware files are found, print an error
message telling the user that those files must exist and exit with error.
Do not load the system 32-bit ARM firmware VARS file because it must be
writable to prevent a data exception and boot failure. So in order to use
the VARS file, it must be copied to a writable location, but its quite large
at 64M and is not needed to boot successfully.
Signed-off-by: Glenn Washburn <development@efficientek.com>
---
tests/util/grub-shell.in | 105 +++++++++++++++++++++++++++++++++++++--
1 file changed, 101 insertions(+), 4 deletions(-)
diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in
index 3df74cbe2..46f847ab7 100644
--- a/tests/util/grub-shell.in
+++ b/tests/util/grub-shell.in
@@ -180,21 +180,92 @@ case
"${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
boot=cd
console=console
trim=1
- qemuopts="-bios OVMF-ia32.fd $qemuopts"
+ bios=${srcdir}/OVMF32.fd
+ pflash_code=${srcdir}/OVMF32_CODE.fd
+ pflash_vars=${srcdir}/OVMF32_VARS.fd
+ if [ -f "$bios" ]; then
+ qemuopts="-bios $bios $qemuopts"
+ elif [ -f "$pflash_code" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=0,readonly=on,file=$pflash_code $qemuopts"
+ if [ -f "$pflash_vars" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=1,readonly=on,file=$pflash_vars $qemuopts"
+ fi
+ else
+ bios=/usr/share/qemu/OVMF32.fd
+ pflash_code=/usr/share/OVMF/OVMF32_CODE_4M.secboot.fd
+ pflash_vars=/usr/share/OVMF/OVMF32_VARS_4M.fd
+ if [ -f "$bios" ]; then
+ qemuopts="-bios $bios $qemuopts"
+ elif [ -f "$pflash_code" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=0,readonly=on,file=$pflash_code $qemuopts"
+ qemuopts="-drive
if=pflash,format=raw,unit=1,readonly=on,file=$pflash_vars $qemuopts"
+ else
+ echo "Firmware not found, please make sure $bios or both
$pflash_code and $pflash_vars exist." >&2
+ exit 1
+ fi
+ fi
+ qemuopts="-machine q35,accel=tcg $qemuopts"
;;
x86_64-efi)
qemu=qemu-system-x86_64
boot=cd
console=console
trim=1
- qemuopts="-bios OVMF.fd $qemuopts"
+ bios=${srcdir}/OVMF.fd
+ pflash_code=${srcdir}/OVMF_CODE.fd
+ pflash_vars=${srcdir}/OVMF_VARS.fd
+ if [ -f "$bios" ]; then
+ qemuopts="-bios $bios $qemuopts"
+ elif [ -f "$pflash_code" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=0,readonly=on,file=$pflash_code $qemuopts"
+ if [ -f "$pflash_vars" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=1,readonly=on,file=$pflash_vars $qemuopts"
+ fi
+ else
+ bios=/usr/share/qemu/OVMF.fd
+ pflash_code=/usr/share/OVMF/OVMF_CODE.fd
+ pflash_vars=/usr/share/OVMF/OVMF_VARS.fd
+ if [ -f "$bios" ]; then
+ qemuopts="-bios $bios $qemuopts"
+ elif [ -f "$pflash_code" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=0,readonly=on,file=$pflash_code $qemuopts"
+ qemuopts="-drive
if=pflash,format=raw,unit=1,readonly=on,file=$pflash_vars $qemuopts"
+ else
+ echo "Firmware not found, please make sure $bios or both
$pflash_code and $pflash_vars exist." >&2
+ exit 1
+ fi
+ fi
;;
arm64-efi)
qemu=qemu-system-aarch64
boot=hd
console=console
trim=1
- qemuopts="-machine virt -cpu cortex-a57 -bios
/usr/share/qemu-efi/QEMU_EFI.fd $qemuopts"
+ bios=${srcdir}/AAVMF.fd
+ pflash_code=${srcdir}/AAVMF_CODE.fd
+ pflash_vars=${srcdir}/AAVMF_VARS.fd
+ if [ -f "$bios" ]; then
+ qemuopts="-bios $bios $qemuopts"
+ elif [ -f "$pflash_code" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=0,readonly=on,file=$pflash_code $qemuopts"
+ if [ -f "$pflash_vars" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=1,readonly=on,file=$pflash_vars $qemuopts"
+ fi
+ else
+ bios=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd
+ pflash_code=/usr/share/AAVMF/AAVMF_CODE.fd
+ pflash_vars=/usr/share/AAVMF/AAVMF_VARS.fd
+ if [ -f "$bios" ]; then
+ qemuopts="-bios $bios $qemuopts"
+ elif [ -f "$pflash_code" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=0,readonly=on,file=$pflash_code $qemuopts"
+ qemuopts="-drive
if=pflash,format=raw,unit=1,readonly=on,file=$pflash_vars $qemuopts"
+ else
+ echo "Firmware not found, please make sure $bios or both
$pflash_code and $pflash_vars exist." >&2
+ exit 1
+ fi
+ fi
+ qemuopts="-machine virt -cpu cortex-a57 $qemuopts"
disk="device virtio-blk-device,drive=hd1 -drive if=none,id=hd1,file="
serial_port=
;;
@@ -203,7 +274,33 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}"
in
boot=hd
console=console
trim=1
- qemuopts="-machine virt -bios /usr/share/ovmf-arm/QEMU_EFI.fd $qemuopts"
+ bios=${srcdir}/AAVMF32.fd
+ pflash_code=${srcdir}/AAVMF32_CODE.fd
+ pflash_vars=${srcdir}/AAVMF32_VARS.fd
+ if [ -f "$bios" ]; then
+ qemuopts="-bios $bios $qemuopts"
+ elif [ -f "$pflash_code" ]; then
+ qemuopts="-drive
if=pflash,format=raw,unit=0,readonly=on,file=$pflash_code $qemuopts"
+ if [ -f "$pflash_vars" ]; then
+ qemuopts="-drive if=pflash,format=raw,unit=1,file=$pflash_vars
$qemuopts"
+ fi
+ else
+ bios=/usr/share/AAVMF/AAVMF32.fd
+ pflash_code=/usr/share/AAVMF/AAVMF32_CODE.fd
+ pflash_vars=/usr/share/AAVMF/AAVMF32_VARS.fd
+ if [ -f "$bios" ]; then
+ qemuopts="-bios $bios $qemuopts"
+ elif [ -f "$pflash_code" ]; then
+ # NOTE: Do not use the pflash VARS file because it cannot be
+ # used in readonly. So it would need to be copied to a writable
+ # path, but its large at 64M and not needed for running tests.
+ qemuopts="-drive
if=pflash,format=raw,unit=0,readonly=on,file=$pflash_code $qemuopts"
+ else
+ echo "Firmware not found, please make sure $bios or both
$pflash_code and $pflash_vars exist." >&2
+ exit 1
+ fi
+ fi
+ qemuopts="-machine virt $qemuopts"
disk="device virtio-blk-device,drive=hd1 -drive if=none,id=hd1,file="
serial_port=efi0
;;
--
2.27.0
- [PATCH v3 05/15] grub-shell: Put all generated files into working dir and use better file names, (continued)
- [PATCH v3 05/15] grub-shell: Put all generated files into working dir and use better file names, Glenn Washburn, 2022/02/10
- [PATCH v3 06/15] grub-shell: Add grub output logfile with grub-shell --debug, Glenn Washburn, 2022/02/10
- [PATCH v3 07/15] grub-shell: Set exit status to qemu exit status, Glenn Washburn, 2022/02/10
- [PATCH v3 08/15] grub-shell: Only cleanup working directory file if QEMU does not fail or timeout, Glenn Washburn, 2022/02/10
- [PATCH v3 09/15] grub-shell: Create run.sh in working directory for easily running test again, Glenn Washburn, 2022/02/10
- [PATCH v3 10/15] grub-shell: Add $GRUB_QEMU_OPTS to run.sh to easily see unofficial QEMU arguments, Glenn Washburn, 2022/02/10
- [PATCH v3 11/15] tests: Allow turning on shell tracing from environment variables, Glenn Washburn, 2022/02/10
- [PATCH v3 12/15] grub-shell: Add --verbose to mkrescue when $debug is greater than 2, Glenn Washburn, 2022/02/10
- [PATCH v3 14/15] grub-shell: Use malta qemu-mips machine type instead off non-existant indy, Glenn Washburn, 2022/02/10
- [PATCH v3 13/15] grub-shell: Only turn on qemu head when large debug value is specified, Glenn Washburn, 2022/02/10
- [PATCH v3 15/15] grub-shell: Add flexibility in QEMU firmware handling,
Glenn Washburn <=