From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1HmXgS-00054W-SA for mharc-grub-devel@gnu.org; Fri, 11 May 2007 12:09:32 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HmXgR-00052D-39 for grub-devel@gnu.org; Fri, 11 May 2007 12:09:31 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HmXgQ-00051j-Ko for grub-devel@gnu.org; Fri, 11 May 2007 12:09:30 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HmXgQ-00051e-2U for grub-devel@gnu.org; Fri, 11 May 2007 12:09:30 -0400 Received: from aybabtu.com ([69.60.117.155]) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1HmXYy-0003oS-BK for grub-devel@gnu.org; Fri, 11 May 2007 12:01:48 -0400 Received: from [192.168.10.6] (helo=aragorn) by aybabtu.com with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.63) (envelope-from ) id 1HmXYw-0006hA-5s for grub-devel@gnu.org; Fri, 11 May 2007 18:01:47 +0200 Received: from rmh by aragorn with local (Exim 4.63) (envelope-from ) id 1HmXaM-0007qI-Uv for grub-devel@gnu.org; Fri, 11 May 2007 18:03:14 +0200 Date: Fri, 11 May 2007 18:03:14 +0200 From: Robert Millan To: grub-devel@gnu.org Message-ID: <20070511160314.GA30111@aragorn> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="W/nzBZO5zC0uMSeA" Content-Disposition: inline Organization: free as in freedom X-Message-Flag: Microsoft discourages use of Outlook. X-Debbugs-No-Ack: true User-Agent: Mutt/1.5.13 (2006-08-11) X-detected-kernel: Genre and OS details not recognized. Subject: [PATCH] grub-install for EFI X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 May 2007 16:09:31 -0000 --W/nzBZO5zC0uMSeA Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, Please have a look at this patch that adds grub-install for EFI and tell me what you think. I have some doubts/comments myself, and I'll reply to my own message to use the patch context. -- Robert Millan My spam trap is honeypot@aybabtu.com. Note: this address is only intended for spam harvesters. Writing to it will get you added to my black list. --W/nzBZO5zC0uMSeA Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="efi_grub_install.diff" diff -Nur grub2-1.95+20070507.old/conf/i386-efi.rmk grub2-1.95+20070507/conf/i386-efi.rmk --- grub2-1.95+20070507.old/conf/i386-efi.rmk 2007-05-11 17:45:18.000000000 +0200 +++ grub2-1.95+20070507/conf/i386-efi.rmk 2007-05-11 17:57:19.000000000 +0200 @@ -6,7 +6,7 @@ # Utilities. bin_UTILITIES = grub-mkimage -#sbin_UTILITIES = grub-setup grub-mkdevicemap grub-probe +sbin_UTILITIES = grub-mkdevicemap grub-probe #ifeq ($(enable_grub_emu), yes) #sbin_UTILITIES += grub-emu #endif @@ -24,15 +24,16 @@ # kern/fs.c kern/env.c fs/fshelp.c # For grub-mkdevicemap. -#grub_mkdevicemap_SOURCES = util/i386/pc/grub-mkdevicemap.c util/misc.c +grub_mkdevicemap_SOURCES = util/i386/pc/grub-mkdevicemap.c util/misc.c # For grub-probe. -#grub_probe_SOURCES = util/i386/pc/grub-probe.c \ -# util/i386/pc/biosdisk.c util/misc.c util/i386/pc/getroot.c \ -# kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c \ -# fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c fs/ufs.c \ -# fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c kern/env.c fs/fshelp.c \ -# fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c +grub_probe_SOURCES = util/i386/pc/grub-probe.c \ + util/i386/pc/biosdisk.c util/misc.c util/i386/pc/getroot.c \ + kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c \ + fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c \ + partmap/gpt.c fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c \ + kern/env.c fs/fshelp.c fs/xfs.c fs/affs.c fs/sfs.c fs/hfsplus.c \ + disk/lvm.c disk/raid.c # For grub-emu. grub_emu_DEPENDENCIES = grub_script.tab.c grub_script.tab.h \ diff -Nur grub2-1.95+20070507.old/util/i386/efi/grub-install.in grub2-1.95+20070507/util/i386/efi/grub-install.in --- grub2-1.95+20070507.old/util/i386/efi/grub-install.in 1970-01-01 01:00:00.000000000 +0100 +++ grub2-1.95+20070507/util/i386/efi/grub-install.in 2007-05-11 18:00:44.000000000 +0200 @@ -0,0 +1,206 @@ +#! /bin/sh + +# Install GRUB on your EFI partition. +# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St - Suite 330, Boston, MA 02110, USA. + +# Initialize some variables. +transform="@program_transform_name@" + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +sbindir=@sbindir@ +bindir=@bindir@ +libdir=@libdir@ +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_TARNAME=@PACKAGE_TARNAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ +target_cpu=@target_cpu@ +platform=@platform@ +pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}` + +grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` +grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}` +grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` +modules= + +install_directory= +no_floppy= +force_lba= +recheck=no +debug=no + +# Usage: usage +# Print the usage. +usage () { + cat <. +EOF +} + +# Check the arguments. +for option in "$@"; do + case "$option" in + -h | --help) + usage + exit 0 ;; + -v | --version) + echo "grub-install (GNU GRUB ${PACKAGE_VERSION})" + exit 0 ;; + --modules=*) + modules=`echo "$option" | sed 's/--modules=//'` ;; + --grub-mkimage=*) + grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;; + --grub-mkdevicemap=*) + grub_mkdevicemap=`echo "$option" | sed 's/--grub-mkdevicemap=//'` ;; + --grub-probe=*) + grub_probe=`echo "$option" | sed 's/--grub-probe=//'` ;; + --no-floppy) + no_floppy="--no-floppy" ;; + --recheck) + recheck=yes ;; + # This is an undocumented feature... + --debug) + debug=yes ;; + -*) + echo "Unrecognized option \`$option'" 1>&2 + usage + exit 1 + ;; + *) + if test "x$install_directory" != x; then + echo "More than one install_directories?" 1>&2 + usage + exit 1 + fi + install_directory="${option}" ;; + esac +done + +if test "x$install_directory" = x; then + echo "install_directory not specified." 1>&2 + usage + exit 1 +fi + +# If the debugging feature is enabled, print commands. +if test $debug = yes; then + set -x +fi + +grubdir=${install_directory} +device_map=${grubdir}/device.map + +# Check if GRUB is installed. +set $grub_mkimage dummy +if test -f "$1"; then + : +else + echo "$1: Not found." 1>&2 + exit 1 +fi + +set $grub_mkdevicemap dummy +if test -f "$1"; then + : +else + echo "$1: Not found." 1>&2 + exit 1 +fi + +# Create the GRUB directory if it is not present. +test -d "$grubdir" || mkdir "$grubdir" || exit 1 + +# If --recheck is specified, remove the device map, if present. +if test $recheck = yes; then + rm -f $device_map +fi + +# Create the device map file if it is not present. +if test -f "$device_map"; then + : +else + # Create a safe temporary file. + test -n "$mklog" && log_file=`$mklog` + + $grub_mkdevicemap --device-map=$device_map $no_floppy || exit 1 +fi + +# Make sure that there is no duplicated entry. +tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \ + | sort | uniq -d | sed -n 1p` +if test -n "$tmp"; then + echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 + exit 1 +fi + +# Copy the GRUB images to the GRUB directory. +for file in ${grubdir}/*.mod ${grubdir}/*.lst; do + if test -f $file && [ "`basename $file`" != menu.lst ]; then + rm -f $file || exit 1 + fi +done +for file in ${pkglibdir}/*.mod ${pkglibdir}/*.lst; do + cp -f $file ${grubdir} || exit 1 +done + +# Create the core image. First, auto-detect the filesystem module. +fs_module=`$grub_probe --target=fs --device-map=${device_map} ${grubdir}` +if test "x$fs_module" = xfat; then :; else + echo "${grubdir} doesn't look like an EFI partition." 1>&2 + exit 1 +fi + +# Then the partition map module. +partmap_module=`$grub_probe --target=partmap --device-map=${device_map} ${grubdir}` +if test "x$partmap_module" = x -a "x$modules" = x; then + echo "Auto-detection of a partition map module failed." 1>&2 + echo "Please specify the module with the option \`--modules' explicitly." 1>&2 + exit 1 +fi + +# _chain is often useful +modules="$modules $fs_module $partmap_module _chain" + +$grub_mkimage --output=${grubdir}/grub.efi $modules || exit 1 + +# Prompt the user to check if the device map is correct. +echo "Installation finished. No error reported." +echo "This is the contents of the device map $device_map." +echo "Check if this is correct or not. If any of the lines is incorrect," +echo "fix it and re-run the script \`grub-install'." +echo + +cat $device_map + +# Bye. +exit 0 diff -Nur grub2-1.95+20070507.old/util/i386/pc/biosdisk.c grub2-1.95+20070507/util/i386/pc/biosdisk.c --- grub2-1.95+20070507.old/util/i386/pc/biosdisk.c 2007-05-11 17:45:18.000000000 +0200 +++ grub2-1.95+20070507/util/i386/pc/biosdisk.c 2007-05-11 17:57:19.000000000 +0200 @@ -18,7 +18,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include +#include #include #include #include diff -Nur grub2-1.95+20070507.old/util/i386/pc/grub-probe.c grub2-1.95+20070507/util/i386/pc/grub-probe.c --- grub2-1.95+20070507.old/util/i386/pc/grub-probe.c 2007-05-11 17:45:18.000000000 +0200 +++ grub2-1.95+20070507/util/i386/pc/grub-probe.c 2007-05-11 17:57:19.000000000 +0200 @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include --W/nzBZO5zC0uMSeA--