doc updates.
This commit is contained in:
parent
ab6cc80541
commit
098d98d047
10 changed files with 766 additions and 531 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
2000-02-26 OKUJI Yoshinori <okuji@gnu.org>
|
||||
|
||||
* docs/help2man: Upgraded to 1.020.
|
||||
* docs/grub.8: Regenerated.
|
||||
* docs/grub-install.8: Likewise.
|
||||
* docs/mbchk.1: Likewise.
|
||||
|
||||
* docs/tutorial.texi (Boot): Rewritten heavily. Added the notes
|
||||
on FreeBSD, NetBSD, OpenBSD, DOS/Windows and SCO UnixWare.
|
||||
* docs/menu.lst: Load "/boot/loader" instead of "/kernel" in the
|
||||
FreeBSD entry. This is consistent with the documentation.
|
||||
|
||||
2000-02-25 OKUJI Yoshinori <okuji@gnu.org>
|
||||
|
||||
* netboot/fsys_tftp.c (tftp_read): Set BUF_READ to zero if
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.016.
|
||||
.TH GRUB-INSTALL "8" "January 2000" "grub-install (GNU GRUB 0.5.94)" FSF
|
||||
.\" 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
|
||||
.SH NAME
|
||||
grub-install \- install GRUB on your drive
|
||||
.SH SYNOPSIS
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.016.
|
||||
.TH GRUB "8" "January 2000" "GNU GRUB 0.5.94" FSF
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020.
|
||||
.TH GRUB "8" "February 2000" "GNU GRUB 0.5.94" FSF
|
||||
.SH NAME
|
||||
GRUB \- the grub shell
|
||||
.SH SYNOPSIS
|
||||
|
|
187
docs/help2man
187
docs/help2man
|
@ -27,7 +27,7 @@ use Text::Tabs qw(expand);
|
|||
use POSIX qw(strftime setlocale LC_TIME);
|
||||
|
||||
my $this_program = 'help2man';
|
||||
my $this_version = '1.016';
|
||||
my $this_version = '1.020';
|
||||
my $version_info = <<EOT;
|
||||
$this_program $this_version
|
||||
|
||||
|
@ -56,15 +56,15 @@ EXECUTABLE should accept `--help' and `--version' options.
|
|||
EOT
|
||||
|
||||
my $section = 1;
|
||||
my ($include, $opt_name, $opt_include, $opt_output, $opt_no_info);
|
||||
my ($opt_name, @opt_include, $opt_output, $opt_no_info);
|
||||
|
||||
# Parse options.
|
||||
Getopt::Long::config('bundling');
|
||||
GetOptions (
|
||||
'n|name=s' => \$opt_name,
|
||||
's|section=s' => \$section,
|
||||
'i|include=s' => \$include,
|
||||
'I|opt-include=s' => \$opt_include,
|
||||
'i|include=s' => sub { push @opt_include, [ pop, 1 ] },
|
||||
'I|opt-include=s' => sub { push @opt_include, [ pop, 0 ] },
|
||||
'o|output=s' => \$opt_output,
|
||||
'N|no-info' => \$opt_no_info,
|
||||
help => sub { print $help_info; exit },
|
||||
|
@ -74,50 +74,82 @@ GetOptions (
|
|||
die $help_info unless @ARGV == 1;
|
||||
|
||||
my %include = ();
|
||||
my %append = ();
|
||||
my @include = (); # retain order given in include file
|
||||
|
||||
# Provide replacement `quote-regex' operator for pre-5.005.
|
||||
BEGIN { eval q(sub qr { '' =~ $_[0]; $_[0] }) if $] < 5.005 }
|
||||
|
||||
# Process include file (if given). Format is:
|
||||
#
|
||||
# [section name]
|
||||
# verbatim text
|
||||
# [section name]
|
||||
# verbatim text
|
||||
#
|
||||
# or
|
||||
#
|
||||
# /pattern/
|
||||
# verbatim text
|
||||
#
|
||||
|
||||
if ($include or $opt_include)
|
||||
for (@opt_include)
|
||||
{
|
||||
if (open INC, $include || $opt_include)
|
||||
my ($inc, $required) = @$_;
|
||||
|
||||
next unless -f $inc or $required;
|
||||
die "$this_program: can't open `$inc' ($!)\n"
|
||||
unless open INC, $inc;
|
||||
|
||||
my $key;
|
||||
my $hash = \%include;
|
||||
|
||||
while (<INC>)
|
||||
{
|
||||
my $sect;
|
||||
|
||||
while (<INC>)
|
||||
# [section]
|
||||
if (/^\[([^]]+)\]/)
|
||||
{
|
||||
if (/^\[([^]]+)\]/)
|
||||
{
|
||||
$sect = uc $1;
|
||||
$sect =~ s/^\s+//;
|
||||
$sect =~ s/\s+$//;
|
||||
next;
|
||||
}
|
||||
|
||||
# Silently ignore anything before the first
|
||||
# section--allows for comments and revision info.
|
||||
next unless $sect;
|
||||
|
||||
push @include, $sect unless $include{$sect};
|
||||
$include{$sect} ||= '';
|
||||
$include{$sect} .= $_;
|
||||
$key = uc $1;
|
||||
$key =~ s/^\s+//;
|
||||
$key =~ s/\s+$//;
|
||||
$hash = \%include;
|
||||
push @include, $key unless $include{$key};
|
||||
next;
|
||||
}
|
||||
|
||||
close INC;
|
||||
# /pattern/
|
||||
if (m!^/(.*)/([ims]*)!)
|
||||
{
|
||||
my $pat = $2 ? "(?$2)$1" : $1;
|
||||
|
||||
die "$this_program: no valid information found in `$include'\n"
|
||||
unless %include;
|
||||
# Check pattern.
|
||||
eval { $key = qr($pat) };
|
||||
if ($@)
|
||||
{
|
||||
$@ =~ s/ at .*? line \d.*//;
|
||||
die "$inc:$.:$@";
|
||||
}
|
||||
|
||||
# Compress trailing blank lines.
|
||||
for (keys %include) { $include{$_} =~ s/\n+$/\n/ }
|
||||
}
|
||||
else
|
||||
{
|
||||
die "$this_program: can't open `$include' ($!)\n" if $include;
|
||||
$hash = \%append;
|
||||
next;
|
||||
}
|
||||
|
||||
# Silently ignore anything before the first
|
||||
# section--allows for comments and revision info.
|
||||
next unless $key;
|
||||
|
||||
$hash->{$key} ||= '';
|
||||
$hash->{$key} .= $_;
|
||||
}
|
||||
|
||||
close INC;
|
||||
|
||||
die "$this_program: no valid information found in `$inc'\n"
|
||||
unless $key;
|
||||
}
|
||||
|
||||
# Compress trailing blank lines.
|
||||
for my $hash (\(%include, %append))
|
||||
{
|
||||
for (keys %$hash) { $hash->{$_} =~ s/\n+$/\n/ }
|
||||
}
|
||||
|
||||
# Turn off localisation of executable's ouput.
|
||||
|
@ -127,11 +159,10 @@ if ($include or $opt_include)
|
|||
setlocale LC_TIME, 'C';
|
||||
|
||||
# Grab help and version info from executable.
|
||||
my $help_text = join '', map { expand $_ } `$ARGV[0] --help 2>/dev/null`
|
||||
or die "$this_program: can't get `--help' info from $ARGV[0]\n";
|
||||
|
||||
my $version_text = join '', map { expand $_ } `$ARGV[0] --version 2>/dev/null`
|
||||
or die "$this_program: can't get `--version' info from $ARGV[0]\n";
|
||||
my ($help_text, $version_text) = map {
|
||||
join '', map { s/ +$//; expand $_ } `$ARGV[0] --$_ 2>/dev/null`
|
||||
or die "$this_program: can't get `--$_' info from $ARGV[0]\n"
|
||||
} qw(help version);
|
||||
|
||||
my $date = strftime "%B %Y", localtime;
|
||||
(my $program = $ARGV[0]) =~ s!.*/!!;
|
||||
|
@ -194,20 +225,22 @@ $include{NAME} ||= "$program \\- manual page for $program $version\n";
|
|||
my $PROGRAM = uc $program;
|
||||
|
||||
# Extract usage clause(s) [if any] for SYNOPSIS.
|
||||
if ($help_text =~ s/^Usage: +(\S.*)(\n *or: +\S.*)*//m)
|
||||
if ($help_text =~ s/^Usage:( +(\S+))(.*)((?:\n(?: {6}\1| *or: +\S).*)*)//m)
|
||||
{
|
||||
my @syn = $1;
|
||||
my @syn = $2 . $3;
|
||||
|
||||
if ($_ = $2)
|
||||
if ($_ = $4)
|
||||
{
|
||||
for (split /\n/) { push @syn, $1 if /or: +(\S.*)/ }
|
||||
s/^\n//;
|
||||
for (split /\n/) { s/^ *(or: +)?//; push @syn, $_ }
|
||||
}
|
||||
|
||||
my $synopsis = '';
|
||||
for (@syn)
|
||||
{
|
||||
$synopsis .= ".br\n" if $synopsis;
|
||||
s/(\S+) *//;
|
||||
s!^\S*/!!;
|
||||
s/^(\S+) *//;
|
||||
$synopsis .= ".B $1\n";
|
||||
s/\s+$//;
|
||||
s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
|
||||
|
@ -238,6 +271,9 @@ s/\n\n+/\n\n/g;
|
|||
s/^\./\x80/mg;
|
||||
s/\\/\x81/g;
|
||||
|
||||
# Start a new paragraph (if required) for these.
|
||||
s/([^\n])\n(Report +bugs|Email +bug +reports +to|Written +by)/$1\n\n$2/g;
|
||||
|
||||
sub convert_option;
|
||||
|
||||
while (length)
|
||||
|
@ -250,7 +286,7 @@ while (length)
|
|||
}
|
||||
|
||||
# Copyright section
|
||||
if (/^Copyright [\(\xa9]/)
|
||||
if (/^Copyright +[(\xa9]/)
|
||||
{
|
||||
$sect = 'COPYRIGHT';
|
||||
$include{$sect} ||= '';
|
||||
|
@ -266,11 +302,11 @@ while (length)
|
|||
|
||||
# Convert iso9959-1 copyright symbol or (c) to nroff
|
||||
# character.
|
||||
s/^Copyright (?:\xa9|\([Cc]\))/Copyright \\(co/mg;
|
||||
s/^Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/mg;
|
||||
|
||||
# Insert line breaks before additional copyright messages
|
||||
# and the disclaimer.
|
||||
s/(.)\n(Copyright |This is free software)/$1\n.br\n$2/g;
|
||||
s/(.)\n(Copyright |This +is +free +software)/$1\n.br\n$2/g;
|
||||
|
||||
# Join hyphenated lines.
|
||||
s/([A-Za-z])-\n */$1/g;
|
||||
|
@ -282,7 +318,7 @@ while (length)
|
|||
}
|
||||
|
||||
# Catch bug report text.
|
||||
if (/^(Report bugs|Email bug reports to) /)
|
||||
if (/^(Report +bugs|Email +bug +reports +to) /)
|
||||
{
|
||||
$sect = 'REPORTING BUGS';
|
||||
}
|
||||
|
@ -310,34 +346,44 @@ while (length)
|
|||
next;
|
||||
}
|
||||
|
||||
my $matched = '';
|
||||
$include{$sect} ||= '';
|
||||
|
||||
# Sub-sections have a trailing colon and the second line indented.
|
||||
if (s/^(\S.*:) *\n / /)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$include{$sect} .= qq(.SS "$1"\n);
|
||||
}
|
||||
|
||||
my $indent = 0;
|
||||
my $content = '';
|
||||
|
||||
# Tagged paragraph (option).
|
||||
if (s/^( {1,10}(-\S+(?:, *-\S+)*))(?: +|\n( {20,}))([^\s-].*)\n//)
|
||||
# Option with description.
|
||||
if (s/^( {1,10}([+-]\S.*?))(?:( +)|\n( {20,}))(\S.*)\n//)
|
||||
{
|
||||
$indent = length ($3 || $1);
|
||||
my $tag = $2;
|
||||
my $desc = $4;
|
||||
unless ($3)
|
||||
$matched .= $& if %append;
|
||||
$indent = length ($4 || "$1$3");
|
||||
$content = ".TP\n\x82$2\n\x82$5\n";
|
||||
unless ($4)
|
||||
{
|
||||
$indent = length $1;
|
||||
$indent = length $1 if /^( {20,})[^\s-]/;
|
||||
# Indent may be different on second line.
|
||||
$indent = length $& if /^ {20,}/;
|
||||
}
|
||||
|
||||
$content = ".TP\n\x82$tag\n\x82$desc\n";
|
||||
}
|
||||
|
||||
# Tagged paragraph (other).
|
||||
# Option without description.
|
||||
elsif (s/^ {1,10}([+-]\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$content = ".HP\n\x82$1\n";
|
||||
$indent = 80; # not continued
|
||||
}
|
||||
|
||||
# Indented paragraph with tag.
|
||||
elsif (s/^( +(\S.*?) +)(\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$indent = length $1;
|
||||
$content = ".TP\n\x82$2\n\x82$3\n";
|
||||
}
|
||||
|
@ -345,6 +391,7 @@ while (length)
|
|||
# Indented paragraph.
|
||||
elsif (s/^( +)(\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$indent = length $1;
|
||||
$content = ".IP\n\x82$2\n";
|
||||
}
|
||||
|
@ -353,12 +400,17 @@ while (length)
|
|||
else
|
||||
{
|
||||
s/(.*)\n//;
|
||||
$matched .= $& if %append;
|
||||
$content = ".PP\n" if $include{$sect};
|
||||
$content .= "$1\n";
|
||||
}
|
||||
|
||||
# Append continuations.
|
||||
$content .= "\x82$1\n" while s/^ {$indent}(\S.*)\n//;
|
||||
while (s/^ {$indent}(\S.*)\n//)
|
||||
{
|
||||
$matched .= $& if %append;
|
||||
$content .= "\x82$1\n"
|
||||
}
|
||||
|
||||
# Move to next paragraph.
|
||||
s/^\n+//;
|
||||
|
@ -373,6 +425,19 @@ while (length)
|
|||
s/(^| )(-[][\w=-]+)/$1 . convert_option $2/mge;
|
||||
}
|
||||
|
||||
# Check if matched paragraph contains /pat/.
|
||||
if (%append)
|
||||
{
|
||||
for my $pat (keys %append)
|
||||
{
|
||||
if ($matched =~ $pat)
|
||||
{
|
||||
$content .= ".PP\n" unless $append{$pat} =~ /^\./;
|
||||
$content .= $append{$pat};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$include{$sect} .= $content;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.016.
|
||||
.TH MBCHK "1" "January 2000" "mbchk (GNU GRUB 0.5.94)" FSF
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020.
|
||||
.TH MBCHK "1" "February 2000" "mbchk (GNU GRUB 0.5.94)" FSF
|
||||
.SH NAME
|
||||
mbchk \- check the format of a Multiboot kernel
|
||||
.SH SYNOPSIS
|
||||
|
|
|
@ -19,7 +19,8 @@ module /boot/serverboot.gz
|
|||
|
||||
# For booting Linux
|
||||
title GNU/Linux
|
||||
kernel (hd1,0)/vmlinuz root=/dev/hdb1
|
||||
root (hd1,0)
|
||||
kernel /vmlinuz root=/dev/hdb1
|
||||
|
||||
# For booting Mach (getting kernel from floppy)
|
||||
title Utah Mach4 multiboot
|
||||
|
@ -28,10 +29,10 @@ pause Insert the diskette now!!
|
|||
kernel (fd0)/boot/kernel root=hd0s3
|
||||
module (fd0)/boot/bootstrap
|
||||
|
||||
# For booting FreeBSD (getting kernel from floppy)
|
||||
title FreeBSD
|
||||
# For booting FreeBSD
|
||||
title FreeBSD 3.4
|
||||
root (hd0,2,a)
|
||||
kernel (fd0)/kernel
|
||||
kernel /boot/loader
|
||||
|
||||
# For booting OS/2
|
||||
title OS/2
|
||||
|
@ -44,9 +45,9 @@ chainloader +1
|
|||
|
||||
# For booting Windows NT or Windows95
|
||||
title Windows NT / Windows 95 boot menu
|
||||
root (hd0,0)
|
||||
rootnoverify (hd0,0)
|
||||
makeactive
|
||||
chainloader +1
|
||||
chainloader +1
|
||||
# For loading DOS if Windows NT is installed
|
||||
# chainload /bootsect.dos
|
||||
|
||||
|
|
|
@ -143,9 +143,11 @@ on the floppy.
|
|||
It is easy to create a GRUB boot floppy. Just follow this below:
|
||||
|
||||
@example
|
||||
@group
|
||||
# cd /boot/grub
|
||||
# dd if=stage1 of=/dev/fd0 bs=512 count=1
|
||||
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
|
||||
@end group
|
||||
@end example
|
||||
|
||||
The device filename may be different. Consult the manual for your OS.
|
||||
|
@ -223,18 +225,37 @@ but, for some free operating systems, you need to use some OS-specific
|
|||
magic.
|
||||
|
||||
@menu
|
||||
* Booting a Multiboot-compliant OS::
|
||||
* Booting GNU/Hurd::
|
||||
* Booting GNU/Linux::
|
||||
* Booting FreeBSD::
|
||||
* Booting NetBSD::
|
||||
* Booting OpenBSD::
|
||||
* General boot methods::
|
||||
* OS-specific notes::
|
||||
@end menu
|
||||
|
||||
|
||||
@node General boot methods
|
||||
@section How to boot operating systems
|
||||
|
||||
GRUB has two distinct sets of boot methods, that is, loading an
|
||||
operating system directly and chain-loading another boot loader which
|
||||
then will load an operating system actually. Generally speaking, the
|
||||
former is preferable, because you don't need to install or maintain
|
||||
other boot loaders and GRUB is flexible enough to load an operating
|
||||
system from an arbitrary disk/partition. However, the latter is
|
||||
sometimes required, since GRUB doesn't support all the existing
|
||||
operating systems natively.
|
||||
|
||||
@menu
|
||||
* Loading an operating system directly::
|
||||
* Chain-loading::
|
||||
@end menu
|
||||
|
||||
|
||||
@node Booting a Multiboot-compliant OS
|
||||
@section Booting a Multiboot-compliant OS
|
||||
@node Loading an operating system directly
|
||||
@subsection How to boot an OS directly by GRUB
|
||||
|
||||
The native format supported by GRUB is Multiboot (@pxref{Top, Multiboot
|
||||
Specification, Motivation, multiboot, The Multiboot Specification}), but
|
||||
Linux, FreeBSD, NetBSD and OpenBSD are also supported for
|
||||
convenience. If you want to boot other operating systems, you will have
|
||||
to chain-load them (@pxref{Chain-loading}).
|
||||
|
||||
Generally, GRUB can boot any Multiboot-compliant OS in the following
|
||||
steps:
|
||||
|
@ -242,22 +263,83 @@ steps:
|
|||
@enumerate
|
||||
@item
|
||||
Set GRUB's root device to the drive where the OS images are stored by
|
||||
the command @command{root} (@pxref{Command}).
|
||||
the command @command{root}.
|
||||
|
||||
@item
|
||||
Load the kernel image by the command @command{kernel} (@pxref{Command}).
|
||||
Load the kernel image by the command @command{kernel}.
|
||||
|
||||
@item
|
||||
Load the modules by the command @command{module} or
|
||||
@command{modulenounzip} as you need (@pxref{Command}).
|
||||
@command{modulenounzip} as you need.
|
||||
|
||||
@item
|
||||
Run the command @command{boot} (@pxref{Command}).
|
||||
Run the command @command{boot}.
|
||||
@end enumerate
|
||||
|
||||
Linux, FreeBSD, NetBSD and OpenBSD can be booted in a similar
|
||||
manner. You can load a kernel image by the command @command{kernel} and
|
||||
then run the command @command{boot}. If the kernel requires some
|
||||
parameters, just append the parameters to @command{kernel}, after the
|
||||
filename of the kernel. Also, please refer to @ref{OS-specific notes},
|
||||
for the information on your OS-specific issues.
|
||||
|
||||
@node Booting GNU/Hurd
|
||||
@section Booting GNU/Hurd
|
||||
|
||||
@node Chain-loading
|
||||
@subsection Load another boot loader to boot unsupported operating systems
|
||||
|
||||
If you want to boot an unsupported operating system (e.g. Windows 95),
|
||||
chain-load the boot loader for the operating system. Normally, the boot
|
||||
loader is embedded in the @dfn{boot sector} of the partition on which
|
||||
the operating system is installed.
|
||||
|
||||
First, set GRUB's root device to the partition by the command
|
||||
@command{rootnoverify}:
|
||||
|
||||
@example
|
||||
grub> rootnoverify (hd0,0)
|
||||
@end example
|
||||
|
||||
Second, set the @dfn{active} flag in the partition by the command
|
||||
@command{makeactive}@footnote{This is not necessary for most modern
|
||||
operating systems.}:
|
||||
|
||||
@example
|
||||
grub> makeactive
|
||||
@end example
|
||||
|
||||
Third, load the boot loader by the command @command{chainloader}:
|
||||
|
||||
@example
|
||||
grub> chainloader +1
|
||||
@end example
|
||||
|
||||
@samp{+1} indicates that GRUB should read one sector from the start of
|
||||
the partition. The complete description about this syntax can be found
|
||||
in @ref{Filesystem}. If this succeeds, run the command @command{boot}.
|
||||
|
||||
However, DOS and Windows have a deficiency, so you might have to use
|
||||
more complicated instructions. @xref{OS-specific notes}, for more
|
||||
information.
|
||||
|
||||
|
||||
@node OS-specific notes
|
||||
@section Some caveats on OS-specific issues
|
||||
|
||||
Here, we describe some caveats on several operating systems.
|
||||
|
||||
@menu
|
||||
* GNU/Hurd::
|
||||
* GNU/Linux::
|
||||
* FreeBSD::
|
||||
* NetBSD::
|
||||
* OpenBSD::
|
||||
* DOS/Windows::
|
||||
* SCO UnixWare::
|
||||
@end menu
|
||||
|
||||
|
||||
@node GNU/Hurd
|
||||
@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
|
||||
|
@ -270,19 +352,20 @@ you.
|
|||
Second, load the kernel and the module, like this:
|
||||
|
||||
@example
|
||||
@group
|
||||
grub> kernel /boot/gnumach root=hd0s1
|
||||
grub> module /boot/serverboot
|
||||
@end group
|
||||
@end example
|
||||
|
||||
And, finally, run the command @command{boot}.
|
||||
|
||||
|
||||
@node Booting GNU/Linux
|
||||
@section Booting GNU/Linux
|
||||
@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
|
||||
(@pxref{Booting a Multiboot-compliant OS}).
|
||||
GNU/Linux 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
|
||||
|
@ -314,69 +397,65 @@ grub> initrd /initrd
|
|||
And, finally, run the command @command{boot}.
|
||||
|
||||
|
||||
@node Booting FreeBSD
|
||||
@section Booting FreeBSD
|
||||
@node FreeBSD
|
||||
@subsection FreeBSD
|
||||
|
||||
@c Probably we should fix the boot parameters before writing this
|
||||
@c section.
|
||||
FIXME
|
||||
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.
|
||||
|
||||
|
||||
@node Booting NetBSD
|
||||
@section Booting NetBSD
|
||||
|
||||
@c Likewise.
|
||||
FIXME
|
||||
|
||||
|
||||
@node Booting OpenBSD
|
||||
@section Booting OpenBSD
|
||||
|
||||
@c Likewise.
|
||||
FIXME
|
||||
|
||||
|
||||
@node Chain-loading
|
||||
@section Chain-loading
|
||||
|
||||
If you want to boot an unsupported operating system (i.e. Windows 95),
|
||||
chain-load the boot loader for the operating system. Normally, the boot
|
||||
loader is embedded in the @dfn{boot sector} of the partition on which
|
||||
the operating system is installed.
|
||||
|
||||
First, set GRUB's root device to the partition by the command
|
||||
@command{rootnoverify}:
|
||||
Thus, we'd recommend loading the very flexible loader
|
||||
@file{/boot/loader} instead. See this example:
|
||||
|
||||
@example
|
||||
grub> rootnoverify (hd0,0)
|
||||
@group
|
||||
grub> root (hd0,a)
|
||||
grub> kernel /boot/loader
|
||||
grub> boot
|
||||
@end group
|
||||
@end example
|
||||
|
||||
Second, set the @dfn{active} flag in the partition by the command
|
||||
@command{makeactive}:
|
||||
|
||||
@example
|
||||
grub> makeactive
|
||||
@end example
|
||||
@node NetBSD
|
||||
@subsection NetBSD
|
||||
|
||||
Third, load the boot loader by the command @command{chainloader}:
|
||||
GRUB can load NetBSD a.out directly, by the following steps:
|
||||
|
||||
@example
|
||||
grub> chainloader +1
|
||||
@end example
|
||||
@enumerate
|
||||
@item
|
||||
Set GRUB's root device by @command{root}.
|
||||
|
||||
Do not care about what @samp{+1} is. We describe it later in
|
||||
@ref{Filesystem}. If this succeeds, run the command @command{boot}.
|
||||
@item
|
||||
Load the kernel by @command{kernel}.
|
||||
|
||||
@strong{Caution:} Some boot loaders (such as the one in SCO Unixware
|
||||
7.1) are defective in the signature, so you will have to specify the
|
||||
option @option{--force} to @command{chainloader} for them. The option
|
||||
might seem to solve your problem, but we strongly recommend reporting
|
||||
the bug to the maintainer.
|
||||
@item
|
||||
Run @command{boot}.
|
||||
@end enumerate
|
||||
|
||||
However, some tricks will be necessary if you have installed DOS or
|
||||
Windows on a non-first hard disk, because they cannot boot any disks
|
||||
except for the first one. The solution is to use the command
|
||||
@command{map} (@pxref{Command}), like this:
|
||||
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.
|
||||
|
||||
|
||||
@node OpenBSD
|
||||
@subsection OpenBSD
|
||||
|
||||
The boot instructions are exactly the same as 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.
|
||||
|
||||
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:
|
||||
|
||||
@example
|
||||
@group
|
||||
|
@ -385,8 +464,51 @@ grub> map (hd1) (hd0)
|
|||
@end group
|
||||
@end example
|
||||
|
||||
This performs the @dfn{logical} exchange between your first disk and
|
||||
your second one.
|
||||
This performs the @dfn{virtual} exchange between the two disks.
|
||||
|
||||
@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.
|
||||
|
||||
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
|
||||
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
|
||||
the first partition and the second partition of the first hard disk,
|
||||
follow these below when booting the first:
|
||||
|
||||
@example
|
||||
@group
|
||||
grub> unhide (hd0,0)
|
||||
grub> hide (hd0,1)
|
||||
grub> rootnoverify (hd0,0)
|
||||
grub> chainloader +1
|
||||
grub> makeactive
|
||||
grub> boot
|
||||
@end group
|
||||
@end example
|
||||
|
||||
|
||||
@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
|
||||
@command{chainloader}, like this:
|
||||
|
||||
@example
|
||||
@group
|
||||
grub> rootnoverify (hd1,0)
|
||||
grub> chainloader --force +1
|
||||
grub> makeactive
|
||||
grub> boot
|
||||
@end group
|
||||
@end example
|
||||
|
||||
|
||||
@node Configuration
|
||||
|
|
|
@ -96,7 +96,7 @@ libdrivers_a_SOURCES = byteorder.h config.c etherboot.h \
|
|||
main.c misc.c netboot_config.h netdevice.h nic.h osdep.h \
|
||||
pci.c pci.h
|
||||
|
||||
EXTRA_libdrivers_a_SOURCES = 3c509.c 3c509.h 3c59x.c 3c90x.c cs89x0.c \
|
||||
EXTRA_libdrivers_a_SOURCES = 3c509.c 3c509.h 3c90x.c cs89x0.c \
|
||||
3c89x0.h eepro100.c epic100.c epic100.h i82586.c lance.c \
|
||||
ns8390.c ns8390.h ntulip.c rtl8139.c sk_g16.c sk_g16.h \
|
||||
smc9000.c smc9000.h tiara.c tulip.c tulip.h via-rhine.c
|
||||
|
@ -115,7 +115,7 @@ EXTRA_DIST = README.netboot 3c90x.txt ntulip.txt
|
|||
|
||||
# What objects are derived from a driver?
|
||||
3c509_drivers = 3c509.o 3c529.o
|
||||
3c59x_drivers = 3c59x.o
|
||||
#3c59x_drivers = 3c59x.o
|
||||
3c90x_drivers = 3c90x.o
|
||||
cs89x0_drivers = cs89x0.o
|
||||
eepro100_drivers = eepro100.o
|
||||
|
@ -134,7 +134,7 @@ via_rhine_drivers = via_rhine.o
|
|||
# Per-object flags.
|
||||
3c509_o_CFLAGS = -DINCLUDE_3C509=1
|
||||
3c529_o_CFLAGS = -DINCLUDE_3C529=1
|
||||
3c59x_o_CFLAGS = -DINCLUDE_3C59X=1
|
||||
#3c59x_o_CFLAGS = -DINCLUDE_3C59X=1
|
||||
3c90x_o_CFLAGS = -DINCLUDE_3C90X=1
|
||||
cs89x0_o_CFLAGS = -DINCLUDE_CS89X0=1
|
||||
eepro100_o_CFLAGS = -DINCLUDE_EEPRO100=1
|
||||
|
@ -184,11 +184,11 @@ DIST_COMMON = Makefile.am Makefile.in compile
|
|||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
DEP_FILES = .deps/3c509.P .deps/3c59x.P .deps/3c90x.P .deps/config.P \
|
||||
.deps/cs89x0.P .deps/eepro100.P .deps/epic100.P .deps/fsys_tftp.P \
|
||||
.deps/i82586.P .deps/lance.P .deps/main.P .deps/misc.P .deps/ns8390.P \
|
||||
.deps/ntulip.P .deps/pci.P .deps/rtl8139.P .deps/sk_g16.P \
|
||||
.deps/smc9000.P .deps/tiara.P .deps/tulip.P .deps/via-rhine.P
|
||||
DEP_FILES = .deps/3c509.P .deps/3c90x.P .deps/config.P .deps/cs89x0.P \
|
||||
.deps/eepro100.P .deps/epic100.P .deps/fsys_tftp.P .deps/i82586.P \
|
||||
.deps/lance.P .deps/main.P .deps/misc.P .deps/ns8390.P .deps/ntulip.P \
|
||||
.deps/pci.P .deps/rtl8139.P .deps/sk_g16.P .deps/smc9000.P \
|
||||
.deps/tiara.P .deps/tulip.P .deps/via-rhine.P
|
||||
SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES)
|
||||
OBJECTS = $(am_libdrivers_a_OBJECTS)
|
||||
|
||||
|
@ -227,7 +227,6 @@ libdrivers_a-main.o: main.c
|
|||
libdrivers_a-misc.o: misc.c
|
||||
libdrivers_a-pci.o: pci.c
|
||||
libdrivers_a-3c509.o: 3c509.c
|
||||
libdrivers_a-3c59x.o: 3c59x.c
|
||||
libdrivers_a-3c90x.o: 3c90x.c
|
||||
libdrivers_a-cs89x0.o: cs89x0.c
|
||||
libdrivers_a-eepro100.o: eepro100.c
|
||||
|
@ -448,25 +447,6 @@ libdrivers_a-3c509.lo: 3c509.c
|
|||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm -f .deps/$(*D)/$(*F).pp
|
||||
|
||||
libdrivers_a-3c59x.o: 3c59x.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
|
||||
@-cp .deps/$(*D)/$(*F).pp .deps/$(*D)/$(*F).P; \
|
||||
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
|
||||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
||||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm .deps/$(*D)/$(*F).pp
|
||||
|
||||
libdrivers_a-3c59x.lo: 3c59x.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
|
||||
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
|
||||
< .deps/$(*D)/$(*F).pp > .deps/$(*D)/$(*F).P; \
|
||||
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
|
||||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
||||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm -f .deps/$(*D)/$(*F).pp
|
||||
|
||||
libdrivers_a-3c90x.o: 3c90x.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
|
||||
|
@ -821,10 +801,10 @@ $(3c509_drivers): %.o: 3c509.c
|
|||
$(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
|
||||
$(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
|
||||
|
||||
$(3c59x_drivers): 3c59x.c 3c509.h
|
||||
$(3c59x_drivers): %.o: 3c59x.c
|
||||
$(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
|
||||
$(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
|
||||
#$(3c59x_drivers): 3c59x.c 3c509.h
|
||||
#$(3c59x_drivers): %.o: 3c59x.c
|
||||
# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
|
||||
# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
|
||||
|
||||
$(3c90x_drivers): 3c90x.c
|
||||
$(3c90x_drivers): %.o: 3c90x.c
|
||||
|
|
|
@ -160,6 +160,7 @@ fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
|
|||
|
||||
fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
|
||||
fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For ffs_stage1_5 target.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue