From 601c84fd16bff48c8fdcd02b0e4381025ff110b5 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Sat, 12 Jun 2010 15:06:53 +0100 Subject: [PATCH] * util/grub-mkconfig.in: Capitalise and export GRUB_PREFIX. * util/grub.d/00_header.in: Use GRUB_PREFIX rather than computing it again. * util/grub.d/10_linux.in (linux_entry): Load all video drivers, which may be needed to allow the loader to program modes for the kernel. --- util/grub-mkconfig.in | 15 ++++++++------- util/grub.d/00_header.in | 5 ++--- util/grub.d/10_linux.in | 10 ++++++++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in index d916459d6..836bd6318 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -92,11 +92,11 @@ case "$host_os" in netbsd* | openbsd*) # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub # instead of /boot/grub. - grub_prefix=`echo /grub | sed ${transform}` + GRUB_PREFIX=`echo /grub | sed ${transform}` ;; *) # Use /boot/grub by default. - grub_prefix=`echo /boot/grub | sed ${transform}` + GRUB_PREFIX=`echo /boot/grub | sed ${transform}` ;; esac @@ -137,9 +137,9 @@ else exit 1 fi -mkdir -p ${grub_prefix} +mkdir -p ${GRUB_PREFIX} -if test -e ${grub_prefix}/device.map ; then : ; else +if test -e ${GRUB_PREFIX}/device.map ; then : ; else ${grub_mkdevicemap} fi @@ -174,7 +174,7 @@ fi for x in ${GRUB_TERMINAL_OUTPUT}; do if [ "x${x}" = "xgfxterm" ]; then # If this platform supports gfxterm, try to use it. - if ! test -e ${grub_prefix}/gfxterm.mod ; then + if ! test -e ${GRUB_PREFIX}/gfxterm.mod ; then if [ "x$termoutdefault" != "x1" ]; then echo "gfxterm isn't available on your platform" >&2 ; exit 1 fi @@ -183,7 +183,7 @@ for x in ${GRUB_TERMINAL_OUTPUT}; do fi # FIXME: this should do something smarter than just loading first # video backend. - GRUB_VIDEO_BACKEND=$(head -n 1 ${grub_prefix}/video.lst || true) + GRUB_VIDEO_BACKEND=$(head -n 1 ${GRUB_PREFIX}/video.lst || true) if [ -z "${GRUB_VIDEO_BACKEND}" ] ; then if [ "x$termoutdefault" != "x1" ]; then echo "No suitable backend could be found for gfxterm." >&2 ; exit 1 @@ -242,7 +242,8 @@ export GRUB_DEVICE \ GRUB_FS \ GRUB_FONT_PATH \ GRUB_PRELOAD_MODULES \ - GRUB_VIDEO_BACKEND + GRUB_VIDEO_BACKEND \ + GRUB_PREFIX # These are optional, user-defined variables. export GRUB_DEFAULT \ diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in index 791840a60..76e0bc32d 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -21,8 +21,7 @@ transform="@program_transform_name@" prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ -grub_prefix=`echo /boot/grub | sed ${transform}` -locale_dir=`echo /boot/grub/locale | sed ${transform}` +locale_dir=`echo ${GRUB_PREFIX}/locale | sed ${transform}` grub_lang=`echo $LANG | cut -d _ -f 1` . ${libdir}/grub/grub-mkconfig_lib @@ -89,7 +88,7 @@ for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do done if [ "x$serial" = x1 ]; then - if ! test -e ${grub_prefix}/serial.mod ; then + if ! test -e ${GRUB_PREFIX}/serial.mod ; then echo "Serial terminal not available on this platform." >&2 ; exit 1 fi diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in index 416ab6ed6..b2cff628d 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -78,6 +78,16 @@ EOF EOF fi + # Load video drivers, which may be needed to allow the loader to program + # modes for the kernel. + # TODO: Other kernels may need the same mode programming, especially on + # EFI. Should we move this somewhere more generic? + for module in $(cat ${GRUB_PREFIX}/video.lst); do + cat << EOF + insmod $module +EOF + done + if [ -z "${prepare_boot_cache}" ]; then prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")" fi