|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v5 08/13] CI: add tests booting UKI via grub
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |