support/testing/tests/boot/test_grub.py: new test for RISCV64 EFI

Commit f439b47ed "boot/grub2: add RISC-V 64bit EFI support" [1]
introduced the grub2 RISC-V UEFI support.

At that time, it was not possible to have a runtime test for this.
qemu-system-riscv64 is not in the Buildroot Docker reference image,
and the base distribution (Debian 11) does not provide a
sufficiently recent version. A qemu-system-riscv64 >= 8.0.0 is needed.

Commit 0d4177598 "support/testing/infra/emulator.py: add build host
dir to qemu search path" [2] added the capability to use the
Buildroot host-qemu package inside runtime test.

With this support, it is now possible to add a runtime test for a
grub2 UEFI boot on RISC-V 64bit.

Also, due to an upstream edk2 git submodule issue, this commit
includes a workaround to use https://sources.buildroot.net for this
test. See [3].

[1] f439b47ed6
[2] 0d4177598c
[3] 47fc9e5509

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Julien Olivain 2024-11-08 19:23:57 +01:00 committed by Thomas Petazzoni
parent 48490cf7b1
commit fca1933e19

View File

@ -238,3 +238,75 @@ class TestGrubAArch64EFI(infra.basetest.BRTest):
cmd = "efivar -l"
self.assertRunOk(cmd)
class TestGrubRiscV64EFI(infra.basetest.BRTest):
scripts = [
"board/qemu/post-image.sh",
"board/qemu/riscv64-virt-efi/assemble-flash-images",
"support/scripts/genimage.sh"
]
post_image_script = " ".join(scripts)
config = \
f"""
BR2_riscv=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_ROOTFS_POST_IMAGE_SCRIPT="{post_image_script}"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/qemu/riscv64-virt-efi/genimage.cfg"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.6.59"
BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
BR2_PACKAGE_EFIVAR=y
BR2_TARGET_ROOTFS_EXT2=y
# BR2_TARGET_ROOTFS_TAR is not set
BR2_TARGET_EDK2=y
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_RISCV64_EFI=y
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_QEMU=y
BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y
"""
def __init__(self, names):
"""Setup common test variables."""
super(TestGrubRiscV64EFI, self).__init__(names)
"""All EDK2 releases <= edk2-stable202408 can't be fetched from git
anymore due to a missing git submodule as reported by [1].
Usually Buildroot fall-back using https://sources.buildroot.net
thanks to BR2_BACKUP_SITE where a backup of the generated archive
is available. But the BRConfigTest remove BR2_BACKUP_SITE default
value while generating the .config used by TestGrubAArch64EFI.
Replace the BR2_BACKUP_SITE override from BRConfigTest in order
to continue testing EDK2 package using the usual backup site.
To be removed with the next EDK2 version bump using this commit
[2].
[1] https://github.com/tianocore/edk2/issues/6398
[2] https://github.com/tianocore/edk2/commit/95d8a1c255cfb8e063d679930d08ca6426eb5701
"""
self.config = self.config.replace('BR2_BACKUP_SITE=""\n', '')
def test_run(self):
disk = os.path.join(self.builddir, "images", "disk.img")
flash0 = os.path.join(self.builddir, "images", "RISCV_VIRT_CODE.fd")
flash1 = os.path.join(self.builddir, "images", "RISCV_VIRT_VARS.fd")
qemu_opts = [
"-M", "virt,pflash0=pflash0,pflash1=pflash1,acpi=off",
"-blockdev", f"node-name=pflash0,driver=file,read-only=on,filename={flash0}",
"-blockdev", f"node-name=pflash1,driver=file,filename={flash1}",
"-drive", f"file={disk},format=raw,if=virtio"
]
self.emulator.boot(arch="riscv64", options=qemu_opts)
self.emulator.login()
cmd = "mount -t efivarfs none /sys/firmware/efi/efivars"
self.assertRunOk(cmd)
cmd = "efivar -l"
self.assertRunOk(cmd)