Since the recent bump of Bootlin toolchains in
947dbc92a2 ("toolchain/toolchain-external/toolchain-external-bootlin:
update to Bootlin toolchains 2025.08-1"), our grub2 tests are failing
as the new uClibc toolchains based on gcc 14.x have an issue building
grub.
Until this issue gets fixed at the uClibc level and since anyway glibc
is now the default in Buildroot, let's switch to using glibc
toolchains.
Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/10972858692
https://gitlab.com/buildroot.org/buildroot/-/jobs/10972858686
https://gitlab.com/buildroot.org/buildroot/-/jobs/10972858680
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Julien Olivain <ju.o@free.fr>
225 lines
8.8 KiB
Python
225 lines
8.8 KiB
Python
import os
|
|
|
|
import infra.basetest
|
|
|
|
|
|
class TestGrubi386BIOS(infra.basetest.BRTest):
|
|
config = \
|
|
"""
|
|
BR2_x86_core2=y
|
|
BR2_TOOLCHAIN_EXTERNAL=y
|
|
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_CORE2_GLIBC_STABLE=y
|
|
BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh {}"
|
|
BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
|
|
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pc/genimage-bios.cfg"
|
|
BR2_LINUX_KERNEL=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.204"
|
|
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
|
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config"
|
|
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
|
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
|
BR2_TARGET_ROOTFS_EXT2=y
|
|
BR2_TARGET_GRUB2=y
|
|
BR2_TARGET_GRUB2_I386_PC=y
|
|
BR2_TARGET_GRUB2_INSTALL_TOOLS=y
|
|
BR2_PACKAGE_HOST_GENIMAGE=y
|
|
""".format(infra.filepath("tests/boot/test_grub/post-build.sh"))
|
|
|
|
def test_run(self):
|
|
hda = os.path.join(self.builddir, "images", "disk.img")
|
|
self.emulator.boot(arch="i386", options=["-hda", hda])
|
|
self.emulator.login()
|
|
|
|
|
|
class TestGrubi386EFI(infra.basetest.BRTest):
|
|
config = \
|
|
"""
|
|
BR2_x86_core2=y
|
|
BR2_TOOLCHAIN_EXTERNAL=y
|
|
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_CORE2_GLIBC_STABLE=y
|
|
BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh {}"
|
|
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/pc/post-image-efi.sh"
|
|
BR2_LINUX_KERNEL=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.204"
|
|
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
|
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config"
|
|
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
|
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
|
BR2_PACKAGE_EFIVAR=y
|
|
BR2_TARGET_ROOTFS_EXT2=y
|
|
BR2_TARGET_EDK2=y
|
|
BR2_TARGET_GRUB2=y
|
|
BR2_TARGET_GRUB2_I386_EFI=y
|
|
BR2_TARGET_GRUB2_INSTALL_TOOLS=y
|
|
BR2_PACKAGE_HOST_GENIMAGE=y
|
|
BR2_PACKAGE_HOST_MTOOLS=y
|
|
BR2_PACKAGE_HOST_DOSFSTOOLS=y
|
|
""".format(infra.filepath("tests/boot/test_grub/post-build.sh"))
|
|
|
|
def test_run(self):
|
|
hda = os.path.join(self.builddir, "images", "disk.img")
|
|
bios = os.path.join(self.builddir, "images", "OVMF.fd")
|
|
# In QEMU v5.1.0 up to v7.2.0, the CPU hotplug register block misbehaves.
|
|
# EDK2 hang if the bug is detected in Qemu after printing errors to IO port 0x402
|
|
# (requires BR2_TARGET_EDK2_OVMF_DEBUG_ON_SERIAL to see them)
|
|
# The Docker image used by the Buildroot gitlab-ci uses Qemu 5.2.0, the workaround
|
|
# can be removed as soon as the Docker image is updated to provided Qemu >= 8.0.0.
|
|
# https://github.com/tianocore/edk2/commit/bf5678b5802685e07583e3c7ec56d883cbdd5da3
|
|
# http://lists.busybox.net/pipermail/buildroot/2023-July/670825.html
|
|
qemu_fw_cfg = "name=opt/org.tianocore/X-Cpuhp-Bugcheck-Override,string=yes"
|
|
self.emulator.boot(arch="i386", options=["-bios", bios, "-hda", hda, "-fw_cfg", qemu_fw_cfg])
|
|
self.emulator.login()
|
|
|
|
cmd = "modprobe efivarfs"
|
|
self.assertRunOk(cmd)
|
|
|
|
cmd = "mount -t efivarfs none /sys/firmware/efi/efivars"
|
|
self.assertRunOk(cmd)
|
|
|
|
cmd = "efivar -l"
|
|
self.assertRunOk(cmd)
|
|
|
|
|
|
class TestGrubX8664EFI(infra.basetest.BRTest):
|
|
config = \
|
|
"""
|
|
BR2_x86_64=y
|
|
BR2_x86_corei7=y
|
|
BR2_TOOLCHAIN_EXTERNAL=y
|
|
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_GLIBC_STABLE=y
|
|
BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh {}"
|
|
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/pc/post-image-efi.sh"
|
|
BR2_LINUX_KERNEL=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.204"
|
|
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
|
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config"
|
|
BR2_LINUX_KERNEL_INSTALL_TARGET=y
|
|
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
|
BR2_PACKAGE_EFIVAR=y
|
|
BR2_TARGET_ROOTFS_EXT2=y
|
|
BR2_TARGET_EDK2=y
|
|
BR2_TARGET_GRUB2=y
|
|
BR2_TARGET_GRUB2_X86_64_EFI=y
|
|
BR2_TARGET_GRUB2_INSTALL_TOOLS=y
|
|
BR2_PACKAGE_HOST_GENIMAGE=y
|
|
BR2_PACKAGE_HOST_MTOOLS=y
|
|
BR2_PACKAGE_HOST_DOSFSTOOLS=y
|
|
""".format(infra.filepath("tests/boot/test_grub/post-build.sh"))
|
|
|
|
def test_run(self):
|
|
hda = os.path.join(self.builddir, "images", "disk.img")
|
|
bios = os.path.join(self.builddir, "images", "OVMF.fd")
|
|
# In QEMU v5.1.0 up to v7.2.0, the CPU hotplug register block misbehaves.
|
|
# EDK2 hang if the bug is detected in Qemu after printing errors to IO port 0x402
|
|
# (requires BR2_TARGET_EDK2_OVMF_DEBUG_ON_SERIAL to see them)
|
|
# The Docker image used by the Buildroot gitlab-ci uses Qemu 5.2.0, the workaround
|
|
# can be removed as soon as the Docker image is updated to provided Qemu >= 8.0.0.
|
|
# https://github.com/tianocore/edk2/commit/bf5678b5802685e07583e3c7ec56d883cbdd5da3
|
|
# http://lists.busybox.net/pipermail/buildroot/2023-July/670825.html
|
|
qemu_fw_cfg = "name=opt/org.tianocore/X-Cpuhp-Bugcheck-Override,string=yes"
|
|
self.emulator.boot(arch="x86_64", options=["-bios", bios, "-cpu", "Nehalem", "-hda", hda, "-fw_cfg", qemu_fw_cfg])
|
|
self.emulator.login()
|
|
|
|
cmd = "modprobe efivarfs"
|
|
self.assertRunOk(cmd)
|
|
|
|
cmd = "mount -t efivarfs none /sys/firmware/efi/efivars"
|
|
self.assertRunOk(cmd)
|
|
|
|
cmd = "efivar -l"
|
|
self.assertRunOk(cmd)
|
|
|
|
|
|
class TestGrubAArch64EFI(infra.basetest.BRTest):
|
|
config = \
|
|
"""
|
|
BR2_aarch64=y
|
|
BR2_TOOLCHAIN_EXTERNAL=y
|
|
BR2_ROOTFS_POST_IMAGE_SCRIPT="{post_image}"
|
|
BR2_LINUX_KERNEL=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.15.18"
|
|
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
|
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
|
|
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{linux_fragment}"
|
|
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
|
BR2_PACKAGE_EFIVAR=y
|
|
BR2_TARGET_ROOTFS_EXT2=y
|
|
BR2_TARGET_EDK2=y
|
|
BR2_TARGET_GRUB2=y
|
|
BR2_PACKAGE_HOST_GENIMAGE=y
|
|
BR2_PACKAGE_HOST_MTOOLS=y
|
|
BR2_PACKAGE_HOST_DOSFSTOOLS=y
|
|
BR2_PACKAGE_HOST_QEMU=y
|
|
BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y
|
|
""".format(post_image=infra.filepath("tests/boot/test_grub/post-image-aarch64-efi.sh"),
|
|
linux_fragment=infra.filepath("tests/boot/test_grub/linux-aarch64-efi.config"))
|
|
|
|
def test_run(self):
|
|
hda = os.path.join(self.builddir, "images", "disk.img")
|
|
bios = os.path.join(self.builddir, "images", "QEMU_EFI.fd")
|
|
self.emulator.boot(arch="aarch64", options=["-M", "virt", "-cpu", "cortex-a53", "-bios", bios, "-hda", hda])
|
|
self.emulator.login()
|
|
|
|
cmd = "modprobe efivarfs"
|
|
self.assertRunOk(cmd)
|
|
|
|
cmd = "mount -t efivarfs none /sys/firmware/efi/efivars"
|
|
self.assertRunOk(cmd)
|
|
|
|
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 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)
|