summaryrefslogtreecommitdiffstats
path: root/system/memtest86+/20_memtest86+
diff options
context:
space:
mode:
Diffstat (limited to 'system/memtest86+/20_memtest86+')
-rw-r--r--system/memtest86+/20_memtest86+82
1 files changed, 82 insertions, 0 deletions
diff --git a/system/memtest86+/20_memtest86+ b/system/memtest86+/20_memtest86+
new file mode 100644
index 0000000000..f585a71cec
--- /dev/null
+++ b/system/memtest86+/20_memtest86+
@@ -0,0 +1,82 @@
+#!/bin/sh
+set -e
+
+prefix="/usr"
+exec_prefix="/usr"
+datarootdir="/usr/share"
+
+. "$pkgdatadir/grub-mkconfig_lib"
+
+CLASS="--class memtest86 --class gnu --class tool"
+
+prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
+
+memtest_entry ()
+{
+ image="$1"
+ args="$2"
+ rel_image="$(make_system_path_relative_to_its_root ${image})"
+
+ # Apply some heuristics to show some images only on particular platforms.
+ basename="$(basename ${image})"
+ ftype="$(file ${image} | cut -d: -f2)"
+ if echo "${basename}" | grep -q ".elf\$" || echo "${ftype}" | grep -q "ELF"; then
+ protocol="knetbsd"
+ platform="pc"
+ #platform="" # Uncomment to show on EFI platforms; see below.
+ elif echo "${basename}" | grep -q ".efi\$" || echo "${ftype}" | grep -q "EFI"; then
+ protocol="chainloader"
+ platform="efi"
+ else # .bin, DOS/MBR boot sector
+ protocol="linux16"
+ platform="pc"
+ #platform="" # Uncomment to show on EFI platforms; see below.
+ fi
+
+ # All images listed above should boot on EFI platforms, but many (those
+ # marked with platform="pc") will likely run without graphics and appear to
+ # the casual user to not work, so are hidden by default. (Some versions
+ # beep at startup, verifying it booted, but the display will be blank.)
+ # Serial consoles may still be useful.
+ #
+ # Uncomment this to un-hide all images on EFI platforms, or selectively edit
+ # the platform lines above to un-hide particular images.
+ #if [ "$platform" = "pc" ]; then
+ # platform=""
+ #fi
+
+ if echo "${ftype}" | grep -q "Linux"; then # Linux kernel x86 boot executable
+ # .efi or .bin images may also present themselves as a Linux kernel image.
+ # When booted using the "linux" protocol, these images can be used on
+ # either "pc" or "efi" platform, and on EFI platforms they may have better
+ # or native resolution graphics.
+ protocol="linux"
+ #platform="" # Uncomment to discard platform constraint chosen above.
+ fi
+
+ # TODO: Detect multiboot images, use protocol="multiboot"
+
+ # Emit the menuentry.
+ platform_indent=""
+ if [ -n "${platform}" ]; then
+ echo "if [ x\$grub_platform = x${platform} ]; then"
+ platform_indent="${grub_tab}"
+ fi
+ echo "${platform_indent}menuentry \"Memory Tester (${basename})\" ${CLASS} {"
+ if [ "${protocol}" = "linux" -o "${protocol}" = "knetbsd" ]; then
+ echo "${platform_indent}${grub_tab}load_video"
+ fi
+ printf '%s\n' "${prepare_boot_cache}" | sed "s/^/${platform_indent}/"
+ echo "${platform_indent}${grub_tab}${protocol} ${rel_image} ${args}"
+ echo "${platform_indent}}"
+ if [ -n "${platform}" ]; then
+ echo "fi"
+ fi
+}
+
+for image in $(find /boot -maxdepth 1 -type f -regex '/boot/memtest86\+.*' | sort -Vr); do
+ if is_path_readable_by_grub "${image}" ; then
+ gettext_printf "Found memtest86 image: %s\n" "${image}" >&2
+ memtest_entry "${image}" "${GRUB_CMDLINE_MEMTEST86}"
+ fi
+done