fix many bugs. see ChangeLog.

This commit is contained in:
okuji 2000-04-02 17:22:53 +00:00
parent fa8457769b
commit eb321e77f7
20 changed files with 594 additions and 407 deletions

View file

@ -1,3 +1,58 @@
2000-04-03 OKUJI Yoshinori <okuji@gnu.org>
* stage2/stage2.c (run_menu) [GRUB_UTIL]: Removed a nested
"#ifdef GRUB_UTIL" ... "#endif".
* stage2/builtins.c (unhide_func): Don't modify SAVED_DRIVE or
SAVED_PARTITION.
(hide_func): Likewise.
* stage2/disk_io.c (set_partition_hidden_flag): Use
CURRENT_DRIVE and CURRENT_PARTITION instead of SAVED_DRIVE and
SAVED_PARTITION. Check if bit 7 in CURRENT_DRIVE is non-zero
instead of if CURRENT_DRIVE is non-zero.
* grub/asmstub.c (init_device_map): Change the message
"Probe devices..." to "Probing devices...". Suggested by Neal H
Walfield.
* stage2/pc_slice.h (PC_SLICE_TYPE_HIDDEN_FLAG): Move the
definition before the PC partition type definitions.
(IS_PC_SLICE_TYPE_FAT): Clear the hidden flag in TYPE before
checking if TYPE is either of the FAT partition types. Reported
by Thomas Schweikle <tschweikle@fiducia.de>.
2000-04-02 OKUJI Yoshinori <okuji@gnu.org>
* stage2/builtins.c (setup_func): Don't read a stage 1.5 to get
the size. Use FILEMAX instead.
If embed_func fails (i.e. ERRNUM is non-zero), goto fail.
2000-04-02 OKUJI Yoshinori <okuji@gnu.org>
Suggested by Neal H Walfield <neal@walfield.org>:
* stage2/common.c (init_bios_info): Removed a nested
"#ifndef STAGE1_5" ... "#endif".
* util/grub-install.in: Quote most of the references to
shell variables by double quotation marks.
(usage): Added a description about the argument.
* stage2/builtins.c (setup_func): Change each of the messages
when running embed_func and install_func. "Run" -> "Running".
If install_func succeeds, print a message ("Done.").
From Frank Mehnert <fm3@os.inf.tu-dresden.de>:
* stage2/char_io.c (convert_to_ascii) [!STAGE1_5]: Accept 'X'
and 'b' as well. If C is 'X' or 'b', then set MULT to 16.
(grub_printf): Set a new variable MASK to 0xFFFFFFFF by default.
Mask *DATAPTR with MASK when calling convert_to_ascii.
(grub_printf) [!STAGE1_5]: Added 'b' and 'X'. If C is 'b', set
MASK to 0xFF and fall through to the case 'u'. 'X' is the same
as 'x'.
From Josip Rodin <joy@cibalia.gkvk.hr>:
* grub.texi: Several awkward English sentences are fixed.
* tutorial.texi: Likewise.
* user-ref.texi: Likewise.
* appendices.texi: Likewise.
2000-03-27 OKUJI Yoshinori <okuji@gnu.org>
* stage1/depcomp: New file. Automake forces to install it. This

3
THANKS
View file

@ -14,6 +14,7 @@ Dan J. Walters <djw@cs.utexas.edu>
Edmund GRIMLEY EVANS <edmundo@rano.demon.co.uk>
Edward Killips <ekillips@triton.net>
Eric Hanchrow <erich@microsoft.com>
Frank Mehnert <fm3@os.inf.tu-dresden.de>
Goran Koruga <goran.koruga@hermes.si>
Heiko Schroeder <heiko@pool.informatik.rwth-aachen.de>
Hisazumi Kenji <nel@soraneko.com>
@ -25,6 +26,7 @@ Kunihiro Ishiguro <kunihiro@zebra.org>
Mark Lundeberg <aa026@pgfn.bc.ca>
Michael Hohmuth <hohmuth@innocent.com>
Miles Bader <miles@gnu.org>
Neal H Walfield <neal@walfield.org>
OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Pavel Roskin <pavel_roskin@geocities.com>
Per Lundberg <plundis@byggdok.se>
@ -32,4 +34,5 @@ Peter Astrand <altic@lysator.liu.se>
Ramon van Handel <vhandel@chem.vu.nl>
Stephen Early <steve@greenend.org.uk>
Takehiro Suzuki <takehiro@coral.ocn.ne.jp>
Thomas Schweikle <tschweikle@fiducia.de>
VaX#n8 <vax@linkdead.paranoia.com>

175
configure vendored
View file

@ -897,7 +897,7 @@ fi
PACKAGE=grub
VERSION=0.5.94
VERSION=0.5.95
if test "`CDPATH=: && cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
@ -930,31 +930,8 @@ if test -z "$install_sh"; then
install_sh="`echo $install_sh | sed -e 's/\${SHELL}//'`"
fi
ac_aux_dir=
for ac_dir in . $srcdir/.; do
if test -f $ac_dir/install-sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
elif test -f $ac_dir/install.sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
elif test -f $ac_dir/shtool; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/shtool install -c"
break
fi
done
if test -z "$ac_aux_dir"; then
{ echo "configure: error: cannot find install-sh or install.sh in . $srcdir/." 1>&2; exit 1; }
fi
ac_config_guess="$SHELL $ac_aux_dir/config.guess"
ac_config_sub="$SHELL $ac_aux_dir/config.sub"
ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
echo $ECHO_N "checking host system type... $ECHO_C" 1>&6
echo "configure:958: checking host system type" 1>&5
echo "configure:935: checking host system type" 1>&5
if test "x$ac_cv_host" = "x" || (test "x$host" != "xNONE" && test "x$host" != "x$ac_cv_host_alias"); then
# Make sure we can run config.sub.
@ -999,7 +976,7 @@ esac
#
echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" 1>&6
echo "configure:1003: checking whether to enable maintainer-specific portions of Makefiles" 1>&5
echo "configure:980: checking whether to enable maintainer-specific portions of Makefiles" 1>&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
@ -1022,7 +999,7 @@ if test "x$enable_maintainer_mode" = xyes; then
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1026: checking for $ac_word" 1>&5
echo "configure:1003: checking for $ac_word" 1>&5
if test "${ac_cv_path_PERL+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1066,7 +1043,7 @@ fi
#
echo $ECHO_N "checking build system type... $ECHO_C" 1>&6
echo "configure:1070: checking build system type" 1>&5
echo "configure:1047: checking build system type" 1>&5
if test "x$ac_cv_build" = "x" || (test "x$build" != "xNONE" && test "x$build" != "x$ac_cv_build_alias"); then
# Make sure we can run config.sub.
@ -1109,7 +1086,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1113: checking for $ac_word" 1>&5
echo "configure:1090: checking for $ac_word" 1>&5
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1147,7 +1124,7 @@ esac
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1151: checking for $ac_word" 1>&5
echo "configure:1128: checking for $ac_word" 1>&5
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1180,7 +1157,7 @@ fi
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1184: checking for $ac_word" 1>&5
echo "configure:1161: checking for $ac_word" 1>&5
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1234,7 +1211,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1238: checking for $ac_word" 1>&5
echo "configure:1215: checking for $ac_word" 1>&5
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1272,7 +1249,7 @@ done
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
echo $ECHO_N "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works... $ECHO_C" 1>&6
echo "configure:1276: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works" 1>&5
echo "configure:1253: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works" 1>&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@ -1283,12 +1260,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat >conftest.$ac_ext <<EOF
#line 1287 "configure"
#line 1264 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
if { (eval echo configure:1292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@ -1314,12 +1291,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 77; }
fi
echo $ECHO_N "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler... $ECHO_C" 1>&6
echo "configure:1318: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler" 1>&5
echo "configure:1295: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler" 1>&5
echo "$ECHO_T""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ECHO_N "checking whether we are using GNU C... $ECHO_C" 1>&6
echo "configure:1323: checking whether we are using GNU C" 1>&5
echo "configure:1300: checking whether we are using GNU C" 1>&5
if test "${ac_cv_prog_gcc+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1328,7 +1305,7 @@ else
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1332: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1309: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@ -1346,7 +1323,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ECHO_N "checking whether ${CC-cc} accepts -g... $ECHO_C" 1>&6
echo "configure:1350: checking whether ${CC-cc} accepts -g" 1>&5
echo "configure:1327: checking whether ${CC-cc} accepts -g" 1>&5
if test "${ac_cv_prog_cc_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1377,7 +1354,7 @@ else
fi
echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" 1>&6
echo "configure:1381: checking how to run the C preprocessor" 1>&5
echo "configure:1358: checking how to run the C preprocessor" 1>&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@ -1393,13 +1370,13 @@ else
# not just through cpp.
cat >conftest.$ac_ext <<EOF
#line 1397 "configure"
#line 1374 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1403: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1380: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@ -1411,13 +1388,13 @@ else
CPP="${CC-cc} -E -traditional-cpp"
cat >conftest.$ac_ext <<EOF
#line 1415 "configure"
#line 1392 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@ -1429,13 +1406,13 @@ else
CPP="${CC-cc} -nologo -E"
cat >conftest.$ac_ext <<EOF
#line 1433 "configure"
#line 1410 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1439: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1416: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@ -1462,7 +1439,7 @@ echo "$ECHO_T""$CPP" 1>&6
depcc="$CC"
depcpp="$CPP"
echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" 1>&6
echo "configure:1466: checking dependency style of $depcc" 1>&5
echo "configure:1443: checking dependency style of $depcc" 1>&5
if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1516,7 +1493,7 @@ if test "x$with_binutils" != x; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1520: checking for $ac_word" 1>&5
echo "configure:1497: checking for $ac_word" 1>&5
if test "${ac_cv_path_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1551,7 +1528,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1555: checking for $ac_word" 1>&5
echo "configure:1532: checking for $ac_word" 1>&5
if test "${ac_cv_path_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1590,7 +1567,7 @@ else
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1594: checking for $ac_word" 1>&5
echo "configure:1571: checking for $ac_word" 1>&5
if test "${ac_cv_prog_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1633,7 +1610,7 @@ if test "x$ac_cv_prog_gcc" = xyes; then
STAGE1_CFLAGS="-O2"
GRUB_CFLAGS="-O2"
echo $ECHO_N "checking whether optimization for size works... $ECHO_C" 1>&6
echo "configure:1637: checking whether optimization for size works" 1>&5
echo "configure:1614: checking whether optimization for size works" 1>&5
if test "${size_flag+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1641,7 +1618,7 @@ else
saved_CFLAGS=$CFLAGS
CFLAGS="-Os -g"
cat >conftest.$ac_ext <<EOF
#line 1645 "configure"
#line 1622 "configure"
#include "confdefs.h"
int
@ -1652,7 +1629,7 @@ main ()
return 0;
}
EOF
if { (eval echo configure:1656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1633: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
size_flag=yes
else
@ -1682,7 +1659,7 @@ if test "x$with_binutils" != x; then
# Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args.
set dummy ${ac_tool_prefix}objcopy; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1686: checking for $ac_word" 1>&5
echo "configure:1663: checking for $ac_word" 1>&5
if test "${ac_cv_path_OBJCOPY+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1717,7 +1694,7 @@ else
# Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args.
set dummy ${ac_tool_prefix}objcopy; ac_word=$2
echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6
echo "configure:1721: checking for $ac_word" 1>&5
echo "configure:1698: checking for $ac_word" 1>&5
if test "${ac_cv_prog_OBJCOPY+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1752,7 +1729,7 @@ fi
# Defined in acinclude.m4.
echo $ECHO_N "checking if C symbols get an underscore after compilation... $ECHO_C" 1>&6
echo "configure:1756: checking if C symbols get an underscore after compilation" 1>&5
echo "configure:1733: checking if C symbols get an underscore after compilation" 1>&5
if test "${grub_cv_asm_uscore+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1765,7 +1742,7 @@ func (int *list)
}
EOF
if { ac_try='${CC-cc} ${CFLAGS} -S conftest.c'; { (eval echo configure:1769: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.s; then
if { ac_try='${CC-cc} ${CFLAGS} -S conftest.c'; { (eval echo configure:1746: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.s; then
true
else
{ echo "configure: error: ${CC-cc} failed to produce assembly code" 1>&2; exit 1; }
@ -1790,7 +1767,7 @@ fi
echo "$ECHO_T""$grub_cv_asm_uscore" 1>&6
echo $ECHO_N "checking whether ${OBJCOPY} works for absolute addresses... $ECHO_C" 1>&6
echo "configure:1794: checking whether ${OBJCOPY} works for absolute addresses" 1>&5
echo "configure:1771: checking whether ${OBJCOPY} works for absolute addresses" 1>&5
if test "${grub_cv_prog_objcopy_absolute+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1802,21 +1779,21 @@ cmain (void)
}
EOF
if { (eval echo configure:1806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then :
if { (eval echo configure:1783: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then :
else
{ echo "configure: error: ${CC-cc} cannot compile C source code" 1>&2; exit 1; }
fi
grub_cv_prog_objcopy_absolute=yes
for link_addr in 2000 8000 7C00; do
if { ac_try='${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec'; { (eval echo configure:1812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
if { ac_try='${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec'; { (eval echo configure:1789: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
else
{ echo "configure: error: ${CC-cc} cannot link at address $link_addr" 1>&2; exit 1; }
fi
if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest'; { (eval echo configure:1816: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest'; { (eval echo configure:1793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
else
{ echo "configure: error: ${OBJCOPY-objcopy} cannot create binary files" 1>&2; exit 1; }
fi
if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest'; { (eval echo configure:1820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest'; { (eval echo configure:1797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
mv -f conftest conftest.old
else
grub_cv_prog_objcopy_absolute=no
@ -1832,7 +1809,7 @@ if test "x$grub_cv_prog_objcopy_absolute" != xyes; then
fi
echo $ECHO_N "checking whether addr32 must be in the same line as the instruction... $ECHO_C" 1>&6
echo "configure:1836: checking whether addr32 must be in the same line as the instruction" 1>&5
echo "configure:1813: checking whether addr32 must be in the same line as the instruction" 1>&5
if test "${grub_cv_asm_prefix_requirement+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1841,7 +1818,7 @@ else
l1: addr32 movb %al, l1
EOF
if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s'; { (eval echo configure:1845: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then
if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s'; { (eval echo configure:1822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then
grub_cv_asm_prefix_requirement=yes
else
grub_cv_asm_prefix_requirement=no
@ -1869,7 +1846,7 @@ EOF
echo "$ECHO_T""$grub_cv_asm_prefix_requirement" 1>&6
echo $ECHO_N "checking for .code16 addr32 assembler support... $ECHO_C" 1>&6
echo "configure:1873: checking for .code16 addr32 assembler support" 1>&5
echo "configure:1850: checking for .code16 addr32 assembler support" 1>&5
if test "${grub_cv_asm_addr32+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
@ -1884,7 +1861,7 @@ else
sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s
fi
if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s'; { (eval echo configure:1888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then
if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s'; { (eval echo configure:1865: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then
grub_cv_asm_addr32=yes
else
grub_cv_asm_addr32=no
@ -1899,12 +1876,12 @@ if test "x$grub_cv_asm_addr32" != xyes; then
fi
echo $ECHO_N "checking if start is defined by the compiler... $ECHO_C" 1>&6
echo "configure:1903: checking if start is defined by the compiler" 1>&5
echo "configure:1880: checking if start is defined by the compiler" 1>&5
if test "${grub_cv_check_start_symbol+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
cat >conftest.$ac_ext <<EOF
#line 1908 "configure"
#line 1885 "configure"
#include "confdefs.h"
int
@ -1915,7 +1892,7 @@ asm ("incl start")
return 0;
}
EOF
if { (eval echo configure:1919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
grub_cv_check_start_symbol=yes
else
@ -1938,12 +1915,12 @@ fi
echo "$ECHO_T""$grub_cv_check_start_symbol" 1>&6
echo $ECHO_N "checking if _start is defined by the compiler... $ECHO_C" 1>&6
echo "configure:1942: checking if _start is defined by the compiler" 1>&5
echo "configure:1919: checking if _start is defined by the compiler" 1>&5
if test "${grub_cv_check_uscore_start_symbol+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
cat >conftest.$ac_ext <<EOF
#line 1947 "configure"
#line 1924 "configure"
#include "confdefs.h"
int
@ -1954,7 +1931,7 @@ asm ("incl _start")
return 0;
}
EOF
if { (eval echo configure:1958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
grub_cv_check_uscore_start_symbol=yes
else
@ -1982,12 +1959,12 @@ if test "x$grub_cv_check_start_symbol" != "xyes" \
fi
echo $ECHO_N "checking if __bss_start is defined by the compiler... $ECHO_C" 1>&6
echo "configure:1986: checking if __bss_start is defined by the compiler" 1>&5
echo "configure:1963: checking if __bss_start is defined by the compiler" 1>&5
if test "${grub_cv_check_uscore_uscore_bss_start_symbol+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
cat >conftest.$ac_ext <<EOF
#line 1991 "configure"
#line 1968 "configure"
#include "confdefs.h"
int
@ -1998,7 +1975,7 @@ asm ("incl __bss_start")
return 0;
}
EOF
if { (eval echo configure:2002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
grub_cv_check_uscore_uscore_bss_start_symbol=yes
else
@ -2021,12 +1998,12 @@ fi
echo "$ECHO_T""$grub_cv_check_uscore_uscore_bss_start_symbol" 1>&6
echo $ECHO_N "checking if _edata is defined by the compiler... $ECHO_C" 1>&6
echo "configure:2025: checking if _edata is defined by the compiler" 1>&5
echo "configure:2002: checking if _edata is defined by the compiler" 1>&5
if test "${grub_cv_check_uscore_edata_symbol+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
cat >conftest.$ac_ext <<EOF
#line 2030 "configure"
#line 2007 "configure"
#include "confdefs.h"
int
@ -2037,7 +2014,7 @@ asm ("incl _edata")
return 0;
}
EOF
if { (eval echo configure:2041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
grub_cv_check_uscore_edata_symbol=yes
else
@ -2060,12 +2037,12 @@ fi
echo "$ECHO_T""$grub_cv_check_uscore_edata_symbol" 1>&6
echo $ECHO_N "checking if edata is defined by the compiler... $ECHO_C" 1>&6
echo "configure:2064: checking if edata is defined by the compiler" 1>&5
echo "configure:2041: checking if edata is defined by the compiler" 1>&5
if test "${grub_cv_check_edata_symbol+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
cat >conftest.$ac_ext <<EOF
#line 2069 "configure"
#line 2046 "configure"
#include "confdefs.h"
int
@ -2076,7 +2053,7 @@ asm ("incl edata")
return 0;
}
EOF
if { (eval echo configure:2080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
grub_cv_check_edata_symbol=yes
else
@ -2105,12 +2082,12 @@ if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" != "xyes" \
fi
echo $ECHO_N "checking if end is defined by the compiler... $ECHO_C" 1>&6
echo "configure:2109: checking if end is defined by the compiler" 1>&5
echo "configure:2086: checking if end is defined by the compiler" 1>&5
if test "${grub_cv_check_end_symbol+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
cat >conftest.$ac_ext <<EOF
#line 2114 "configure"
#line 2091 "configure"
#include "confdefs.h"
int
@ -2121,7 +2098,7 @@ asm ("incl end")
return 0;
}
EOF
if { (eval echo configure:2125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
grub_cv_check_end_symbol=yes
else
@ -2144,12 +2121,12 @@ fi
echo "$ECHO_T""$grub_cv_check_end_symbol" 1>&6
echo $ECHO_N "checking if _end is defined by the compiler... $ECHO_C" 1>&6
echo "configure:2148: checking if _end is defined by the compiler" 1>&5
echo "configure:2125: checking if _end is defined by the compiler" 1>&5
if test "${grub_cv_check_uscore_end_symbol+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
cat >conftest.$ac_ext <<EOF
#line 2153 "configure"
#line 2130 "configure"
#include "confdefs.h"
int
@ -2160,7 +2137,7 @@ asm ("incl _end")
return 0;
}
EOF
if { (eval echo configure:2164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
grub_cv_check_uscore_end_symbol=yes
else
@ -2197,14 +2174,14 @@ fi
# Get the filename or the whole disk and open it.
# Known to work on NetBSD.
echo $ECHO_N "checking for opendisk in -lutil... $ECHO_C" 1>&6
echo "configure:2201: checking for opendisk in -lutil" 1>&5
echo "configure:2178: checking for opendisk in -lutil" 1>&5
if test "${ac_cv_lib_util_opendisk+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lutil $LIBS"
cat >conftest.$ac_ext <<EOF
#line 2208 "configure"
#line 2185 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@ -2219,7 +2196,7 @@ opendisk()
return 0;
}
EOF
if { (eval echo configure:2223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_lib_util_opendisk=yes
else
@ -2244,14 +2221,14 @@ fi
# Unless the user specify --without-curses, check for curses.
if test "x$with_curses" != "xno"; then
echo $ECHO_N "checking for wgetch in -lncurses... $ECHO_C" 1>&6
echo "configure:2248: checking for wgetch in -lncurses" 1>&5
echo "configure:2225: checking for wgetch in -lncurses" 1>&5
if test "${ac_cv_lib_ncurses_wgetch+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lncurses $LIBS"
cat >conftest.$ac_ext <<EOF
#line 2255 "configure"
#line 2232 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@ -2266,7 +2243,7 @@ wgetch()
return 0;
}
EOF
if { (eval echo configure:2270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_lib_ncurses_wgetch=yes
else
@ -2288,14 +2265,14 @@ EOF
else
echo $ECHO_N "checking for wgetch in -lcurses... $ECHO_C" 1>&6
echo "configure:2292: checking for wgetch in -lcurses" 1>&5
echo "configure:2269: checking for wgetch in -lcurses" 1>&5
if test "${ac_cv_lib_curses_wgetch+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-lcurses $LIBS"
cat >conftest.$ac_ext <<EOF
#line 2299 "configure"
#line 2276 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@ -2310,7 +2287,7 @@ wgetch()
return 0;
}
EOF
if { (eval echo configure:2314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_lib_curses_wgetch=yes
else
@ -2341,19 +2318,19 @@ for ac_header in string.h strings.h ncurses/curses.h ncurses.h curses.h
do
ac_ac_Header=`echo "ac_cv_header_$ac_header" | $ac_tr_sh`
echo $ECHO_N "checking for $ac_header... $ECHO_C" 1>&6
echo "configure:2345: checking for $ac_header" 1>&5
echo "configure:2322: checking for $ac_header" 1>&5
if eval "test \"\${$ac_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" 1>&6
else
cat >conftest.$ac_ext <<EOF
#line 2351 "configure"
#line 2328 "configure"
#include "confdefs.h"
#include <$ac_header>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*

View file

@ -25,9 +25,8 @@ configurable in BIOS setting utility. Read the manual for your BIOS
for more information.
Furthermore, some operating systems (i.e. DOS) cannot access any large
disk, so the problem is not solved by any kind of boot loader. As long
as I know, at least GNU/Hurd and GNU/Linux can boot from such a large
disk.
disk, so the problem is not solved by any kind of boot loader. GNU/Hurd
and GNU/Linux can surely boot from such a large disk.
@item Can I put Stage2 into a partition which is over 1024 cylinders?
@ -132,9 +131,9 @@ developers haven't seen it by their own eyes. This is why it is
desirable that you investigate the cause seriously if you have the
skill.
@item Why doesn't Linux (FreeBSD, NetBSD, etc.) become Multiboot-compliant?
@item Why don't Linux, FreeBSD, NetBSD, etc. become Multiboot-compliant?
Please ask the maintainers. If all free kernels were
Please ask the relevant maintainers. If all free kernels were
Multiboot-compliant (@pxref{Top, Multiboot Specification, Motivation,
multiboot, The Multiboot Specification}), the world would be an
utopia@dots{}

View file

@ -1,5 +1,5 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020.
.TH GRUB-INSTALL "8" "February 2000" "grub-install (GNU GRUB 0.5.94)" FSF
.TH GRUB-INSTALL "8" "April 2000" "grub-install (GNU GRUB 0.5.95)" FSF
.SH NAME
grub-install \- install GRUB on your drive
.SH SYNOPSIS
@ -21,6 +21,8 @@ instead of the root directory.
\fB\-\-grub\-shell\fR=\fIFILE\fR
use FILE as the grub shell.
.PP
INSTALL_DEVICE can be a GRUB device name or a system device filename.
.PP
Reports bugs to <bug-grub@gnu.org>.
.SH "SEE ALSO"
The full documentation for

View file

@ -1,5 +1,5 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020.
.TH GRUB "8" "February 2000" "GNU GRUB 0.5.94" FSF
.TH GRUB "8" "April 2000" "GNU GRUB 0.5.95" FSF
.SH NAME
GRUB \- the grub shell
.SH SYNOPSIS

View file

@ -14,6 +14,10 @@
@syncodeindex pg cp
@syncodeindex tp cp
@footnotestyle separate
@paragraphindent 3
@finalout
@dircategory Kernel
@direntry
* GRUB: (grub). The GRand Unified Bootloader
@ -51,12 +55,12 @@ into another language, under the above conditions for modified versions.
@titlepage
@sp 10
@title The GRUB Manual
@subtitle The GRand Unified Bootloader, version @value{VERSION}, @value{UPDATED}.
@author Gordon Matzigkeit
@author OKUJI Yoshinori
@c The following two commands start the copyright page.
@page
@vskip 0pt plus 1filll
@vskip 0pt plus 1filll
Copyright @copyright{} 1996 Erich Boleyn
Copyright @copyright{} 1999, 2000 Free Software Foundation, Inc.
@ -81,26 +85,28 @@ by Free Software Foundation.
@node Top
@top GRUB
This file documents GNU GRUB, the Grand Unified Bootloader. This
edition documents version @value{VERSION}.
This is the documentation of GNU GRUB, the GRand Unified Bootloader,
a flexible and powerful boot loader program for @sc{pc}s.
This edition documents version @value{VERSION}.
@end ifnottex
@menu
Part I: The Tutorial Manual
* Overview:: Starting to use GRUB
* Filename:: How to write filenames
* Installation:: How to install GRUB on your drive
* Boot:: How to boot your operating systems
* Overview:: What exactly GRUB is and how to use it
* Naming convention:: Names of your drives in GRUB
* Installation:: Installing GRUB on your drive
* Booting:: How to boot different operating systems
* Network:: Downloading OS images from a network
* Configuration:: Writing your configuration file
* Configuration:: Writing your own configuration file
Part II: The User Reference Manual
* Introduction:: Capturing the spirit of GRUB
* Filesystem:: Filesystem syntax and semantics
* Interface:: The menu and the command-line
* Command:: The list of available builtin commands
* Commands:: The list of available builtin commands
* Troubleshooting:: Error messages produced by GRUB
* Invoking the grub shell:: How to use the grub shell
* Invoking grub-install:: How to use the GRUB installer

View file

@ -1,5 +1,5 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020.
.TH MBCHK "1" "February 2000" "mbchk (GNU GRUB 0.5.94)" FSF
.TH MBCHK "1" "April 2000" "mbchk (GNU GRUB 0.5.95)" FSF
.SH NAME
mbchk \- check the format of a Multiboot kernel
.SH SYNOPSIS

View file

@ -1,3 +1,3 @@
@set UPDATED 30 December 1999
@set EDITION 0.5.94
@set VERSION 0.5.94
@set UPDATED 2 April 2000
@set EDITION 0.5.95
@set VERSION 0.5.95

View file

@ -5,28 +5,32 @@ Briefly, a @dfn{boot loader} is the first software program that runs when
a computer starts. It is responsible for loading and transferring
control to the operating system @dfn{kernel} software (such as the Linux
or GNU Hurd kernel). The kernel, in turn, initializes the rest of the
operating system (usually GNU).
operating system (e.g. a GNU system).
GRUB can load a wide variety of free operating systems as well as
GRUB can load a wide variety of free operating systems, as well as
chain-loading@footnote{@dfn{chain-load} is the mechanism for loading
unsupported operating systems by loading another boot loader.}
proprietary operating systems. The important feature in GRUB
is flexibility; GRUB can understand filesystems and kernel executable
formats, so you can load an arbitrary operating system as you like
without recording the position of your kernel on the disk.
unsupported operating systems by loading another boot loader. It is
typically used for loading DOS or Windows} proprietary operating
systems.
Therefore, you have to specify the drive/partition where your kernel
resides and the filename at hand. If you don't want to type the
drive and the filename every time, the menu interface (@pxref{Menu})
will help you. GRUB loads a configuration file (@pxref{Configuration})
if found and provides the menu so that you can select which OS is booted
at ease. Of course, you can enter the command-line interface
(@pxref{Command line}) whenever you like.
The important feature in GRUB is flexibility; GRUB understands
filesystems and kernel executable formats, so you can load an arbitrary
operating system the way you like, without recording the physical
position of your kernel on the disk.
In the following chapters, we teach you how to specify a
drive/partition and a filename (@pxref{Filename}), how to install GRUB
on your drive (@pxref{Installation}), and how to boot your OSes
(@pxref{Boot}), step by step.
Therefore, you have to specify the drive (and the partition) where your
kernel resides and the filename at hand. If you don't want to type in
the drive and the filename every time, you can set it up in a simple
configuration file (@pxref{Configuration}). GRUB will locate and load
it, and provide a nice menu interface (@pxref{Menu interface}) through
which you can easily select which OS it boots. Of course, you can enter
the command-line interface (@pxref{Command line}) whenever you like, or
you can edit specific menu entries prior to using them.
In the following chapters, you will learn how to specify a drive or a
partition, and a file name (@pxref{Naming convention}) to GRUB, how to
install GRUB on your drive (@pxref{Installation}), and how to boot your
OSes (@pxref{Booting}), step by step.
@c @node Fundamentals
@ -36,32 +40,37 @@ on your drive (@pxref{Installation}), and how to boot your OSes
@c copyright problem will be solved.
@node Filename
@chapter Filename
@node Naming convention
@chapter Naming convention
Now is the time when you should learn the device syntax used in GRUB, so
that you can specify a drive/partition. See this example:
The device syntax used in GRUB is a wee bit different from what you may
have seen before in your operating system(s), and you need to know it so
that you can specify a drive/partition.
Look at the following examples and explanations:
@example
(fd0)
@end example
This means the first floppy disk drive. GRUB requires that the device
name is enclosed with @samp{(} and @samp{)}. The number @samp{0} is the
drive number, which is counted from @emph{zero}. In this case, GRUB uses
the whole floppy disk.
First of all, GRUB requires that the device name is enclosed with
@samp{(} and @samp{)}. The @samp{fd} part means that it is a floppy
disk. The number @samp{0} is the drive number, which is counted from
@emph{zero}. This expression means that GRUB will use the whole floppy
disk.
@example
(hd0,1)
@end example
This means the second partition of the first hard disk drive. The first
integer @samp{0} indicates the drive number, that is, the first hard
disk, while the second integer @samp{1} indicates the partition number
(or the @sc{pc} slice number in the BSD terminology). Note that the
partition numbers are counted from @emph{zero} but not from one. In this
case, GRUB uses the partition of the disk instead of the whole
disk.
Here, @samp{hd} means it is a hard disk drive. The first integer
@samp{0} indicates the drive number, that is, the first hard disk, while
the second integer, @samp{1}, indicates the partition number (or the
@sc{pc} slice number in the BSD terminology). Once again, please note
that the partition numbers are counted from @emph{zero}, not from
one. This expression means the second partition of the first hard disk
drive. In this case, GRUB uses one partition of the disk, instead of the
whole disk.
@example
(hd0,4)
@ -69,62 +78,70 @@ disk.
This specifies the first @dfn{extended partition} of the first hard disk
drive. Note that the partition numbers for extended partitions are
counted from @samp{4}, whether your disks has four primary partitions or
less.
counted from @samp{4}, regardless of the actual number of primary
partitions on your hard disk.
@example
(hd1,a)
@end example
This means the BSD @samp{a} partition of the second hard disk. If you
need to specify which @sc{pc} slice number should be used, use a device
like @samp{(hd1,0,a)}. If the @sc{pc} slice number is omitted, GRUB
searches for the first @sc{pc} slice which has a BSD @samp{a} partition.
need to specify which @sc{pc} slice number should be used, use something
like this: @samp{(hd1,0,a)}. If the @sc{pc} slice number is omitted,
GRUB searches for the first @sc{pc} slice which has a BSD @samp{a}
partition.
Note that GRUB does @emph{not} distinguish IDE from SCSI; just count the
drive numbers from zero. Normally, any IDE drive number is less than any
SCSI drive number, but this is not true if you exchange the boot
sequence between IDE and SCSI in your BIOS. But do not worry. In the
GRUB command-line (@pxref{Command line}), you can always use the
@key{TAB} completion which displays the list of drives, the list of the
partitions of a drive, or the list of the filenames on a partition,
depending on where you push the @key{TAB} key in the command-line. So it
should be possible to determine which drive and which partition are what
you seek for.
Of course, to actually access the disks or partitions with GRUB, you
need to use the device specification in a command, like @samp{root
(fd0)} or @samp{unhide (hd0,2)}. To help you find out which number is a
partition you want, the GRUB command-line (@pxref{Command line}) options
have argument completion. That means that, for example, you only need to
type @samp{root (}, followed by a @key{TAB}, and GRUB will display the
list of drives, partitions, or filenames, so it should be quite easy to
determine the name of your target partition, even with minimal knowledge
of the syntax.
Now the question is how to specify a file. Again, see this example:
Note that GRUB does @emph{not} distinguish IDE from SCSI - it simply
counts the drive numbers from zero, regardless of their type. Normally,
any IDE drive number is less than any SCSI drive number, although that
is not true if you change the boot sequence by swapping IDE and SCSI
drives in your BIOS.
Now the question is, how to specify a file? Again, see this example:
@example
(hd0,0)/vmlinuz
@end example
This specifies the file whose name is @samp{vmlinuz} on the first
partition of the first hard disk drive. Isn't that easy? All you should
do is type the absolute filename. If you are tired of typing the
whole filename, press the @key{TAB} key. @kbd{@key{TAB}}
completes the filename if it is unique. Otherwise, it displays the list
of the candidates.
This specifies the file named @samp{vmlinuz}, found on the first
partition of the first hard disk drive. Note that the argument
completion works with file names, too.
OK, the next chapter introduces how to install GRUB on your drive.
That was easy, admit it. Do read the next chapter, to find out how to
actually install GRUB on your drive.
@node Installation
@chapter Installation
At first, install GRUB by @code{make install} (@pxref{Obtaining and
Building GRUB}) or by the GRUB package for your OS. If this is done,
let's install GRUB on your drive. There are two ways to install GRUB:
using the grub shell (@pxref{Invoking the grub shell}) on a UNIX-like OS
and using the native Stage 2. The two ways are almost the same, but the
main difference is that the grub shell might probe a wrong BIOS drive on
a UNIX-like OS. If you install GRUB on a UNIX-like OS, make sure that
you have a boot floppy disk so that you can rescue your computer when it
crashes.
First, you need to have GRUB itself properly installed on your system,
(@pxref{Obtaining and Building GRUB}) either from the source tarball, or
as a package for your OS.
Anyhow, copy your GRUB images (@file{stage1}, @file{stage2}, and
@file{*stage1_5}) to the directory @file{/boot/grub} before staring to
install GRUB. Normally, the images are installed under the directory
@file{/usr/share/grub/i386-pc}.
To use GRUB, you need to install it on your drive. There are two ways of
doing that - either using the grub shell (@pxref{Invoking the grub
shell}) on a UNIX-like OS, or by using the native Stage 2. These are
quite similar, however, the shell might probe a wrong BIOS drive, so
better be careful.
Also, if you install GRUB on a UNIX-like OS, please make sure that you
have an emergency boot disk ready, so that you can rescue your computer
if, by any chance, your hard drive becomes unusable (unbootable).
GRUB comes with boot images, which are normally installed in the
@file{/usr/share/grub/i386-pc} directory. You need to copy the files
@file{stage1}, @file{stage2}, and @file{*stage1_5} to the directory
@file{/boot/grub}.
@menu
* Installing GRUB on a floppy::
@ -135,12 +152,17 @@ install GRUB. Normally, the images are installed under the directory
@node Installing GRUB on a floppy
@section Installing GRUB on a floppy
To create a GRUB boot floppy, you need to take the @file{stage1} and
@file{stage2} files from @file{/boot/grub} directory, and write them to
the first and the second block of the floppy disk.
@quotation
@strong{Caution:} This procedure will destroy any data currently stored
on the floppy.
@end quotation
It is easy to create a GRUB boot floppy. Just follow this below:
On a UNIX like operating system, that is done with the following
commands:
@example
@group
@ -158,42 +180,43 @@ The device filename may be different. Consult the manual for your OS.
@quotation
@strong{Caution:} Installing GRUB's stage1 in this manner will erase the
normal boot-sector used by an OS. GRUB can boot GNU Mach, Linux,
FreeBSD, NetBSD, and OpenBSD directly, so this may be
desired. Generally, it is a good idea to back up the first sector of the
partition on which you are installing GRUB's stage1. This isn't as
important if you are installing GRUB on the first sector of a hard disk,
since it's easy to reinitialize it (by running @code{FDISK /MBR} from
DOS).
normal boot-sector used by an OS.
@end quotation
OK, now reboot your computer with a GRUB boot floppy inserted if you
decide to install GRUB in the native environment. That's definitely
desirable. However, if you don't want to reboot your computer, run the
program @file{/sbin/grub} (@pxref{Invoking the grub shell}).
GRUB can currently boot GNU Mach, Linux, FreeBSD, NetBSD, and OpenBSD
directly, so using it on a boot sector should be okay. But generally, it
would be a good idea to back up the first sector of the partition on
which you are installing GRUB's stage1. This isn't as important if you
are installing GRUB on the first sector of a hard disk, since it's easy
to reinitialize it (e.g. by running @samp{FDISK /MBR} from DOS).
In both, GRUB will show the command-line interface (@pxref{Command
If you decide to install GRUB in the native environment, which is
definitely desirable, you'll either need to create the GRUB boot disk,
and reboot your computer with it, or run the grub shell (@pxref{Invoking
the grub shell}) as the super-user (@samp{root}).
Once started, GRUB will show the command-line interface (@pxref{Command
line}). First, set the GRUB's @dfn{root device}@footnote{Note that
GRUB's root device is not your OS's root partition; if you need to
specify a root partition for your OS, add the argument into the command
@command{kernel}.} to the partition which has your GRUB images, like
this:
GRUB's root device does not neccessarily have to be your OS's root
partition; if you need to specify a root partition for your OS, add the
argument into the command @command{kernel}.} to the partition which has
your GRUB images, like this:
@example
grub> root (hd0,0)
@end example
If you are not sure where the images exist, use the command
@command{find}:
If you are not sure which partition actually holds these files, use the
@command{find} command, like this:
@example
grub> find /boot/grub/stage1
@end example
This will search for the filename @file{/boot/grub/stage1} and show the
devices which contain the image.
devices which contain the file.
If you set the root device correctly, run the command
Once you've set the root device correctly, run the command
@command{setup}:
@example
@ -213,12 +236,13 @@ If you install GRUB into a partition or a drive except for the first
one, you must chain-load GRUB from another boot loader. Refer the manual
for the boot loader to know how to chain-load GRUB.
That's all. Now you can boot GRUB without a GRUB floppy, so let's see
how to boot your operating systems from GRUB in the next chapter.
That's all there is to it: now you can boot GRUB without a GRUB
floppy. See the next chapter to find out how to boot your operating
systems from GRUB.
@node Boot
@chapter Boot
@node Booting
@chapter Booting
For Multiboot-compliant kernels, GRUB can load them in a consistent way,
but, for some free operating systems, you need to use some OS-specific
@ -269,8 +293,8 @@ the command @command{root}.
Load the kernel image by the command @command{kernel}.
@item
Load the modules by the command @command{module} or
@command{modulenounzip} as you need.
If you need modules, load them with the command @command{module} or
@command{modulenounzip}.
@item
Run the command @command{boot}.
@ -342,14 +366,16 @@ Here, we describe some caveats on several operating systems.
@subsection GNU/Hurd
Since GNU/Hurd is Multiboot-compliant, it is easy to boot it; there is
nothing special. But do not forget that you specify a root partition to
the kernel.
nothing special about it. But do not forget that you have to specify a
root partition to the kernel.
First, set GRUB's root device to the same drive as
GNU/Hurd's. Probably @code{find /boot/gnumach} or such will help
you.
@enumerate
@item
Set GRUB's root device to the same drive as GNU/Hurd's. Probably the
command @code{find /boot/gnumach} or similar can help you.
Second, load the kernel and the module, like this:
@item
Load the kernel and the module, like this:
@example
@group
@ -358,35 +384,40 @@ grub> module /boot/serverboot
@end group
@end example
And, finally, run the command @command{boot}.
@item
Run the command @command{boot}.
@end enumerate
@node GNU/Linux
@subsection GNU/Linux
It is relatively easy to boot GNU/Linux from GRUB, because booting
GNU/Linux somewhat resembles booting a Multiboot-compliant OS.
It is relatively easy to boot GNU/Linux from GRUB, because it somewhat
resembles booting a Multiboot-compliant OS.
First, set GRUB's root device to the same drive as
GNU/Linux's. Probably @code{find /vmlinuz} or such will help
you.
@enumerate
@item
Set GRUB's root device to the same drive as GNU/Linux's. Probably the
command @code{find /vmlinuz} or similar can help you.
Second, load the kernel:
@item
Load the kernel:
@example
grub> kernel /vmlinuz root=/dev/hda1
@end example
If you need to specify some kernel parameters, just append them to the
command. An example is to set @option{vga} to @samp{ext}:
command. For example, to set @option{vga} to @samp{ext}, do this:
@example
grub> kernel /vmlinuz root=/dev/hda1 vga=ext
@end example
See the documentation in the Linux source tree, for the complete
See the documentation in the Linux source tree for the complete
information on the available options.
@item
If you use initrd, execute the command @command{initrd} after
@command{kernel}:
@ -394,16 +425,17 @@ If you use initrd, execute the command @command{initrd} after
grub> initrd /initrd
@end example
And, finally, run the command @command{boot}.
@item
Finally, run the command @command{boot}.
@end enumerate
@node FreeBSD
@subsection FreeBSD
GRUB can directly load both kernel formats, ELF and a.out, but this is
deprecated, since FreeBSD's bootstrap interface is sometimes changed
heavily and so GRUB can't guarantee to pass kernel parameters
correctly.
deprecated, since FreeBSD's bootstrap interface sometimes changes
heavily, so GRUB can't guarantee to pass kernel parameters correctly.
Thus, we'd recommend loading the very flexible loader
@file{/boot/loader} instead. See this example:
@ -420,42 +452,43 @@ grub> boot
@node NetBSD
@subsection NetBSD
GRUB can load NetBSD a.out directly, by the following steps:
GRUB can load NetBSD a.out directly, follow these steps:
@enumerate
@item
Set GRUB's root device by @command{root}.
Set GRUB's root device with @command{root}.
@item
Load the kernel by @command{kernel}.
Load the kernel with @command{kernel}.
@item
Run @command{boot}.
@end enumerate
For now, however, GRUB doesn't allow you to pass kernel parameters, so
it may be better to chain-load it instead. @xref{Chain-loading}, for
more information.
it may be better to chain-load it instead, for more information please
see @xref{Chain-loading}.
@node OpenBSD
@subsection OpenBSD
The boot instructions are exactly the same as NetBSD (@pxref{NetBSD}).
The booting instructions are exactly the same as for NetBSD
(@pxref{NetBSD}).
@node DOS/Windows
@subsection DOS/Windows
GRUB doesn't support DOS or Windows directly, so you must chain-load
them (@pxref{Chain-loading}). However, their boot loaders have some
critical deficiencies, so the general methods may not be enough.
GRUB doesn't support booting DOS or Windows directly, so you must
chain-load them (@pxref{Chain-loading}). However, their boot loaders
have some critical deficiencies, so the general methods may not be
enough.
If you have installed DOS (or Windows) on a non-first hard disk, the
disk swapping technique is necessary, because it cannot boot any disks
but the first one. The solution used in GRUB is the command
@command{map} (@pxref{Command}). For example, if the installed disk is
the second hard disk, swap it for the first hard disk:
If you have installed DOS (or Windows) on a non-first hard disk, you
have to use the disk swapping technique, because that OS cannot boot
from any disks but the first one. The solution used in GRUB is the
command @command{map} (@pxref{Commands}), like this:
@example
@group
@ -464,23 +497,24 @@ grub> map (hd1) (hd0)
@end group
@end example
This performs the @dfn{virtual} exchange between the two disks.
This performs a @dfn{virtual} swap between your first and second hard
drive.
@strong{Caution:} This is effective only if DOS (or Windows) uses BIOS
to access the swapped disks. If it uses a special driver for them,
probably this doesn't work.
it probably won't work.
Another problem arises if you install more than one sets of DOS/Windows
into one disk, because they could be confused if there are more than one
primary partitions for DOS/Windows. Certainly you should avoid this way,
but there is a solution if you do want to do so. Use the partition
onto one disk, because they could be confused if there are more than one
primary partitions for DOS/Windows. Certainly you should avoid doing
this, but there is a solution if you do want to do so. Use the partition
hiding/unhiding technique.
If GRUB @dfn{hide}s a DOS (or Windows) partition, then it ignores the
partition. If GRUB @dfn{unhide}s a DOS (or Windows) partition, it
detects the partition. Thus, if you have installed DOS (or Windows) into
detects the partition. Thus, if you have installed DOS (or Windows) on
the first partition and the second partition of the first hard disk,
follow these below when booting the first:
to boot the first copy, do the following:
@example
@group
@ -497,8 +531,8 @@ grub> boot
@node SCO UnixWare
@subsection SCO UnixWare
The boot loader in SCO UnixWare is known by the fact that its signature
is wrong. So you will need to specify the option @option{--force} to
It is known that the signature in the boot loader for SCO UnixWare is
wrong, so you will have to specify the option @option{--force} to
@command{chainloader}, like this:
@example
@ -514,19 +548,18 @@ grub> boot
@node Network
@chapter Downloading OS images from a network
Although GRUB is a disk-based boot loader, it provides you some network
Although GRUB is a disk-based boot loader, it does provide some network
support. To using the network support, you need to enable at least one
network driver in the build process. See the file
@file{netboot/README.netboot} in the source distribution, for more
information.
network driver in the build process. For more information please see
@file{netboot/README.netboot} in the source distribution.
First, you have to set up servers in your network. The servers GRUB
requires are a server which assigns an IP address and a file server. The
former is one of a BOOTP server, a DHCP server and a RARP server. RARP
is deprecated, since it cannot serve much information. For the latter,
only TFTP is supported at the moment. It is not necessary to run both
the servers on one computer. How to configure the servers is beyond the
scope of this document, so please refer to their own manuals.
First, you have to set up servers in your network. GRUB requires a
server that will assign an IP address, and a file server. The former is
either BOOTP, DHCP or a RARP server (RARP is deprecated, since it cannot
serve much information). For the latter, only TFTP is supported at the
moment. It is not necessary to run both the servers on one computer. How
to configure the servers is beyond the scope of this document, so please
refer to the manuals specific to those protocols/servers.
Second, run @command{bootp}, @command{dhcp} and @command{rarp} for
BOOTP, DHCP and RARP, respectively. Each command will show an assigned
@ -534,9 +567,9 @@ IP address, a netmask, an IP address for your TFTP server and a
gateway. If any of the addresses is wrong or it causes an error,
probably the configuration of your servers isn't set up properly.
Lastly, download your OS images from your network. The network can be
accessed by the network drive @samp{(nd)}. Everything else is similar to
the normal instructions (@pxref{Boot}).
Finally, download your OS images from your network. The network can be
accessed using the network drive @samp{(nd)}. Everything else is very
similar to the normal instructions (@pxref{Booting}).
Here is an example:
@ -559,51 +592,174 @@ grub> boot
@node Configuration
@chapter Configuration
Probably it is bothersome to type the commands to boot your OS. So
GRUB provides the menu interface (@pxref{Menu}) so that you can just
select an item from the menu.
You probably noticed that you need to type several commands to boot your
OS. There's a solution to that - GRUB provides a menu interface
(@pxref{Menu interface}) from which you can select an item (using arrow
keys) which will do everything to boot an OS.
To enable the menu, write a configuration file and save it in
@file{/boot/grub/menu.lst}. Here is a sample configuration file:
To enable the menu, you need a configuration file,
@file{/boot/grub/menu.lst}. We'll analyze an example file.
The file first contains some general settings, the menu interface
related options. You can put these commands (@pxref{Menu-specific
commands}) before any of the items (starting with @command{title}).
@example
@include menu.lst
@group
#
# Sample boot menu configuration file
#
@end group
@end example
As you see, each entry begins with the special command @command{title} and
the action is described after it. Note that you may not write the
command @command{boot} at each of the entries, since GRUB automatically
executes the command @command{boot} if it loads an OS successfully.
As you may have guessed, these lines are comments. Lines starting with a
hash character (@samp{#}), and blank lines, are ignored by GRUB.
The argument for the command @command{title} is used to display the
message about the entry. Since @command{title} displays the argument as
it is, you can write any words as you like.
@example
@group
# By default, boot the first entry.
default 0
@end group
@end example
You can write the menu interface specific commands (@pxref{Menu-specific
commands}) before any @command{title}. There are several commands you
can use in there, but we describe a few of them. The complete
descriptions can be found in @ref{Command}.
The first entry (here, counting starts with number zero, not one!) will
be the default choice.
The command @command{default} specifies which entry will be selected
when you do not select an entry explicitly. The argument is the entry
number. GRUB counts the entries from zero, so the number of the first
entry is @samp{0}, the number of the second entry is @samp{1}, @dots{}
@example
# Boot automatically after 30 secs.
timeout 30
@end example
The default entry will be executed when you do not select any entry
during certain seconds, which is defined by the command
@command{timeout}. So in the example above, the timeout is 30 seconds.
As the comment says, GRUB will boot automatically in 30 seconds, unless
interrupted with a keypress.
The command @command{fallback} is used only if the default entry
fails. If GRUB executes the default entry and it fails, then it executes
the @dfn{fallback} entry. The argument is the same meaning as the one
for @command{default}. This command is rarely used.
@example
@group
# Fallback to the second entry.
fallback 1
@end group
@end example
In the last entry, @command{color} is used. This command is somewhat
special because it can be used both in the command-line and in the
menu (@pxref{General commands}). GRUB has such several commands. The
command @command{color} changes the menu colors. It is best to run the
command actually to understand what happens.
If, for any reason, the default entry doesn't work, fall back to the
second one (this is rarely used, for obvious reasons).
We hope that you now understand how to use GRUB. To understand more
about GRUB, see the User Reference Manual (@pxref{Introduction}). Have
fun!
Note that the complete descriptions of these commands, which are menu
interface specific, can be found in @pxref{Menu-specific
commands}. Other descriptions can be found in @ref{Commands}.
Now, on to the actual OS definitions. You will see that each entry
begins with a special command, @command{title}, and the action is
described after it. Note that there is no command @command{boot} at the
end of each item. That is because GRUB automatically executes
@command{boot} if it loads other commands successfully.
The argument for the command @command{title} is used to display a short
title/description of the entry in the menu. Since @command{title}
displays the argument as is, you can write basically anything in there.
@example
@group
# For booting the GNU Hurd
title GNU/Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz
@end group
@end example
This boots GNU/Hurd from the first hard disk.
@example
@group
# For booting Linux
title GNU/Linux
kernel (hd1,0)/vmlinuz root=/dev/hdb1
@end group
@end example
This boots GNU/Linux, but from the second hard disk.
@example
@group
# For booting Mach (getting kernel from floppy)
title Utah Mach4 multiboot
root (hd0,2)
pause Insert the diskette now!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap
@end group
@end example
This boots Mach with a kernel on a floppy, but the root filesystem at
hd0s3. It also contains a @command{pause} line, which will cause GRUB to
display a prompt and delay, before actually executing the rest of the
commands and booting.
@example
@group
# For booting FreeBSD
title FreeBSD
root (hd0,2,a)
kernel /boot/loader
@end group
@end example
This item will boot FreeBSD kernel loaded from the @samp{a} partition of
the third @sc{pc} slice of the first hard disk.
@example
@group
# For booting OS/2
title OS/2
root (hd0,1)
makeactive
# chainload OS/2 bootloader from the first sector
chainloader +1
# This is similar to "chainload", but loads a specific file
#chainloader /boot/chain.os2
@end group
@end example
This will boot OS/2, using a chain-loader.
@example
@group
# For booting Windows NT or Windows95
title Windows NT / Windows 95 boot menu
root (hd0,0)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
@end group
@end example
The same as the above, just for Windows.
@example
@group
# For installing GRUB into the hard disk
title Install GRUB into the hard disk
root (hd0,0)
setup (hd0)
@end group
@end example
This will just (re)install GRUB on the hard disk.
@example
# Change the colors.
title Change the colors
color light-green/brown blink-red/blue
@end example
In the last entry, the command @command{color} is used, to change the
menu colors (try it!). This command is somewhat special, because it can
be used both in the command-line and in the menu (@pxref{General
commands}). GRUB has several such commands, see the user reference.
We hope that you now understand how to use the basic features of
GRUB. To learn more about GRUB, see the User Reference Manual
(@pxref{Introduction}).
Have fun!

View file

@ -83,7 +83,7 @@ GRUB fully supports the Multiboot feature of loading multiple modules.
@item Configuration File
Supports a human-readable text configuration file with preset boot
commands. The list of commands (@pxref{Command}) are a superset of
commands. The list of commands (@pxref{Commands}) are a superset of
those supported on the command line. An example command file is provided
in @ref{Configuration}.
@ -98,7 +98,7 @@ is available to edit any preset commands, or write a new boot command
set from scratch. If no command file is present, GRUB drops to
the command line.
The list of commands (@pxref{Command}) are a subset of those supported
The list of commands (@pxref{Commands}) are a subset of those supported
for command files. Editing commands closely resemble the Bash command
line (@pxref{Command Line Editing, Bash, Command Line Editing, features,
Bash Features}), with @key{TAB}-completion of commands, devices,
@ -205,7 +205,7 @@ accessed by BIOS. Because of BIOS limitations, GRUB cannot distinguish
between IDE, ESDI, SCSI, or others. You must know yourself which BIOS
device is equivalent to which OS device. Normally, that will be clear if
you see the files in a device or use the command @command{find}
(@pxref{Command}).
(@pxref{Commands}).
@menu
* Device syntax:: How to specify devices
@ -311,7 +311,7 @@ the command line interface.
@menu
* Command line:: The flexible command line interface.
* Menu:: The simple menu interface.
* Menu interface:: The simple menu interface.
* Menu entry editor:: Editing a menu entry.
@end menu
@ -323,7 +323,7 @@ The command line interface provides a prompt and after it an editable
text area much like a command line in Unix or DOS. Each command is
immediately executed after it is entered @footnote{However, this
behavior will be changed in the future version, in a user-invisible
way.}. The commands (@pxref{Command}) are a subset of those available in
way.}. The commands (@pxref{Commands}) are a subset of those available in
the configuration file, used with exactly the same syntax.
Cursor movement and editing of the text on the line can be done via a
@ -384,7 +384,7 @@ filesystem. This is because TFTP doesn't support filename listing for
the security.
@node Menu
@node Menu interface
@section The simple menu interface
The menu interface is quite easy to use. Its commands are both
@ -427,7 +427,7 @@ To delete a line, hit the key @key{d}. Although GRUB does not support
returning to the main menu.
@node Command
@node Commands
@chapter The list of available commands
In this chapter, we list the available commands, both in the
@ -1270,7 +1270,7 @@ You can use the command @command{grub} for installing GRUB under your
operating systems and for a testbed when you add a new feature into GRUB
or when fix a bug. @command{grub} is almost the same as the Stage 2,
and, in fact, it shares the source code with the Stage 2 and you can use
the same commands (@pxref{Command}) in @command{grub}. It is emulated by
the same commands (@pxref{Commands}) in @command{grub}. It is emulated by
replacing BIOS calls with UNIX system calls and libc functions.
The command @command{grub} accepts the following options:

View file

@ -1,3 +1,3 @@
@set UPDATED 30 December 1999
@set EDITION 0.5.94
@set VERSION 0.5.94
@set UPDATED 2 April 2000
@set EDITION 0.5.95
@set VERSION 0.5.95

View file

@ -331,7 +331,8 @@ init_device_map (void)
/* Print something as the user does not think GRUB has been crashed. */
fprintf (stderr,
"Probe devices to guess BIOS drives. This may take a long time.\n");
"Probing devices to guess BIOS drives. "
"This may take a long time.\n");
if (device_map_file)
/* Try to open the device map file to write the probed data. */

View file

@ -1294,23 +1294,12 @@ static struct builtin builtin_help =
static int
hide_func (char *arg, int flags)
{
unsigned long tmp_drive = saved_drive;
unsigned long tmp_partition = saved_partition;
if (! set_device (arg))
return 1;
saved_partition = current_partition;
saved_drive = current_drive;
if (! set_partition_hidden_flag (1))
{
saved_drive = tmp_drive;
saved_partition = tmp_partition;
return 1;
}
return 1;
saved_drive = tmp_drive;
saved_partition = tmp_partition;
return 0;
}
@ -2533,6 +2522,7 @@ setup_func (char *arg, int flags)
char cmd_arg[256];
char device[16];
char *buffer = (char *) RAW_ADDR (0x100000);
static void sprint_device (int drive, int partition)
{
grub_sprintf (device, "(%cd%d",
@ -2633,6 +2623,8 @@ setup_func (char *arg, int flags)
/* OK, check if the Stage 1.5 exists. */
if (grub_open (stage1_5_map[i].name))
{
int blocksize = (filemax + SECTOR_SIZE - 1) / SECTOR_SIZE;
grub_close ();
grub_strcpy (config_file, stage2);
grub_strcpy (stage2, stage1_5_map[i].name);
@ -2645,26 +2637,22 @@ setup_func (char *arg, int flags)
grub_sprintf (cmd_arg, "%s %s", stage2, device);
/* Notify what will be run. */
grub_printf (" Run \"embed %s\"\n", cmd_arg);
grub_printf (" Running \"embed %s\"\n", cmd_arg);
embed_func (cmd_arg, flags);
if (! errnum)
{
int len;
/* Need to know the size of the Stage 1.5. */
grub_seek (0);
len = grub_read (buffer, -1);
/* Construct the blocklist representation. */
grub_sprintf (stage2, "%s1+%d",
device,
(len + SECTOR_SIZE - 1) / SECTOR_SIZE);
grub_sprintf (stage2, "%s1+%d", device, blocksize);
/* Need to prepend the device name to the
configuration filename. */
sprint_device (image_drive, image_partition);
grub_sprintf (buffer, "%s%s", device, config_file);
grub_strcpy (config_file, buffer);
}
else
goto fail;
}
else if (grub_strcmp (fsys, "ffs") == 0)
{
@ -2705,7 +2693,7 @@ setup_func (char *arg, int flags)
#endif /* ! NO_BUGGY_BIOS_IN_THE_WORLD */
/* Notify what will be run. */
grub_printf (" Run \"install %s\"\n", cmd_arg);
grub_printf (" Running \"install %s\"\n", cmd_arg);
/* Make sure that SAVED_DRIVE and SAVED_PARTITION are identical
with IMAGE_DRIVE and IMAGE_PARTITION, respectively. */
@ -2713,7 +2701,8 @@ setup_func (char *arg, int flags)
saved_partition = image_partition;
/* Run the command. */
install_func (cmd_arg, flags);
if (! install_func (cmd_arg, flags))
grub_printf ("Done.\n");
fail:
saved_drive = tmp_drive;
@ -2872,23 +2861,12 @@ static struct builtin builtin_title =
static int
unhide_func (char *arg, int flags)
{
unsigned long tmp_drive = saved_drive;
unsigned long tmp_partition = saved_partition;
if (! set_device (arg))
return 1;
saved_partition = current_partition;
saved_drive = current_drive;
if (! set_partition_hidden_flag (0))
{
saved_drive = tmp_drive;
saved_partition = tmp_partition;
return 1;
}
saved_drive = tmp_drive;
saved_partition = tmp_partition;
return 1;
return 0;
}

View file

@ -2,7 +2,7 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 1996 Erich Boleyn <erich@uruk.org>
* Copyright (C) 1999 Free Software Foundation, Inc.
* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -40,7 +40,7 @@ convert_to_ascii (char *buf, int c,...)
char *ptr = buf;
#ifndef STAGE1_5
if (c == 'x')
if (c == 'x' || c == 'X' || c == 'b')
mult = 16;
if ((num & 0x80000000uL) && c == 'd')
@ -80,7 +80,8 @@ grub_printf (const char *format,...)
{
int *dataptr = (int *) &format;
char c, *ptr, str[16];
unsigned long mask = 0xFFFFFFFF;
dataptr++;
while ((c = *(format++)) != 0)
@ -91,11 +92,16 @@ grub_printf (const char *format,...)
switch (c = *(format++))
{
#ifndef STAGE1_5
case 'b':
mask = 0xFF;
/* Fall down intentionally! */
case 'd':
case 'x':
case 'X':
#endif
case 'u':
*convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0;
*convert_to_ascii (str, c, *((unsigned long *) dataptr++) & mask)
= 0;
ptr = str;

View file

@ -2,7 +2,7 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 1996 Erich Boleyn <erich@uruk.org>
* Copyright (C) 1999 Free Software Foundation, Inc.
* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -197,9 +197,7 @@ init_bios_info (void)
mbi.mem_upper = memtmp;
}
#ifndef STAGE1_5
saved_mem_upper = mbi.mem_upper;
#endif
/*
* Initialize other Multiboot Info flags.

View file

@ -358,12 +358,13 @@ make_saved_active (void)
return 1;
}
/* Hide/Unhide CURRENT_PARTITION. */
int
set_partition_hidden_flag (int hidden)
{
if (saved_drive)
if (current_drive & 0x80)
{
int part = saved_partition >> 16;
int part = current_partition >> 16;
if (part > 3)
{
@ -371,7 +372,7 @@ set_partition_hidden_flag (int hidden)
return 0;
}
if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, (char *) SCRATCHADDR))
if (! rawread (current_drive, 0, 0, SECTOR_SIZE, (char *) SCRATCHADDR))
return 0;
if (hidden)
@ -380,7 +381,7 @@ set_partition_hidden_flag (int hidden)
PC_SLICE_TYPE (SCRATCHADDR, part) &= ~PC_SLICE_TYPE_HIDDEN_FLAG;
buf_track = -1;
if (biosdisk (BIOSDISK_WRITE, saved_drive, &buf_geom,
if (biosdisk (BIOSDISK_WRITE, current_drive, &buf_geom,
0, 1, SCRATCHSEG))
{
errnum = ERR_WRITE;

View file

@ -1,7 +1,7 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 1996 Erich Boleyn <erich@uruk.org>
* Copyright (C) 1999 Free Software Foundation, Inc.
* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -97,6 +97,9 @@
* Known PC partition types are defined here.
*/
/* This is not a flag actually, but used as if it were a flag. */
#define PC_SLICE_TYPE_HIDDEN_FLAG 0x10
#define PC_SLICE_TYPE_NONE 0
#define PC_SLICE_TYPE_FAT12 1
#define PC_SLICE_TYPE_FAT16_LT32M 4
@ -110,13 +113,16 @@
#define PC_SLICE_TYPE_EXT2FS 0x83
/* For convinience. */
/* Check if TYPE is a FAT partition type. Clear the hidden flag before
the check, to allow the user to mount a hidden partition in GRUB. */
#define IS_PC_SLICE_TYPE_FAT(type) \
(((type) == PC_SLICE_TYPE_FAT12) \
|| ((type) == PC_SLICE_TYPE_FAT16_LT32M) \
|| ((type) == PC_SLICE_TYPE_FAT16_GT32M) \
|| ((type) == PC_SLICE_TYPE_FAT16_LBA) \
|| ((type) == PC_SLICE_TYPE_FAT32) \
|| ((type) == PC_SLICE_TYPE_FAT32_LBA))
({ int _type = (type) & ~PC_SLICE_TYPE_HIDDEN_FLAG; \
_type == PC_SLICE_TYPE_FAT12 \
|| _type == PC_SLICE_TYPE_FAT16_LT32M \
|| _type == PC_SLICE_TYPE_FAT16_GT32M \
|| _type == PC_SLICE_TYPE_FAT16_LBA \
|| _type == PC_SLICE_TYPE_FAT32 \
|| _type == PC_SLICE_TYPE_FAT32_LBA; })
#define IS_PC_SLICE_TYPE_EXTENDED(type) \
(((type) == PC_SLICE_TYPE_EXTENDED) \
@ -136,9 +142,6 @@
#define IS_PC_SLICE_TYPE_BSD(type) IS_PC_SLICE_TYPE_BSD_WITH_FS(type,0)
/* This is not a flag actually, but used as if it were a flag. */
#define PC_SLICE_TYPE_HIDDEN_FLAG 0x10
/*
* *BSD-style disklabel & partition definitions.
*

View file

@ -479,9 +479,7 @@ restart:
if (c == 'q')
{
/* The same as ``quit''. */
#ifdef GRUB_UTIL
stop ();
#endif
}
#endif
}

View file

@ -1,7 +1,7 @@
#! /bin/sh
# Install GRUB on your drive.
# Copyright (C) 1999 Free Software Foundation, Inc.
# Copyright (C) 1999, 2000 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
@ -49,6 +49,8 @@ Install GRUB on your drive.
instead of the root directory.
--grub-shell=FILE use FILE as the grub shell.
INSTALL_DEVICE can be a GRUB device name or a system device filename.
Reports bugs to <bug-grub@gnu.org>.
EOF
}
@ -58,26 +60,26 @@ EOF
# This part is OS-specific.
convert () {
# First, check if the device file exists.
if test ! -e $1; then
if test ! -e "$1"; then
echo "$1: Not found." 1>&2
exit 1
fi
# Break the device name into the disk part and the partition part.
case $host_os in
case "$host_os" in
linux*)
tmp_disk=`echo $1 | sed 's%[0-9]*$%%'`
tmp_part=`echo $1 | sed "s%$tmp_disk%%"` ;;
tmp_disk=`echo "$1" | sed 's%[0-9]*$%%'`
tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;;
gnu*)
tmp_disk=`echo $1 | sed 's%s[0-9]*[a-g]?%%'`
tmp_part=`echo $1 | sed "s%$tmp_disk%%"` ;;
tmp_disk=`echo "$1" | sed 's%s[0-9]*[a-g]?%%'`
tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;;
*)
echo "grub-install does not support your OS yet." 1>&2
exit 1 ;;
esac
# Get the drive name.
tmp_drive=`grep -v '^#' $device_map | grep $tmp_disk \
tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk" \
| sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'`
# If not found, print an error message and exit.
@ -89,23 +91,24 @@ convert () {
if test "x$tmp_part" != x; then
# If a partition is specified, we need to translate it into the
# GRUB's syntax.
case $host_os in
case "$host_os" in
linux*)
echo $tmp_drive | sed "s%)$%,`expr $tmp_part - 1`)%" ;;
echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;;
gnu*)
tmp_pc_slice=`echo $tmp_part | sed "s%s\([0-9]*\)[a-g]?%\1%"`
tmp_bsd_partition=`echo $tmp | sed "s%s[0-9]*\([a-g]?\)%\1%"`
tmp_drive=`echo $tmp_drive \
| sed "s%)%,\`expr $tmp_pc_slice - 1\`)%"`
tmp_pc_slice=`echo "$tmp_part" | sed "s%s\([0-9]*\)[a-g]?%\1%"`
tmp_bsd_partition=`echo "$tmp_part" \
| sed "s%s[0-9]*\([a-g]?\)%\1%"`
tmp_drive=`echo "$tmp_drive" \
| sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`
if test "x$tmp_bsd_partition" != x; then
tmp_drive=`echo $tmp_drive \
tmp_drive=`echo "$tmp_drive" \
| sed "s%)%,\`sed y%abcdefg%0123456%\`)%"`
fi
echo $tmp_drive ;;
echo "$tmp_drive" ;;
esac
else
# If no partition is specified, just print the drive name.
echo $tmp_drive
echo "$tmp_drive"
fi
}
@ -119,9 +122,9 @@ for option; do
echo "grub-install (GNU GRUB ${VERSION})"
exit 0 ;;
--root-directory=*)
rootdir=`echo $option | sed 's/--root-directory=//'` ;;
rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
--grub-shell=*)
grub_shell=`echo $option | sed 's/--grub-shell=//'` ;;
grub_shell=`echo "$option" | sed 's/--grub-shell=//'` ;;
# This is an undocumented feature...
--debug)
debug=yes ;;
@ -145,17 +148,17 @@ grubdir=${bootdir}/grub
device_map=${grubdir}/device.map
# Check if GRUB is installed
if test ! -f $grub_shell; then
if test ! -f "$grub_shell"; then
echo "${grub_shell}: Not found." 1>&2
exit 1
fi
if test ! -f $pkgdatadir/stage1; then
if test ! -f "$pkgdatadir/stage1"; then
echo "${pkgdatadir}/stage1: Not found." 1>&2
exit 1
fi
if test ! -f $pkgdatadir/stage2; then
if test ! -f "$pkgdatadir/stage2"; then
echo "${pkgdatadir}/stage2: Not found." 1>&2
exit 1
fi
@ -164,11 +167,11 @@ fi
# Stage 1.5 does not exist.
# Create the GRUB directory if it is not present.
test -d $bootdir || mkdir $bootdir
test -d $grubdir || mkdir $grubdir
test -d "$bootdir" || mkdir "$bootdir"
test -d "$grubdir" || mkdir "$grubdir"
# Create the device map file if it is not present.
if test ! -f $device_map; then
if test ! -f "$device_map"; then
# Create a safe temporary file.
test -x /bin/tempfile && log_file=`tempfile --prefix=grub`
@ -190,7 +193,7 @@ if test "x$install_device" = x; then
else
case "$install_device" in
/dev/*)
install_drive=`convert $install_device`
install_drive=`convert "$install_device"`
# I don't know why, but some shells wouldn't die if exit is
# called in a function.
if test "x$install_drive" = x; then
@ -208,15 +211,16 @@ fi
# For now, this uses the program `df' to get the device name, but is
# this really portable?
root_device=`df ${rootdir} | grep /dev/ | sed 's%.*\(/dev/[a-z0-9]*\).*%\1%'`
root_drive=`convert $root_device`
root_drive=`convert "$root_device"`
if test "x$root_drive" = x; then
exit 1
fi
# Check if the root directory exists in the same device as the grub
# directory.
grubdir_device=`df ${grubdir} | grep /dev/ | sed 's%.*\(/dev/[a-z0-9]*\).*%\1%'`
if test $grubdir_device != $root_device; then
grubdir_device=`df ${grubdir} | grep /dev/ \
| sed 's%.*\(/dev/[a-z0-9]*\).*%\1%'`
if test "x$grubdir_device" != "x$root_device"; then
# For now, cannot deal with this situation.
cat <<EOF 1&>2
You must set the root directory by the option --root-directory, because