[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v5 08/13] CI: add tests booting UKI via grub


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
  • Date: Wed, 5 Aug 2026 16:55:36 +0200
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=fm2 header.d=invisiblethingslab.com header.i="@invisiblethingslab.com" header.h="Cc:Content-Transfer-Encoding:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=fm3 header.d=messagingengine.com header.i="@messagingengine.com" header.h="Cc:Content-Transfer-Encoding:Content-Type:Date:Feedback-ID:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To:X-ME-Proxy:X-ME-Sender"
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>, Doug Goldstein <cardoe@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • Delivery-date: Wed, 05 Aug 2026 14:57:08 +0000
  • Feedback-id: i1568416f:Fastmail
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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 <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
---
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



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.