#!/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