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>
|
2000-02-25 OKUJI Yoshinori <okuji@gnu.org>
|
||||||
|
|
||||||
* netboot/fsys_tftp.c (tftp_read): Set BUF_READ to zero if
|
* 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.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020.
|
||||||
.TH GRUB-INSTALL "8" "January 2000" "grub-install (GNU GRUB 0.5.94)" FSF
|
.TH GRUB-INSTALL "8" "February 2000" "grub-install (GNU GRUB 0.5.94)" FSF
|
||||||
.SH NAME
|
.SH NAME
|
||||||
grub-install \- install GRUB on your drive
|
grub-install \- install GRUB on your drive
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.016.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020.
|
||||||
.TH GRUB "8" "January 2000" "GNU GRUB 0.5.94" FSF
|
.TH GRUB "8" "February 2000" "GNU GRUB 0.5.94" FSF
|
||||||
.SH NAME
|
.SH NAME
|
||||||
GRUB \- the grub shell
|
GRUB \- the grub shell
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
187
docs/help2man
187
docs/help2man
|
@ -27,7 +27,7 @@ use Text::Tabs qw(expand);
|
||||||
use POSIX qw(strftime setlocale LC_TIME);
|
use POSIX qw(strftime setlocale LC_TIME);
|
||||||
|
|
||||||
my $this_program = 'help2man';
|
my $this_program = 'help2man';
|
||||||
my $this_version = '1.016';
|
my $this_version = '1.020';
|
||||||
my $version_info = <<EOT;
|
my $version_info = <<EOT;
|
||||||
$this_program $this_version
|
$this_program $this_version
|
||||||
|
|
||||||
|
@ -56,15 +56,15 @@ EXECUTABLE should accept `--help' and `--version' options.
|
||||||
EOT
|
EOT
|
||||||
|
|
||||||
my $section = 1;
|
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.
|
# Parse options.
|
||||||
Getopt::Long::config('bundling');
|
Getopt::Long::config('bundling');
|
||||||
GetOptions (
|
GetOptions (
|
||||||
'n|name=s' => \$opt_name,
|
'n|name=s' => \$opt_name,
|
||||||
's|section=s' => \$section,
|
's|section=s' => \$section,
|
||||||
'i|include=s' => \$include,
|
'i|include=s' => sub { push @opt_include, [ pop, 1 ] },
|
||||||
'I|opt-include=s' => \$opt_include,
|
'I|opt-include=s' => sub { push @opt_include, [ pop, 0 ] },
|
||||||
'o|output=s' => \$opt_output,
|
'o|output=s' => \$opt_output,
|
||||||
'N|no-info' => \$opt_no_info,
|
'N|no-info' => \$opt_no_info,
|
||||||
help => sub { print $help_info; exit },
|
help => sub { print $help_info; exit },
|
||||||
|
@ -74,50 +74,82 @@ GetOptions (
|
||||||
die $help_info unless @ARGV == 1;
|
die $help_info unless @ARGV == 1;
|
||||||
|
|
||||||
my %include = ();
|
my %include = ();
|
||||||
|
my %append = ();
|
||||||
my @include = (); # retain order given in include file
|
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:
|
# Process include file (if given). Format is:
|
||||||
#
|
#
|
||||||
# [section name]
|
# [section name]
|
||||||
# verbatim text
|
# 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;
|
# [section]
|
||||||
|
if (/^\[([^]]+)\]/)
|
||||||
while (<INC>)
|
|
||||||
{
|
{
|
||||||
if (/^\[([^]]+)\]/)
|
$key = uc $1;
|
||||||
{
|
$key =~ s/^\s+//;
|
||||||
$sect = uc $1;
|
$key =~ s/\s+$//;
|
||||||
$sect =~ s/^\s+//;
|
$hash = \%include;
|
||||||
$sect =~ s/\s+$//;
|
push @include, $key unless $include{$key};
|
||||||
next;
|
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} .= $_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
close INC;
|
# /pattern/
|
||||||
|
if (m!^/(.*)/([ims]*)!)
|
||||||
|
{
|
||||||
|
my $pat = $2 ? "(?$2)$1" : $1;
|
||||||
|
|
||||||
die "$this_program: no valid information found in `$include'\n"
|
# Check pattern.
|
||||||
unless %include;
|
eval { $key = qr($pat) };
|
||||||
|
if ($@)
|
||||||
|
{
|
||||||
|
$@ =~ s/ at .*? line \d.*//;
|
||||||
|
die "$inc:$.:$@";
|
||||||
|
}
|
||||||
|
|
||||||
# Compress trailing blank lines.
|
$hash = \%append;
|
||||||
for (keys %include) { $include{$_} =~ s/\n+$/\n/ }
|
next;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
# Silently ignore anything before the first
|
||||||
die "$this_program: can't open `$include' ($!)\n" if $include;
|
# 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.
|
# Turn off localisation of executable's ouput.
|
||||||
|
@ -127,11 +159,10 @@ if ($include or $opt_include)
|
||||||
setlocale LC_TIME, 'C';
|
setlocale LC_TIME, 'C';
|
||||||
|
|
||||||
# Grab help and version info from executable.
|
# Grab help and version info from executable.
|
||||||
my $help_text = join '', map { expand $_ } `$ARGV[0] --help 2>/dev/null`
|
my ($help_text, $version_text) = map {
|
||||||
or die "$this_program: can't get `--help' info from $ARGV[0]\n";
|
join '', map { s/ +$//; expand $_ } `$ARGV[0] --$_ 2>/dev/null`
|
||||||
|
or die "$this_program: can't get `--$_' info from $ARGV[0]\n"
|
||||||
my $version_text = join '', map { expand $_ } `$ARGV[0] --version 2>/dev/null`
|
} qw(help version);
|
||||||
or die "$this_program: can't get `--version' info from $ARGV[0]\n";
|
|
||||||
|
|
||||||
my $date = strftime "%B %Y", localtime;
|
my $date = strftime "%B %Y", localtime;
|
||||||
(my $program = $ARGV[0]) =~ s!.*/!!;
|
(my $program = $ARGV[0]) =~ s!.*/!!;
|
||||||
|
@ -194,20 +225,22 @@ $include{NAME} ||= "$program \\- manual page for $program $version\n";
|
||||||
my $PROGRAM = uc $program;
|
my $PROGRAM = uc $program;
|
||||||
|
|
||||||
# Extract usage clause(s) [if any] for SYNOPSIS.
|
# 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 = '';
|
my $synopsis = '';
|
||||||
for (@syn)
|
for (@syn)
|
||||||
{
|
{
|
||||||
$synopsis .= ".br\n" if $synopsis;
|
$synopsis .= ".br\n" if $synopsis;
|
||||||
s/(\S+) *//;
|
s!^\S*/!!;
|
||||||
|
s/^(\S+) *//;
|
||||||
$synopsis .= ".B $1\n";
|
$synopsis .= ".B $1\n";
|
||||||
s/\s+$//;
|
s/\s+$//;
|
||||||
s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
|
s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
|
||||||
|
@ -238,6 +271,9 @@ s/\n\n+/\n\n/g;
|
||||||
s/^\./\x80/mg;
|
s/^\./\x80/mg;
|
||||||
s/\\/\x81/g;
|
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;
|
sub convert_option;
|
||||||
|
|
||||||
while (length)
|
while (length)
|
||||||
|
@ -250,7 +286,7 @@ while (length)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Copyright section
|
# Copyright section
|
||||||
if (/^Copyright [\(\xa9]/)
|
if (/^Copyright +[(\xa9]/)
|
||||||
{
|
{
|
||||||
$sect = 'COPYRIGHT';
|
$sect = 'COPYRIGHT';
|
||||||
$include{$sect} ||= '';
|
$include{$sect} ||= '';
|
||||||
|
@ -266,11 +302,11 @@ while (length)
|
||||||
|
|
||||||
# Convert iso9959-1 copyright symbol or (c) to nroff
|
# Convert iso9959-1 copyright symbol or (c) to nroff
|
||||||
# character.
|
# character.
|
||||||
s/^Copyright (?:\xa9|\([Cc]\))/Copyright \\(co/mg;
|
s/^Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/mg;
|
||||||
|
|
||||||
# Insert line breaks before additional copyright messages
|
# Insert line breaks before additional copyright messages
|
||||||
# and the disclaimer.
|
# 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.
|
# Join hyphenated lines.
|
||||||
s/([A-Za-z])-\n */$1/g;
|
s/([A-Za-z])-\n */$1/g;
|
||||||
|
@ -282,7 +318,7 @@ while (length)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Catch bug report text.
|
# Catch bug report text.
|
||||||
if (/^(Report bugs|Email bug reports to) /)
|
if (/^(Report +bugs|Email +bug +reports +to) /)
|
||||||
{
|
{
|
||||||
$sect = 'REPORTING BUGS';
|
$sect = 'REPORTING BUGS';
|
||||||
}
|
}
|
||||||
|
@ -310,34 +346,44 @@ while (length)
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $matched = '';
|
||||||
$include{$sect} ||= '';
|
$include{$sect} ||= '';
|
||||||
|
|
||||||
# Sub-sections have a trailing colon and the second line indented.
|
# Sub-sections have a trailing colon and the second line indented.
|
||||||
if (s/^(\S.*:) *\n / /)
|
if (s/^(\S.*:) *\n / /)
|
||||||
{
|
{
|
||||||
|
$matched .= $& if %append;
|
||||||
$include{$sect} .= qq(.SS "$1"\n);
|
$include{$sect} .= qq(.SS "$1"\n);
|
||||||
}
|
}
|
||||||
|
|
||||||
my $indent = 0;
|
my $indent = 0;
|
||||||
my $content = '';
|
my $content = '';
|
||||||
|
|
||||||
# Tagged paragraph (option).
|
# Option with description.
|
||||||
if (s/^( {1,10}(-\S+(?:, *-\S+)*))(?: +|\n( {20,}))([^\s-].*)\n//)
|
if (s/^( {1,10}([+-]\S.*?))(?:( +)|\n( {20,}))(\S.*)\n//)
|
||||||
{
|
{
|
||||||
$indent = length ($3 || $1);
|
$matched .= $& if %append;
|
||||||
my $tag = $2;
|
$indent = length ($4 || "$1$3");
|
||||||
my $desc = $4;
|
$content = ".TP\n\x82$2\n\x82$5\n";
|
||||||
unless ($3)
|
unless ($4)
|
||||||
{
|
{
|
||||||
$indent = length $1;
|
# Indent may be different on second line.
|
||||||
$indent = length $1 if /^( {20,})[^\s-]/;
|
$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//)
|
elsif (s/^( +(\S.*?) +)(\S.*)\n//)
|
||||||
{
|
{
|
||||||
|
$matched .= $& if %append;
|
||||||
$indent = length $1;
|
$indent = length $1;
|
||||||
$content = ".TP\n\x82$2\n\x82$3\n";
|
$content = ".TP\n\x82$2\n\x82$3\n";
|
||||||
}
|
}
|
||||||
|
@ -345,6 +391,7 @@ while (length)
|
||||||
# Indented paragraph.
|
# Indented paragraph.
|
||||||
elsif (s/^( +)(\S.*)\n//)
|
elsif (s/^( +)(\S.*)\n//)
|
||||||
{
|
{
|
||||||
|
$matched .= $& if %append;
|
||||||
$indent = length $1;
|
$indent = length $1;
|
||||||
$content = ".IP\n\x82$2\n";
|
$content = ".IP\n\x82$2\n";
|
||||||
}
|
}
|
||||||
|
@ -353,12 +400,17 @@ while (length)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s/(.*)\n//;
|
s/(.*)\n//;
|
||||||
|
$matched .= $& if %append;
|
||||||
$content = ".PP\n" if $include{$sect};
|
$content = ".PP\n" if $include{$sect};
|
||||||
$content .= "$1\n";
|
$content .= "$1\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
# Append continuations.
|
# 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.
|
# Move to next paragraph.
|
||||||
s/^\n+//;
|
s/^\n+//;
|
||||||
|
@ -373,6 +425,19 @@ while (length)
|
||||||
s/(^| )(-[][\w=-]+)/$1 . convert_option $2/mge;
|
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;
|
$include{$sect} .= $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.016.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.020.
|
||||||
.TH MBCHK "1" "January 2000" "mbchk (GNU GRUB 0.5.94)" FSF
|
.TH MBCHK "1" "February 2000" "mbchk (GNU GRUB 0.5.94)" FSF
|
||||||
.SH NAME
|
.SH NAME
|
||||||
mbchk \- check the format of a Multiboot kernel
|
mbchk \- check the format of a Multiboot kernel
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
|
@ -19,7 +19,8 @@ module /boot/serverboot.gz
|
||||||
|
|
||||||
# For booting Linux
|
# For booting Linux
|
||||||
title GNU/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)
|
# For booting Mach (getting kernel from floppy)
|
||||||
title Utah Mach4 multiboot
|
title Utah Mach4 multiboot
|
||||||
|
@ -28,10 +29,10 @@ pause Insert the diskette now!!
|
||||||
kernel (fd0)/boot/kernel root=hd0s3
|
kernel (fd0)/boot/kernel root=hd0s3
|
||||||
module (fd0)/boot/bootstrap
|
module (fd0)/boot/bootstrap
|
||||||
|
|
||||||
# For booting FreeBSD (getting kernel from floppy)
|
# For booting FreeBSD
|
||||||
title FreeBSD
|
title FreeBSD 3.4
|
||||||
root (hd0,2,a)
|
root (hd0,2,a)
|
||||||
kernel (fd0)/kernel
|
kernel /boot/loader
|
||||||
|
|
||||||
# For booting OS/2
|
# For booting OS/2
|
||||||
title OS/2
|
title OS/2
|
||||||
|
@ -44,9 +45,9 @@ chainloader +1
|
||||||
|
|
||||||
# For booting Windows NT or Windows95
|
# For booting Windows NT or Windows95
|
||||||
title Windows NT / Windows 95 boot menu
|
title Windows NT / Windows 95 boot menu
|
||||||
root (hd0,0)
|
rootnoverify (hd0,0)
|
||||||
makeactive
|
makeactive
|
||||||
chainloader +1
|
chainloader +1
|
||||||
# For loading DOS if Windows NT is installed
|
# For loading DOS if Windows NT is installed
|
||||||
# chainload /bootsect.dos
|
# chainload /bootsect.dos
|
||||||
|
|
||||||
|
|
|
@ -143,9 +143,11 @@ on the floppy.
|
||||||
It is easy to create a GRUB boot floppy. Just follow this below:
|
It is easy to create a GRUB boot floppy. Just follow this below:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
|
@group
|
||||||
# cd /boot/grub
|
# cd /boot/grub
|
||||||
# dd if=stage1 of=/dev/fd0 bs=512 count=1
|
# dd if=stage1 of=/dev/fd0 bs=512 count=1
|
||||||
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
|
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
|
||||||
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
The device filename may be different. Consult the manual for your OS.
|
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.
|
magic.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Booting a Multiboot-compliant OS::
|
* General boot methods::
|
||||||
* Booting GNU/Hurd::
|
* OS-specific notes::
|
||||||
* Booting GNU/Linux::
|
@end menu
|
||||||
* Booting FreeBSD::
|
|
||||||
* Booting NetBSD::
|
|
||||||
* Booting OpenBSD::
|
@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::
|
* Chain-loading::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
@node Booting a Multiboot-compliant OS
|
@node Loading an operating system directly
|
||||||
@section Booting a Multiboot-compliant OS
|
@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
|
Generally, GRUB can boot any Multiboot-compliant OS in the following
|
||||||
steps:
|
steps:
|
||||||
|
@ -242,22 +263,83 @@ steps:
|
||||||
@enumerate
|
@enumerate
|
||||||
@item
|
@item
|
||||||
Set GRUB's root device to the drive where the OS images are stored by
|
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
|
@item
|
||||||
Load the kernel image by the command @command{kernel} (@pxref{Command}).
|
Load the kernel image by the command @command{kernel}.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
Load the modules by the command @command{module} or
|
Load the modules by the command @command{module} or
|
||||||
@command{modulenounzip} as you need (@pxref{Command}).
|
@command{modulenounzip} as you need.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
Run the command @command{boot} (@pxref{Command}).
|
Run the command @command{boot}.
|
||||||
@end enumerate
|
@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
|
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
|
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:
|
Second, load the kernel and the module, like this:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
|
@group
|
||||||
grub> kernel /boot/gnumach root=hd0s1
|
grub> kernel /boot/gnumach root=hd0s1
|
||||||
grub> module /boot/serverboot
|
grub> module /boot/serverboot
|
||||||
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
And, finally, run the command @command{boot}.
|
And, finally, run the command @command{boot}.
|
||||||
|
|
||||||
|
|
||||||
@node Booting GNU/Linux
|
@node GNU/Linux
|
||||||
@section Booting GNU/Linux
|
@subsection GNU/Linux
|
||||||
|
|
||||||
It is relatively easy to boot GNU/Linux from GRUB, because booting
|
It is relatively easy to boot GNU/Linux from GRUB, because booting
|
||||||
GNU/Linux somewhat resembles booting a Multiboot-compliant OS
|
GNU/Linux somewhat resembles booting a Multiboot-compliant OS.
|
||||||
(@pxref{Booting a Multiboot-compliant OS}).
|
|
||||||
|
|
||||||
First, set GRUB's root device to the same drive as
|
First, set GRUB's root device to the same drive as
|
||||||
GNU/Linux's. Probably @code{find /vmlinuz} or such will help
|
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}.
|
And, finally, run the command @command{boot}.
|
||||||
|
|
||||||
|
|
||||||
@node Booting FreeBSD
|
@node FreeBSD
|
||||||
@section Booting FreeBSD
|
@subsection FreeBSD
|
||||||
|
|
||||||
@c Probably we should fix the boot parameters before writing this
|
GRUB can directly load both kernel formats, ELF and a.out, but this is
|
||||||
@c section.
|
deprecated, since FreeBSD's bootstrap interface is sometimes changed
|
||||||
FIXME
|
heavily and so GRUB can't guarantee to pass kernel parameters
|
||||||
|
correctly.
|
||||||
|
|
||||||
|
Thus, we'd recommend loading the very flexible loader
|
||||||
@node Booting NetBSD
|
@file{/boot/loader} instead. See this example:
|
||||||
@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}:
|
|
||||||
|
|
||||||
@example
|
@example
|
||||||
grub> rootnoverify (hd0,0)
|
@group
|
||||||
|
grub> root (hd0,a)
|
||||||
|
grub> kernel /boot/loader
|
||||||
|
grub> boot
|
||||||
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
Second, set the @dfn{active} flag in the partition by the command
|
|
||||||
@command{makeactive}:
|
|
||||||
|
|
||||||
@example
|
@node NetBSD
|
||||||
grub> makeactive
|
@subsection NetBSD
|
||||||
@end example
|
|
||||||
|
|
||||||
Third, load the boot loader by the command @command{chainloader}:
|
GRUB can load NetBSD a.out directly, by the following steps:
|
||||||
|
|
||||||
@example
|
@enumerate
|
||||||
grub> chainloader +1
|
@item
|
||||||
@end example
|
Set GRUB's root device by @command{root}.
|
||||||
|
|
||||||
Do not care about what @samp{+1} is. We describe it later in
|
@item
|
||||||
@ref{Filesystem}. If this succeeds, run the command @command{boot}.
|
Load the kernel by @command{kernel}.
|
||||||
|
|
||||||
@strong{Caution:} Some boot loaders (such as the one in SCO Unixware
|
@item
|
||||||
7.1) are defective in the signature, so you will have to specify the
|
Run @command{boot}.
|
||||||
option @option{--force} to @command{chainloader} for them. The option
|
@end enumerate
|
||||||
might seem to solve your problem, but we strongly recommend reporting
|
|
||||||
the bug to the maintainer.
|
|
||||||
|
|
||||||
However, some tricks will be necessary if you have installed DOS or
|
For now, however, GRUB doesn't allow you to pass kernel parameters, so
|
||||||
Windows on a non-first hard disk, because they cannot boot any disks
|
it may be better to chain-load it instead. @xref{Chain-loading}, for
|
||||||
except for the first one. The solution is to use the command
|
more information.
|
||||||
@command{map} (@pxref{Command}), like this:
|
|
||||||
|
|
||||||
|
@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
|
@example
|
||||||
@group
|
@group
|
||||||
|
@ -385,8 +464,51 @@ grub> map (hd1) (hd0)
|
||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
This performs the @dfn{logical} exchange between your first disk and
|
This performs the @dfn{virtual} exchange between the two disks.
|
||||||
your second one.
|
|
||||||
|
@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
|
@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 \
|
main.c misc.c netboot_config.h netdevice.h nic.h osdep.h \
|
||||||
pci.c pci.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 \
|
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 \
|
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
|
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?
|
# What objects are derived from a driver?
|
||||||
3c509_drivers = 3c509.o 3c529.o
|
3c509_drivers = 3c509.o 3c529.o
|
||||||
3c59x_drivers = 3c59x.o
|
#3c59x_drivers = 3c59x.o
|
||||||
3c90x_drivers = 3c90x.o
|
3c90x_drivers = 3c90x.o
|
||||||
cs89x0_drivers = cs89x0.o
|
cs89x0_drivers = cs89x0.o
|
||||||
eepro100_drivers = eepro100.o
|
eepro100_drivers = eepro100.o
|
||||||
|
@ -134,7 +134,7 @@ via_rhine_drivers = via_rhine.o
|
||||||
# Per-object flags.
|
# Per-object flags.
|
||||||
3c509_o_CFLAGS = -DINCLUDE_3C509=1
|
3c509_o_CFLAGS = -DINCLUDE_3C509=1
|
||||||
3c529_o_CFLAGS = -DINCLUDE_3C529=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
|
3c90x_o_CFLAGS = -DINCLUDE_3C90X=1
|
||||||
cs89x0_o_CFLAGS = -DINCLUDE_CS89X0=1
|
cs89x0_o_CFLAGS = -DINCLUDE_CS89X0=1
|
||||||
eepro100_o_CFLAGS = -DINCLUDE_EEPRO100=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)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
DEP_FILES = .deps/3c509.P .deps/3c59x.P .deps/3c90x.P .deps/config.P \
|
DEP_FILES = .deps/3c509.P .deps/3c90x.P .deps/config.P .deps/cs89x0.P \
|
||||||
.deps/cs89x0.P .deps/eepro100.P .deps/epic100.P .deps/fsys_tftp.P \
|
.deps/eepro100.P .deps/epic100.P .deps/fsys_tftp.P .deps/i82586.P \
|
||||||
.deps/i82586.P .deps/lance.P .deps/main.P .deps/misc.P .deps/ns8390.P \
|
.deps/lance.P .deps/main.P .deps/misc.P .deps/ns8390.P .deps/ntulip.P \
|
||||||
.deps/ntulip.P .deps/pci.P .deps/rtl8139.P .deps/sk_g16.P \
|
.deps/pci.P .deps/rtl8139.P .deps/sk_g16.P .deps/smc9000.P \
|
||||||
.deps/smc9000.P .deps/tiara.P .deps/tulip.P .deps/via-rhine.P
|
.deps/tiara.P .deps/tulip.P .deps/via-rhine.P
|
||||||
SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES)
|
SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES)
|
||||||
OBJECTS = $(am_libdrivers_a_OBJECTS)
|
OBJECTS = $(am_libdrivers_a_OBJECTS)
|
||||||
|
|
||||||
|
@ -227,7 +227,6 @@ libdrivers_a-main.o: main.c
|
||||||
libdrivers_a-misc.o: misc.c
|
libdrivers_a-misc.o: misc.c
|
||||||
libdrivers_a-pci.o: pci.c
|
libdrivers_a-pci.o: pci.c
|
||||||
libdrivers_a-3c509.o: 3c509.c
|
libdrivers_a-3c509.o: 3c509.c
|
||||||
libdrivers_a-3c59x.o: 3c59x.c
|
|
||||||
libdrivers_a-3c90x.o: 3c90x.c
|
libdrivers_a-3c90x.o: 3c90x.c
|
||||||
libdrivers_a-cs89x0.o: cs89x0.c
|
libdrivers_a-cs89x0.o: cs89x0.c
|
||||||
libdrivers_a-eepro100.o: eepro100.c
|
libdrivers_a-eepro100.o: eepro100.c
|
||||||
|
@ -448,25 +447,6 @@ libdrivers_a-3c509.lo: 3c509.c
|
||||||
>> .deps/$(*D)/$(*F).P; \
|
>> .deps/$(*D)/$(*F).P; \
|
||||||
rm -f .deps/$(*D)/$(*F).pp
|
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
|
libdrivers_a-3c90x.o: 3c90x.c
|
||||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
@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 $@ $<
|
$(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 \
|
$(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
|
||||||
$(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
|
$(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
$(3c59x_drivers): 3c59x.c 3c509.h
|
#$(3c59x_drivers): 3c59x.c 3c509.h
|
||||||
$(3c59x_drivers): %.o: 3c59x.c
|
#$(3c59x_drivers): %.o: 3c59x.c
|
||||||
$(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
|
# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
|
||||||
$(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
|
# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
$(3c90x_drivers): 3c90x.c
|
$(3c90x_drivers): 3c90x.c
|
||||||
$(3c90x_drivers): %.o: 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 \
|
fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
|
||||||
-DNO_BLOCK_FILES=1
|
-DNO_BLOCK_FILES=1
|
||||||
|
|
||||||
fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||||
|
|
||||||
# For ffs_stage1_5 target.
|
# For ffs_stage1_5 target.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue