[PATCH v5 08/13] CI: add tests booting UKI via grub
Marek Marczykowski-Górecki <[email protected]> Wed, 5 Aug 2026 16:55:36 +0200
| Newsgroups | gmane.comp.emulators.xen.devel |
|---|---|
| Message-ID | <8f7e40b5f544677321d994fa6168e2090333635a.1785941707.git-series.marmarek@invisiblethingslab.com> |
Test booting unified xen.efi via grub. The new test (grub2-pv) simply loads the same xen.efi as the earlier test but via Grub's "chainloader" command. In theory it should be the same as loading it directly from firmware, but practice shows there are some corner cases sometimes (especially before calling ExitBootServices). Signed-off-by: Marek Marczykowski-Górecki <[email protected]> --- New in v5 Needs containers rebuild --- automation/build/debian/13-x86_64.dockerfile | 1 +- automation/gitlab-ci/test.yaml | 8 ++++- automation/scripts/qemu-smoke-x86-64-efi-uki.sh | 36 ++++++++++++++++-- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/automation/build/debian/13-x86_64.dockerfile b/automation/build/debian/13-x86_64.dockerfile index 8a36774f1155..3ae1d27fb257 100644 --- a/automation/build/debian/13-x86_64.dockerfile +++ b/automation/build/debian/13-x86_64.dockerfile @@ -59,6 +59,7 @@ RUN <<EOF e2fsprogs expect fakeroot + grub-efi ovmf qemu-system-x86 systemctl diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml index 8e2db8c33528..1359d70ff2b4 100644 --- a/automation/gitlab-ci/test.yaml +++ b/automation/gitlab-ci/test.yaml @@ -812,6 +812,14 @@ qemu-smoke-x86-64-gcc-efi-uki: - *x86_64-test-needs - alpine-3.24-x86_64-gcc-debug +qemu-smoke-x86-64-gcc-efi-uki-grub: + extends: .qemu-smoke-x86_64 + script: + - ./automation/scripts/qemu-smoke-x86-64-efi-uki.sh grub2-pv 2>&1 | tee ${LOGFILE} + needs: + - *x86_64-test-needs + - alpine-3.24-x86_64-gcc-debug + qemu-smoke-riscv64-gcc: extends: .qemu-riscv64 script: diff --git a/automation/scripts/qemu-smoke-x86-64-efi-uki.sh b/automation/scripts/qemu-smoke-x86-64-efi-uki.sh index 8275dd1a81b3..82702fdcb682 100755 --- a/automation/scripts/qemu-smoke-x86-64-efi-uki.sh +++ b/automation/scripts/qemu-smoke-x86-64-efi-uki.sh @@ -11,9 +11,14 @@ build_dom0 # variant should be either pv or pvh variant=$1 +extra= +grub2_chain=false +grub2_linux=false + case $variant in pvh) extra="dom0-iommu=none dom0=pvh" ;; pv) extra= ;; + grub2-pv) grub2_chain=true; extra= ;; *) echo "Unknown test variant!" >&2; exit 2;; esac @@ -32,15 +37,40 @@ vma=$(objdump -h xen.efi \ | perl -ane 'if (/\..*/) { $vma=hex($F[2]) + hex($F[3]) } END { printf "0x%016x\n", ($vma + 0xfff) & ~0xfff }') +UKI_PATH=boot-esp/EFI/BOOT/BOOTX64.EFI +ramdisk_section=( + --add-section .ramdisk=dom0-rootfs.cpio.gz + --change-section-vma .ramdisk=$(( $vma + 0x2000000 )) +) +if $grub2_chain; then + grub-mkimage \ + -p /EFI/BOOT \ + -O x86_64-efi \ + -o boot-esp/EFI/BOOT/BOOTX64.EFI \ + chain \ + ext2 \ + fat \ + linux \ + normal \ + part_gpt \ + part_msdos + if $grub2_chain; then + echo "chainloader /EFI/BOOT/xen.efi" > boot-esp/EFI/BOOT/grub.cfg + echo "boot" >> boot-esp/EFI/BOOT/grub.cfg + UKI_PATH=boot-esp/EFI/BOOT/xen.efi + fi +fi + objcopy \ --add-section .config=xen.cfg \ --change-section-vma .config=$vma \ --add-section .kernel=bzImage \ --change-section-vma .kernel=$(( $vma + 0x100000 )) \ - --add-section .ramdisk=dom0-rootfs.cpio.gz \ - --change-section-vma .ramdisk=$(( $vma + 0x2000000 )) \ + "${ramdisk_section[@]}" \ xen.efi \ - boot-esp/EFI/BOOT/BOOTX64.EFI + $UKI_PATH + +ls -l boot-esp/EFI/BOOT/ ./ cp /usr/share/OVMF/OVMF_CODE_4M.fd OVMF_CODE.fd cp /usr/share/OVMF/OVMF_VARS_4M.fd OVMF_VARS.fd -- git-series 0.9.1