From 1d6f6dd178e9a85d6c861413dd1a8a18a260a996 Mon Sep 17 00:00:00 2001 From: Ryan Finnie Date: Mon, 31 Oct 2022 21:55:14 -0700 Subject: [PATCH] memtest: Support arch-specific and EFI memtest86+ 6.00 - BIOS: Final filename doesn't change (memtest), but now uses a 64-bit version on amd64. - EFI: Now included as memtest.efi; 32-bit on i386, 64-bit on amd64. As it's GRUB-only, we can test for the existence of memtest.efi (6.00+ only) in GRUB itself. - Add @MEMTEST_DIR@ to facilitate directory-based testing in GRUB. This expands upon the previous MVP commit 15e78a3eec7b0b2fa8eed576e36a3bd179f441c4 . --- scripts/build/binary_grub_cfg | 4 +++- scripts/build/binary_memtest | 14 ++++++++++++-- share/bootloaders/grub-pc/grub.cfg | 2 +- share/bootloaders/grub-pc/memtest.cfg | 13 ++++++++++--- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/scripts/build/binary_grub_cfg b/scripts/build/binary_grub_cfg index 1ead2c7a7..9af07a74c 100755 --- a/scripts/build/binary_grub_cfg +++ b/scripts/build/binary_grub_cfg @@ -231,7 +231,8 @@ else fi # Assembling memtest configuration -MEMTEST_BIN="/${INITFS}/memtest" +MEMTEST_DIR="/${INITFS}" +MEMTEST_BIN="${MEMTEST_DIR}/memtest" if [ -f "binary/${MEMTEST_BIN}" ]; then ENABLE_MEMTEST="true" MEMTEST="source /boot/grub/memtest.cfg" #for backwards compatibility @@ -261,6 +262,7 @@ sed -i \ -e "s|@APPEND_INSTALL@|${LB_BOOTAPPEND_INSTALL}|" \ -e "s|@ENABLE_INSTALL_MENU@|${ENABLE_INSTALL_MENU}|" \ -e "s|@ENABLE_MEMTEST@|${ENABLE_MEMTEST}|" \ + -e "s|@MEMTEST_DIR@|${MEMTEST_DIR}|" \ -e "s|@MEMTEST_BIN@|${MEMTEST_BIN}|" \ -e "s|@MEMTEST_VERSION@|${LB_MEMTEST}|" \ -e "s|@FLAVOUR_LIVE@|${FLAVOUR_LIVE}|" \ diff --git a/scripts/build/binary_memtest b/scripts/build/binary_memtest index 52636a942..4644fdd03 100755 --- a/scripts/build/binary_memtest +++ b/scripts/build/binary_memtest @@ -75,12 +75,20 @@ Install_packages case "${LB_MEMTEST}" in memtest86+) + case "${LB_ARCHITECTURE}" in + amd64) + _MEMTEST_ARCH=x64 + ;; + i386) + _MEMTEST_ARCH=x32 + ;; + esac case "${LB_BUILD_WITH_CHROOT}" in true) - [ -e "chroot/boot/${LB_MEMTEST}x32.bin" ] && _MEMTEST_BIN="${LB_MEMTEST}x32" + [ -e "chroot/boot/${LB_MEMTEST}${_MEMTEST_ARCH}.bin" ] && _MEMTEST_BIN="${LB_MEMTEST}${_MEMTEST_ARCH}" ;; false) - [ -e "/boot/${LB_MEMTEST}x32.bin" ] && _MEMTEST_BIN="${LB_MEMTEST}x32" + [ -e "/boot/${LB_MEMTEST}${_MEMTEST_ARCH}.bin" ] && _MEMTEST_BIN="${LB_MEMTEST}${_MEMTEST_ARCH}" ;; esac ;; @@ -104,10 +112,12 @@ mkdir -p "${DESTDIR}" case "${LB_BUILD_WITH_CHROOT}" in true) cp -a "chroot/boot/${_MEMTEST_BIN}.bin" "${DESTDIR}"/memtest + [ -e "chroot/boot/${_MEMTEST_BIN}.efi" ] && cp -a "chroot/boot/${_MEMTEST_BIN}.efi" "${DESTDIR}"/memtest.efi ;; false) cp -a "/boot/${_MEMTEST_BIN}.bin" "${DESTDIR}"/memtest + [ -e "/boot/${_MEMTEST_BIN}.efi" ] && cp -a "/boot/${_MEMTEST_BIN}.efi" "${DESTDIR}"/memtest.efi ;; esac diff --git a/share/bootloaders/grub-pc/grub.cfg b/share/bootloaders/grub-pc/grub.cfg index 4e993df86..5eb6b0c08 100644 --- a/share/bootloaders/grub-pc/grub.cfg +++ b/share/bootloaders/grub-pc/grub.cfg @@ -36,7 +36,7 @@ submenu 'Utilities...' --hotkey=u { source /boot/grub/theme.cfg # Memtest (if any) - if [ "${grub_platform}" = "pc" ] -a @ENABLE_MEMTEST@; then + if @ENABLE_MEMTEST@; then source /boot/grub/memtest.cfg fi diff --git a/share/bootloaders/grub-pc/memtest.cfg b/share/bootloaders/grub-pc/memtest.cfg index 454804bb0..7edee9ab5 100644 --- a/share/bootloaders/grub-pc/memtest.cfg +++ b/share/bootloaders/grub-pc/memtest.cfg @@ -1,3 +1,10 @@ -menuentry "Memory Diagnostic Tool (@MEMTEST_VERSION@)" --hotkey=m { - linux16 @MEMTEST_BIN@ -} +if [ "${grub_platform}" = "pc" ]; then + menuentry "Memory Diagnostic Tool (@MEMTEST_VERSION@)" --hotkey=m { + linux16 @MEMTEST_BIN@ + } +elif [ "${grub_platform}" = "efi" ] -a [ -e @MEMTEST_DIR@/memtest.efi ]; then + menuentry "Memory Diagnostic Tool (@MEMTEST_VERSION@)" --hotkey=m { + insmod chain + chainloader @MEMTEST_DIR@/memtest.efi + } +fi