add minix fs support. use the name "the grub shell" instead of "the stage2 emulator".
This commit is contained in:
parent
29286d8365
commit
434d8607cc
20 changed files with 899 additions and 108 deletions
32
ChangeLog
32
ChangeLog
|
@ -1,3 +1,35 @@
|
|||
1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||
|
||||
* docs/Makefile.am [GRUB_MAINT] (grub.8): The argument for the
|
||||
option --name is changed to "the grub shell".
|
||||
* docs/grub.8: Regenerated.
|
||||
* docs/grub.texi: Do not use the name "the Stage 2 emulator" any
|
||||
more. Use the name "the grub shell" instead.
|
||||
|
||||
1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||
|
||||
From Klaus Reichl <klaus.reichl@alcatel.at>:
|
||||
* stage2/fsys_minix.c: New file.
|
||||
* stage2/size_test: Added a check for the size of minix_stage1_5.
|
||||
* stage2/Makefile.am (libgrub_a_SOURCES): Added fsys_minix.c.
|
||||
(libgrub_a_CFLAGS): Added -DFSYS_MINIX=1.
|
||||
(nodist_pkgdata_DATA): Added minix_stage1_5.
|
||||
(noinst_PROGRAMS): Added minix_stage1_5.exec.
|
||||
(stage2_exec_SOURCES): Added fsys_minix.c.
|
||||
(minix_stage1_5_exec_SOURCES): New variable.
|
||||
(minix_stage1_5_exec_CFLAGS): Likewise.
|
||||
(minix_stage1_5_exec_LDFLAGS): Likewise.
|
||||
* stage2/pc_slice.h (PC_SLICE_TYPE_MINIX): New macro.
|
||||
* stage2/disk_io.c (fsys_table) [FSYS_MINIX]: Added minix entry.
|
||||
* stage2/filesys.h [FSYS_MINIX] (FSYS_MINIX_NUM): Set to 1.
|
||||
[!FSYS_MINIX] (FSYS_MINIX_NUM): Set to 0.
|
||||
[!NUM_FSYS] (NUM_FSYS): Added FSYS_MINIX_NUM.
|
||||
* stage2/shared.h (STAGE2_ID_MINIX_STAGE1_5): New macro.
|
||||
[STAGE1_5 && FSYS_MINIX] (STAGE2_ID): Set to
|
||||
STAGE2_ID_MINIX_STAGE1_5.
|
||||
* grub/Makefile.am (AM_CFLAGS): Added -DFSYS_MINIX=1.
|
||||
* configure.in (--disable-minix): New option.
|
||||
|
||||
1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||
|
||||
From Jochen Hoenicke <jochen@gnu.org>:
|
||||
|
|
3
NEWS
3
NEWS
|
@ -3,10 +3,11 @@ NEWS - list of user-visible changes between releases of GRUB
|
|||
New in 0.5.93:
|
||||
* ELF format of FreeBSD kernel is supported.
|
||||
* Support the partition ids for NetBSD and OpenBSD.
|
||||
* Exit from the grub emulator just by pushing the key `q' in the menu.
|
||||
* Exit from the grub shell just by pushing the key `q' in the menu.
|
||||
* The options --disable-ext2fs, --disable-fat and --disable-ffs disable
|
||||
ext2fs, FAT and FFS support in Stage 2 respectively.
|
||||
* FAT32 support is added.
|
||||
* Minix fs support is added.
|
||||
|
||||
New in 0.5.92 - 1999-07-26:
|
||||
* Bug fixes (i.e. Stage 1.5 can work fine again).
|
||||
|
|
4
README
4
README
|
@ -4,8 +4,8 @@ personal computer BIOSes:
|
|||
|
||||
- provides fully-featured command line and graphical interfaces
|
||||
- recognizes fdisk partitions and BSD disklabels
|
||||
- can dynamically read Linux ext2fs, BSD ufs, and MS-DOS FAT
|
||||
filesystems, plus hardcoded blocklists
|
||||
- can dynamically read Linux ext2fs, BSD ufs, MS-DOS FAT16 and FAT32,
|
||||
and Minix fs filesystems, plus hardcoded blocklists
|
||||
- can boot Multiboot-compliant kernels (such as GNU Mach), as well
|
||||
as standard Linux and BSD kernels
|
||||
|
||||
|
|
2
TODO
2
TODO
|
@ -33,7 +33,7 @@ Add keyboard layout configuration support.
|
|||
|
||||
Clean up and enhance the manuals, especially concept indexes.
|
||||
|
||||
Add more filesystems support (minix, NTFS, etc.)
|
||||
Add more filesystems support (XFS, NTFS, etc.)
|
||||
|
||||
??? Add hide and unhide facilities.
|
||||
|
||||
|
|
125
configure
vendored
125
configure
vendored
|
@ -20,6 +20,8 @@ ac_help="$ac_help
|
|||
--disable-fat disable FAT support in Stage 2"
|
||||
ac_help="$ac_help
|
||||
--disable-ffs disable FFS support in Stage 2"
|
||||
ac_help="$ac_help
|
||||
--disable-minix disable Minix fs support in Stage 2"
|
||||
|
||||
# Initialize some variables set by options.
|
||||
# The variables have the same names as the options, with
|
||||
|
@ -561,7 +563,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
|
|||
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
||||
# ./install, which can be erroneously created by make from ./install.sh.
|
||||
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
||||
echo "configure:565: checking for a BSD compatible install" >&5
|
||||
echo "configure:567: checking for a BSD compatible install" >&5
|
||||
if test -z "$INSTALL"; then
|
||||
if eval "test \"\${ac_cv_path_install+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
|
@ -618,7 +620,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
|
|||
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
|
||||
|
||||
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
|
||||
echo "configure:622: checking whether build environment is sane" >&5
|
||||
echo "configure:624: checking whether build environment is sane" >&5
|
||||
# Just in case
|
||||
sleep 1
|
||||
echo timestamp > conftestfile
|
||||
|
@ -679,7 +681,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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:683: checking for $ac_word" >&5
|
||||
echo "configure:685: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_AWK+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -709,7 +711,7 @@ test -n "$AWK" && break
|
|||
done
|
||||
|
||||
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
|
||||
echo "configure:713: checking whether ${MAKE-make} sets \${MAKE}" >&5
|
||||
echo "configure:715: checking whether ${MAKE-make} sets \${MAKE}" >&5
|
||||
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
|
||||
if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
|
@ -758,7 +760,7 @@ EOF
|
|||
|
||||
missing_dir=`cd $ac_aux_dir && pwd`
|
||||
echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
|
||||
echo "configure:762: checking for working aclocal" >&5
|
||||
echo "configure:764: checking for working aclocal" >&5
|
||||
# Run test in a subshell; some versions of sh will print an error if
|
||||
# an executable is not found, even if stderr is redirected.
|
||||
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||
|
@ -771,7 +773,7 @@ else
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
|
||||
echo "configure:775: checking for working autoconf" >&5
|
||||
echo "configure:777: checking for working autoconf" >&5
|
||||
# Run test in a subshell; some versions of sh will print an error if
|
||||
# an executable is not found, even if stderr is redirected.
|
||||
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||
|
@ -784,7 +786,7 @@ else
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for working automake""... $ac_c" 1>&6
|
||||
echo "configure:788: checking for working automake" >&5
|
||||
echo "configure:790: checking for working automake" >&5
|
||||
# Run test in a subshell; some versions of sh will print an error if
|
||||
# an executable is not found, even if stderr is redirected.
|
||||
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||
|
@ -797,7 +799,7 @@ else
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
|
||||
echo "configure:801: checking for working autoheader" >&5
|
||||
echo "configure:803: checking for working autoheader" >&5
|
||||
# Run test in a subshell; some versions of sh will print an error if
|
||||
# an executable is not found, even if stderr is redirected.
|
||||
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||
|
@ -810,7 +812,7 @@ else
|
|||
fi
|
||||
|
||||
echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
|
||||
echo "configure:814: checking for working makeinfo" >&5
|
||||
echo "configure:816: checking for working makeinfo" >&5
|
||||
# Run test in a subshell; some versions of sh will print an error if
|
||||
# an executable is not found, even if stderr is redirected.
|
||||
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||
|
@ -830,7 +832,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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:834: checking for $ac_word" >&5
|
||||
echo "configure:836: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_AMTAR+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -871,7 +873,7 @@ fi
|
|||
|
||||
|
||||
echo $ac_n "checking host system type""... $ac_c" 1>&6
|
||||
echo "configure:875: checking host system type" >&5
|
||||
echo "configure:877: checking host system type" >&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.
|
||||
|
@ -956,7 +958,7 @@ fi
|
|||
|
||||
|
||||
echo $ac_n "checking build system type""... $ac_c" 1>&6
|
||||
echo "configure:960: checking build system type" >&5
|
||||
echo "configure:962: checking build system type" >&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.
|
||||
|
@ -1003,7 +1005,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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1007: checking for $ac_word" >&5
|
||||
echo "configure:1009: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1035,7 +1037,7 @@ fi
|
|||
# Extract the first word of "gcc", so it can be a program name with args.
|
||||
set dummy gcc; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1039: checking for $ac_word" >&5
|
||||
echo "configure:1041: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1065,7 +1067,7 @@ if test -z "$CC"; then
|
|||
# Extract the first word of "cc", so it can be a program name with args.
|
||||
set dummy cc; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1069: checking for $ac_word" >&5
|
||||
echo "configure:1071: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1116,7 +1118,7 @@ fi
|
|||
# Extract the first word of "cl", so it can be a program name with args.
|
||||
set dummy cl; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1120: checking for $ac_word" >&5
|
||||
echo "configure:1122: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1148,7 +1150,7 @@ fi
|
|||
fi
|
||||
|
||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works""... $ac_c" 1>&6
|
||||
echo "configure:1152: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works" >&5
|
||||
echo "configure:1154: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works" >&5
|
||||
|
||||
ac_ext=c
|
||||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||||
|
@ -1159,12 +1161,12 @@ cross_compiling=$ac_cv_prog_cc_cross
|
|||
|
||||
cat > conftest.$ac_ext << EOF
|
||||
|
||||
#line 1163 "configure"
|
||||
#line 1165 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
main(){return(0);}
|
||||
EOF
|
||||
if { (eval echo configure:1168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:1170: \"$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
|
||||
|
@ -1190,12 +1192,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 1; }
|
||||
fi
|
||||
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
|
||||
echo "configure:1194: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||||
echo "configure:1196: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler" >&5
|
||||
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
|
||||
cross_compiling=$ac_cv_prog_cc_cross
|
||||
|
||||
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
||||
echo "configure:1199: checking whether we are using GNU C" >&5
|
||||
echo "configure:1201: checking whether we are using GNU C" >&5
|
||||
if eval "test \"\${ac_cv_prog_gcc+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1204,7 +1206,7 @@ else
|
|||
yes;
|
||||
#endif
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1208: \"$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:1210: \"$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
|
||||
|
@ -1223,7 +1225,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
|
|||
ac_save_CFLAGS="$CFLAGS"
|
||||
CFLAGS=
|
||||
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
||||
echo "configure:1227: checking whether ${CC-cc} accepts -g" >&5
|
||||
echo "configure:1229: checking whether ${CC-cc} accepts -g" >&5
|
||||
if eval "test \"\${ac_cv_prog_cc_g+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1257,7 +1259,7 @@ fi
|
|||
# Extract the first word of "ranlib", so it can be a program name with args.
|
||||
set dummy ranlib; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1261: checking for $ac_word" >&5
|
||||
echo "configure:1263: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_RANLIB+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1292,7 +1294,7 @@ if test "x$ac_cv_prog_gcc" = xyes; then
|
|||
STAGE1_CFLAGS="-O2"
|
||||
GRUB_CFLAGS="-O2"
|
||||
echo $ac_n "checking whether optimization for size works""... $ac_c" 1>&6
|
||||
echo "configure:1296: checking whether optimization for size works" >&5
|
||||
echo "configure:1298: checking whether optimization for size works" >&5
|
||||
if eval "test \"\${size_flag+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1300,14 +1302,14 @@ else
|
|||
saved_CFLAGS=$CFLAGS
|
||||
CFLAGS="-Os -g"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1304 "configure"
|
||||
#line 1306 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() {
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:1311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:1313: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
size_flag=yes
|
||||
else
|
||||
|
@ -1340,7 +1342,7 @@ CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused"
|
|||
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
|
||||
set dummy ${ac_tool_prefix}ld; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1344: checking for $ac_word" >&5
|
||||
echo "configure:1346: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_LD+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1372,7 +1374,7 @@ fi
|
|||
# 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:1376: checking for $ac_word" >&5
|
||||
echo "configure:1378: checking for $ac_word" >&5
|
||||
if eval "test \"\${ac_cv_prog_OBJCOPY+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1405,7 +1407,7 @@ fi
|
|||
# Defined in acinclude.m4.
|
||||
|
||||
echo $ac_n "checking symbol names produced by ${CC-cc}""... $ac_c" 1>&6
|
||||
echo "configure:1409: checking symbol names produced by ${CC-cc}" >&5
|
||||
echo "configure:1411: checking symbol names produced by ${CC-cc}" >&5
|
||||
if eval "test \"\${grub_cv_asm_ext_c+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1418,7 +1420,7 @@ func (int *list)
|
|||
}
|
||||
EOF
|
||||
|
||||
if { ac_try='${CC-cc} -S conftest.c'; { (eval echo configure:1422: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.s; then :
|
||||
if { ac_try='${CC-cc} -S conftest.c'; { (eval echo configure:1424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.s; then :
|
||||
else
|
||||
{ echo "configure: error: ${CC-cc} failed to produce assembly code" 1>&2; exit 1; }
|
||||
fi
|
||||
|
@ -1447,7 +1449,7 @@ EOF
|
|||
|
||||
|
||||
echo $ac_n "checking whether ${OBJCOPY} works for absolute addresses""... $ac_c" 1>&6
|
||||
echo "configure:1451: checking whether ${OBJCOPY} works for absolute addresses" >&5
|
||||
echo "configure:1453: checking whether ${OBJCOPY} works for absolute addresses" >&5
|
||||
if eval "test \"\${grub_cv_prog_objcopy_absolute+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1459,21 +1461,21 @@ blah (void)
|
|||
}
|
||||
EOF
|
||||
|
||||
if { (eval echo configure:1463: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then :
|
||||
if { (eval echo configure:1465: \"$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='${LD-ld} -N -Ttext $link_addr conftest.o -o conftest.exec'; { (eval echo configure:1469: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
|
||||
if { ac_try='${LD-ld} -N -Ttext $link_addr conftest.o -o conftest.exec'; { (eval echo configure:1471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
|
||||
else
|
||||
{ echo "configure: error: ${LD-ld} cannot link at address $link_addr" 1>&2; exit 1; }
|
||||
fi
|
||||
if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest'; { (eval echo configure:1473: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then :
|
||||
if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest'; { (eval echo configure:1475: \"$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:1477: \"$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:1479: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||
mv -f conftest conftest.old
|
||||
else
|
||||
grub_cv_prog_objcopy_absolute=no
|
||||
|
@ -1490,7 +1492,7 @@ fi
|
|||
|
||||
|
||||
echo $ac_n "checking for .code16 addr32 assembler support""... $ac_c" 1>&6
|
||||
echo "configure:1494: checking for .code16 addr32 assembler support" >&5
|
||||
echo "configure:1496: checking for .code16 addr32 assembler support" >&5
|
||||
if eval "test \"\${grub_cv_asm_addr32+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1500,7 +1502,7 @@ l1: addr32
|
|||
movb %al, l1
|
||||
EOF
|
||||
|
||||
if { ac_try='${CC-cc} -c conftest.s'; { (eval echo configure:1504: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then
|
||||
if { ac_try='${CC-cc} -c conftest.s'; { (eval echo configure:1506: \"$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
|
||||
|
@ -1515,7 +1517,7 @@ fi
|
|||
|
||||
|
||||
echo $ac_n "checking whether addr32 must be in the same line as the instruction""... $ac_c" 1>&6
|
||||
echo "configure:1519: checking whether addr32 must be in the same line as the instruction" >&5
|
||||
echo "configure:1521: checking whether addr32 must be in the same line as the instruction" >&5
|
||||
if eval "test \"\${grub_cv_asm_prefix_requirement+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
@ -1524,7 +1526,7 @@ else
|
|||
l1: addr32 movb %al, l1
|
||||
EOF
|
||||
|
||||
if { ac_try='${CC-cc} -c conftest.s'; { (eval echo configure:1528: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } && test -s conftest.o; then
|
||||
if { ac_try='${CC-cc} -c conftest.s'; { (eval echo configure:1530: \"$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
|
||||
|
@ -1555,7 +1557,7 @@ fi
|
|||
|
||||
# Check for curses libraries.
|
||||
echo $ac_n "checking for getch in -lncurses""... $ac_c" 1>&6
|
||||
echo "configure:1559: checking for getch in -lncurses" >&5
|
||||
echo "configure:1561: checking for getch in -lncurses" >&5
|
||||
ac_lib_var=`echo ncurses'_'getch | sed 'y%./+-:%__p__%'`
|
||||
if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
|
@ -1563,7 +1565,7 @@ else
|
|||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-lncurses $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1567 "configure"
|
||||
#line 1569 "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
|
||||
|
@ -1574,7 +1576,7 @@ int main() {
|
|||
getch()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:1578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:1580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
|
@ -1597,7 +1599,7 @@ EOF
|
|||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
echo $ac_n "checking for getch in -lcurses""... $ac_c" 1>&6
|
||||
echo "configure:1601: checking for getch in -lcurses" >&5
|
||||
echo "configure:1603: checking for getch in -lcurses" >&5
|
||||
ac_lib_var=`echo curses'_'getch | sed 'y%./+-:%__p__%'`
|
||||
if eval "test \"\${ac_cv_lib_$ac_lib_var+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
|
@ -1605,7 +1607,7 @@ else
|
|||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-lcurses $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1609 "configure"
|
||||
#line 1611 "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
|
||||
|
@ -1616,7 +1618,7 @@ int main() {
|
|||
getch()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:1620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:1622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
|
@ -1646,7 +1648,7 @@ fi
|
|||
|
||||
# Check for headers.
|
||||
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
||||
echo "configure:1650: checking how to run the C preprocessor" >&5
|
||||
echo "configure:1652: checking how to run the C preprocessor" >&5
|
||||
# On Suns, sometimes $CPP names a directory.
|
||||
if test -n "$CPP" && test -d "$CPP"; then
|
||||
CPP=
|
||||
|
@ -1661,13 +1663,13 @@ else
|
|||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||
# not just through cpp.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1665 "configure"
|
||||
#line 1667 "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:1671: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1673: \"$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
|
||||
:
|
||||
|
@ -1678,13 +1680,13 @@ else
|
|||
rm -rf conftest*
|
||||
CPP="${CC-cc} -E -traditional-cpp"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1682 "configure"
|
||||
#line 1684 "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:1688: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1690: \"$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
|
||||
:
|
||||
|
@ -1695,13 +1697,13 @@ else
|
|||
rm -rf conftest*
|
||||
CPP="${CC-cc} -nologo -E"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1699 "configure"
|
||||
#line 1701 "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:1705: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1707: \"$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
|
||||
:
|
||||
|
@ -1729,17 +1731,17 @@ for ac_hdr in string.h strings.h
|
|||
do
|
||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||
echo "configure:1733: checking for $ac_hdr" >&5
|
||||
echo "configure:1735: checking for $ac_hdr" >&5
|
||||
if eval "test \"\${ac_cv_header_$ac_safe+set}\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1738 "configure"
|
||||
#line 1740 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$ac_hdr>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:1743: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1745: \"$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*
|
||||
|
@ -1802,6 +1804,17 @@ if test x"$enable_ffs" != xno; then
|
|||
FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FFS=1"
|
||||
fi
|
||||
|
||||
# Check whether --enable-minix or --disable-minix was given.
|
||||
if test "${enable_minix+set}" = set; then
|
||||
enableval="$enable_minix"
|
||||
:
|
||||
fi
|
||||
|
||||
|
||||
if test x"$enable_minix" != xno; then
|
||||
FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_MINIX=1"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -141,6 +141,13 @@ if test x"$enable_ffs" != xno; then
|
|||
FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FFS=1"
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(minix,
|
||||
[ --disable-minix disable Minix fs support in Stage 2])
|
||||
|
||||
if test x"$enable_minix" != xno; then
|
||||
FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_MINIX=1"
|
||||
fi
|
||||
|
||||
AC_SUBST(FSYS_CFLAGS)
|
||||
|
||||
|
||||
|
|
|
@ -13,6 +13,6 @@ grub.info: grub.texi
|
|||
|
||||
if GRUB_MAINT
|
||||
$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN)
|
||||
$(srcdir)/$(HELP2MAN) --name="the stage2 emulator shell" \
|
||||
$(srcdir)/$(HELP2MAN) --name="the grub shell" \
|
||||
--section=8 --output=$@ $<
|
||||
endif
|
||||
|
|
|
@ -405,7 +405,7 @@ grub.info: grub.texi
|
|||
&& sed 's/@command/@file/g; s/ifnottex/ifinfo/' grub.texi | $(MAKEINFO)
|
||||
|
||||
@GRUB_MAINT_TRUE@$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN)
|
||||
@GRUB_MAINT_TRUE@ $(srcdir)/$(HELP2MAN) --name="the stage2 emulator shell" \
|
||||
@GRUB_MAINT_TRUE@ $(srcdir)/$(HELP2MAN) --name="the grub shell" \
|
||||
@GRUB_MAINT_TRUE@ --section=8 --output=$@ $<
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.012.
|
||||
.TH GRUB "8" "June 1999" "GNU GRUB 0.5.92" FSF
|
||||
.TH GRUB "8" "August 1999" "GNU GRUB 0.5.93" FSF
|
||||
.SH NAME
|
||||
GRUB \- the stage2 emulator shell
|
||||
GRUB \- the grub shell
|
||||
.SH SYNOPSIS
|
||||
.B GRUB
|
||||
[\fIOPTION\fR]...
|
||||
|
|
|
@ -82,7 +82,7 @@ edition documents version @value{VERSION}.
|
|||
* Using:: Booting your operating system.
|
||||
* Filesystems:: Filesystem syntax and semantics.
|
||||
* Troubleshooting:: Error messages produced by GRUB.
|
||||
* Stage 2 emulator:: The @command{grub} command.
|
||||
* The grub shell:: The @command{grub} command.
|
||||
* Hacking:: Implementation details.
|
||||
* Index:: Index.
|
||||
|
||||
|
@ -120,7 +120,7 @@ Error messages reported by GRUB
|
|||
|
||||
The @command{grub} command
|
||||
|
||||
* Basic usage:: How to use the Stage 2 emulator.
|
||||
* Basic usage:: How to use the grub shell.
|
||||
* Installation under UNIX:: How to install GRUB via @command{grub}.
|
||||
|
||||
Implementation details
|
||||
|
@ -250,8 +250,8 @@ partitions, and files in a directory depending on context.
|
|||
@item Multiple Filesystem Types
|
||||
Supports multiple filesystem types transparently, plus a useful explicit
|
||||
blocklist notation. The currently supported filesystem types are
|
||||
@dfn{BSD FFS}, @dfn{DOS FAT}, and @dfn{Linux ext2fs}.
|
||||
@xref{Filesystems}, for more information.
|
||||
@dfn{BSD FFS}, @dfn{DOS FAT16 and FAT32}, @dfn{Minix fs}, and
|
||||
@dfn{Linux ext2fs}. @xref{Filesystems}, for more information.
|
||||
|
||||
@item Decompression Support
|
||||
Can decompress files which were compressed by
|
||||
|
@ -890,8 +890,8 @@ Filesystem test mode is turned off by any use of the @command{install=}
|
|||
or @command{testload=} commands.
|
||||
|
||||
@item quit
|
||||
Exit from the GRUB stage2 emulator @command{grub} (@pxref{Stage 2
|
||||
emulator}). This is just ignored in the native Stage 2.
|
||||
Exit from the grub shell @command{grub} (@pxref{The grub shell}). This
|
||||
is just ignored in the native Stage 2.
|
||||
@end table
|
||||
|
||||
|
||||
|
@ -1177,19 +1177,19 @@ install of set active partition command.
|
|||
@end table
|
||||
|
||||
|
||||
@node Stage 2 emulator
|
||||
@node The grub shell
|
||||
@chapter The command @command{grub}
|
||||
|
||||
This chapter documents the Stage 2 emulator @command{grub}.
|
||||
This chapter documents the grub shell @command{grub}.
|
||||
|
||||
@menu
|
||||
* Basic usage:: How to use the Stage 2 emulator.
|
||||
* Basic usage:: How to use the grub shell.
|
||||
* Installation under UNIX:: How to install GRUB via @command{grub}.
|
||||
@end menu
|
||||
|
||||
|
||||
@node Basic usage
|
||||
@section Introduction into the Stage 2 emulator
|
||||
@section Introduction into the grub shell
|
||||
|
||||
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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
sbin_PROGRAMS = grub
|
||||
|
||||
AM_CFLAGS = @GRUB_CFLAGS@ -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 \
|
||||
-DFSYS_FFS=1 -fwritable-strings \
|
||||
-DFSYS_FFS=1 -DFSYS_MINIX=1 -fwritable-strings \
|
||||
-I$(top_srcdir)/stage2 -I$(top_srcdir)/stage1
|
||||
|
||||
grub_SOURCES = main.c asmstub.c getopt.c getopt1.c getopt.h
|
||||
|
|
|
@ -82,7 +82,7 @@ install_sh = @install_sh@
|
|||
sbin_PROGRAMS = grub
|
||||
|
||||
AM_CFLAGS = @GRUB_CFLAGS@ -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 \
|
||||
-DFSYS_FFS=1 -fwritable-strings \
|
||||
-DFSYS_FFS=1 -DFSYS_MINIX=1 -fwritable-strings \
|
||||
-I$(top_srcdir)/stage2 -I$(top_srcdir)/stage1
|
||||
|
||||
|
||||
|
|
|
@ -14,16 +14,18 @@ INCLUDES = -I$(top_srcdir)/stage1
|
|||
# The library for /sbin/grub.
|
||||
noinst_LIBRARIES = libgrub.a
|
||||
libgrub_a_SOURCES = boot.c common.c char_io.c cmdline.c disk_io.c \
|
||||
gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c stage2.c
|
||||
gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c fsys_minix.c \
|
||||
stage2.c
|
||||
libgrub_a_CFLAGS = @GRUB_CFLAGS@ -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 \
|
||||
-DFSYS_FAT=1 -DFSYS_FFS=1 -fwritable-strings
|
||||
-DFSYS_FAT=1 -DFSYS_FFS=1 -DFSYS_MINIX=1 -fwritable-strings
|
||||
|
||||
# Stage 2 and Stage 1.5's.
|
||||
pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
|
||||
nodist_pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5
|
||||
nodist_pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
|
||||
minix_stage1_5
|
||||
CLEANFILES = $(pkgdata_DATA)
|
||||
noinst_PROGRAMS = stage2.exec e2fs_stage1_5.exec fat_stage1_5.exec \
|
||||
ffs_stage1_5.exec
|
||||
ffs_stage1_5.exec minix_stage1_5.exec
|
||||
MOSTLYCLEANFILES = $(noinst_PROGRAMS)
|
||||
|
||||
STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
|
||||
|
@ -37,7 +39,7 @@ STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 \
|
|||
# For stage2 target.
|
||||
stage2_exec_SOURCES = asm.S boot.c common.c char_io.c cmdline.c \
|
||||
disk_io.c gunzip.c stage2.c bios.c smp-imps.c fsys_ext2fs.c \
|
||||
fsys_fat.c fsys_ffs.c
|
||||
fsys_fat.c fsys_ffs.c fsys_minix.c
|
||||
stage2_exec_CFLAGS = $(STAGE2_COMPILE) @FSYS_CFLAGS@
|
||||
stage2_exec_LDFLAGS = $(STAGE2_LINK)
|
||||
|
||||
|
@ -62,6 +64,13 @@ ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
|
|||
-DNO_BLOCK_FILES=1
|
||||
ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For minix_stage1_5 target.
|
||||
minix_stage1_5_exec_SOURCES = asm.S common.c char_io.c disk_io.c \
|
||||
stage1_5.c fsys_minix.c bios.c
|
||||
minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# General rule for making a raw binary.
|
||||
%: %.exec
|
||||
$(OBJCOPY) -O binary $< $@
|
||||
|
|
|
@ -95,18 +95,21 @@ INCLUDES = -I$(top_srcdir)/stage1
|
|||
# The library for /sbin/grub.
|
||||
noinst_LIBRARIES = libgrub.a
|
||||
libgrub_a_SOURCES = boot.c common.c char_io.c cmdline.c disk_io.c \
|
||||
gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c stage2.c
|
||||
gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c fsys_minix.c \
|
||||
stage2.c
|
||||
|
||||
libgrub_a_CFLAGS = @GRUB_CFLAGS@ -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 \
|
||||
-DFSYS_FAT=1 -DFSYS_FFS=1 -fwritable-strings
|
||||
-DFSYS_FAT=1 -DFSYS_FFS=1 -DFSYS_MINIX=1 -fwritable-strings
|
||||
|
||||
|
||||
# Stage 2 and Stage 1.5's.
|
||||
pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
|
||||
nodist_pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5
|
||||
nodist_pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
|
||||
minix_stage1_5
|
||||
|
||||
CLEANFILES = $(pkgdata_DATA)
|
||||
noinst_PROGRAMS = stage2.exec e2fs_stage1_5.exec fat_stage1_5.exec \
|
||||
ffs_stage1_5.exec
|
||||
ffs_stage1_5.exec minix_stage1_5.exec
|
||||
|
||||
MOSTLYCLEANFILES = $(noinst_PROGRAMS)
|
||||
|
||||
|
@ -122,7 +125,7 @@ STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 \
|
|||
# For stage2 target.
|
||||
stage2_exec_SOURCES = asm.S boot.c common.c char_io.c cmdline.c \
|
||||
disk_io.c gunzip.c stage2.c bios.c smp-imps.c fsys_ext2fs.c \
|
||||
fsys_fat.c fsys_ffs.c
|
||||
fsys_fat.c fsys_ffs.c fsys_minix.c
|
||||
|
||||
stage2_exec_CFLAGS = $(STAGE2_COMPILE) @FSYS_CFLAGS@
|
||||
stage2_exec_LDFLAGS = $(STAGE2_LINK)
|
||||
|
@ -152,6 +155,15 @@ ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
|
|||
-DNO_BLOCK_FILES=1
|
||||
|
||||
ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For minix_stage1_5 target.
|
||||
minix_stage1_5_exec_SOURCES = asm.S common.c char_io.c disk_io.c \
|
||||
stage1_5.c fsys_minix.c bios.c
|
||||
|
||||
minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
|
||||
minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
subdir = stage2
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES =
|
||||
|
@ -167,7 +179,7 @@ libgrub_a_LIBADD =
|
|||
am_libgrub_a_OBJECTS = libgrub_a-boot.o libgrub_a-common.o \
|
||||
libgrub_a-char_io.o libgrub_a-cmdline.o libgrub_a-disk_io.o \
|
||||
libgrub_a-gunzip.o libgrub_a-fsys_ffs.o libgrub_a-fsys_ext2fs.o \
|
||||
libgrub_a-fsys_fat.o libgrub_a-stage2.o
|
||||
libgrub_a-fsys_fat.o libgrub_a-fsys_minix.o libgrub_a-stage2.o
|
||||
libgrub_a_OBJECTS = $(am_libgrub_a_OBJECTS)
|
||||
AR = ar
|
||||
PROGRAMS = $(noinst_PROGRAMS)
|
||||
|
@ -193,11 +205,18 @@ ffs_stage1_5_exec-fsys_ffs.o ffs_stage1_5_exec-bios.o
|
|||
ffs_stage1_5_exec_OBJECTS = $(am_ffs_stage1_5_exec_OBJECTS)
|
||||
ffs_stage1_5_exec_LDADD = $(LDADD)
|
||||
ffs_stage1_5_exec_DEPENDENCIES =
|
||||
am_minix_stage1_5_exec_OBJECTS = minix_stage1_5_exec-asm.o \
|
||||
minix_stage1_5_exec-common.o minix_stage1_5_exec-char_io.o \
|
||||
minix_stage1_5_exec-disk_io.o minix_stage1_5_exec-stage1_5.o \
|
||||
minix_stage1_5_exec-fsys_minix.o minix_stage1_5_exec-bios.o
|
||||
minix_stage1_5_exec_OBJECTS = $(am_minix_stage1_5_exec_OBJECTS)
|
||||
minix_stage1_5_exec_LDADD = $(LDADD)
|
||||
minix_stage1_5_exec_DEPENDENCIES =
|
||||
am_stage2_exec_OBJECTS = stage2_exec-asm.o stage2_exec-boot.o \
|
||||
stage2_exec-common.o stage2_exec-char_io.o stage2_exec-cmdline.o \
|
||||
stage2_exec-disk_io.o stage2_exec-gunzip.o stage2_exec-stage2.o \
|
||||
stage2_exec-bios.o stage2_exec-smp-imps.o stage2_exec-fsys_ext2fs.o \
|
||||
stage2_exec-fsys_fat.o stage2_exec-fsys_ffs.o
|
||||
stage2_exec-fsys_fat.o stage2_exec-fsys_ffs.o stage2_exec-fsys_minix.o
|
||||
stage2_exec_OBJECTS = $(am_stage2_exec_OBJECTS)
|
||||
stage2_exec_LDADD = $(LDADD)
|
||||
stage2_exec_DEPENDENCIES =
|
||||
|
@ -209,7 +228,7 @@ CCLD = $(CC)
|
|||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(libgrub_a_SOURCES) $(e2fs_stage1_5_exec_SOURCES) \
|
||||
$(fat_stage1_5_exec_SOURCES) $(ffs_stage1_5_exec_SOURCES) \
|
||||
$(stage2_exec_SOURCES)
|
||||
$(minix_stage1_5_exec_SOURCES) $(stage2_exec_SOURCES)
|
||||
DATA = $(nodist_pkgdata_DATA)
|
||||
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
@ -222,10 +241,10 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|||
GZIP_ENV = --best
|
||||
DEP_FILES = .deps/asm.P .deps/bios.P .deps/boot.P .deps/char_io.P \
|
||||
.deps/cmdline.P .deps/common.P .deps/disk_io.P .deps/fsys_ext2fs.P \
|
||||
.deps/fsys_fat.P .deps/fsys_ffs.P .deps/gunzip.P .deps/smp-imps.P \
|
||||
.deps/stage1_5.P .deps/stage2.P
|
||||
SOURCES = $(libgrub_a_SOURCES) $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) $(ffs_stage1_5_exec_SOURCES) $(stage2_exec_SOURCES)
|
||||
OBJECTS = $(am_libgrub_a_OBJECTS) $(am_e2fs_stage1_5_exec_OBJECTS) $(am_fat_stage1_5_exec_OBJECTS) $(am_ffs_stage1_5_exec_OBJECTS) $(am_stage2_exec_OBJECTS)
|
||||
.deps/fsys_fat.P .deps/fsys_ffs.P .deps/fsys_minix.P .deps/gunzip.P \
|
||||
.deps/smp-imps.P .deps/stage1_5.P .deps/stage2.P
|
||||
SOURCES = $(libgrub_a_SOURCES) $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) $(ffs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) $(stage2_exec_SOURCES)
|
||||
OBJECTS = $(am_libgrub_a_OBJECTS) $(am_e2fs_stage1_5_exec_OBJECTS) $(am_fat_stage1_5_exec_OBJECTS) $(am_ffs_stage1_5_exec_OBJECTS) $(am_minix_stage1_5_exec_OBJECTS) $(am_stage2_exec_OBJECTS)
|
||||
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
|
@ -265,6 +284,7 @@ libgrub_a-gunzip.o: gunzip.c
|
|||
libgrub_a-fsys_ffs.o: fsys_ffs.c
|
||||
libgrub_a-fsys_ext2fs.o: fsys_ext2fs.c
|
||||
libgrub_a-fsys_fat.o: fsys_fat.c
|
||||
libgrub_a-fsys_minix.o: fsys_minix.c
|
||||
libgrub_a-stage2.o: stage2.c
|
||||
|
||||
libgrub.a: $(libgrub_a_OBJECTS) $(libgrub_a_DEPENDENCIES)
|
||||
|
@ -316,6 +336,18 @@ ffs_stage1_5_exec-bios.o: bios.c
|
|||
ffs_stage1_5.exec: $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_DEPENDENCIES)
|
||||
@rm -f ffs_stage1_5.exec
|
||||
$(LINK) $(ffs_stage1_5_exec_LDFLAGS) $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_LDADD) $(LIBS)
|
||||
minix_stage1_5_exec-asm.o: asm.S
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-asm.o $<
|
||||
minix_stage1_5_exec-common.o: common.c
|
||||
minix_stage1_5_exec-char_io.o: char_io.c
|
||||
minix_stage1_5_exec-disk_io.o: disk_io.c
|
||||
minix_stage1_5_exec-stage1_5.o: stage1_5.c
|
||||
minix_stage1_5_exec-fsys_minix.o: fsys_minix.c
|
||||
minix_stage1_5_exec-bios.o: bios.c
|
||||
|
||||
minix_stage1_5.exec: $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_DEPENDENCIES)
|
||||
@rm -f minix_stage1_5.exec
|
||||
$(LINK) $(minix_stage1_5_exec_LDFLAGS) $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_LDADD) $(LIBS)
|
||||
stage2_exec-asm.o: asm.S
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stage2_exec_CFLAGS) $(CFLAGS) -c -o stage2_exec-asm.o $<
|
||||
stage2_exec-boot.o: boot.c
|
||||
|
@ -330,6 +362,7 @@ stage2_exec-smp-imps.o: smp-imps.c
|
|||
stage2_exec-fsys_ext2fs.o: fsys_ext2fs.c
|
||||
stage2_exec-fsys_fat.o: fsys_fat.c
|
||||
stage2_exec-fsys_ffs.o: fsys_ffs.c
|
||||
stage2_exec-fsys_minix.o: fsys_minix.c
|
||||
|
||||
stage2.exec: $(stage2_exec_OBJECTS) $(stage2_exec_DEPENDENCIES)
|
||||
@rm -f stage2.exec
|
||||
|
@ -612,6 +645,25 @@ libgrub_a-fsys_fat.lo: fsys_fat.c
|
|||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm -f .deps/$(*D)/$(*F).pp
|
||||
|
||||
libgrub_a-fsys_minix.o: fsys_minix.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_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
|
||||
|
||||
libgrub_a-fsys_minix.lo: fsys_minix.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_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
|
||||
|
||||
libgrub_a-stage2.o: stage2.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
|
||||
|
@ -973,6 +1025,120 @@ ffs_stage1_5_exec-bios.lo: bios.c
|
|||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm -f .deps/$(*D)/$(*F).pp
|
||||
|
||||
minix_stage1_5_exec-common.o: common.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-common.lo: common.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-char_io.o: char_io.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-char_io.lo: char_io.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-disk_io.o: disk_io.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-disk_io.lo: disk_io.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-stage1_5.o: stage1_5.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-stage1_5.lo: stage1_5.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-fsys_minix.o: fsys_minix.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-fsys_minix.lo: fsys_minix.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-bios.o: bios.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
minix_stage1_5_exec-bios.lo: bios.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_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
|
||||
|
||||
stage2_exec-boot.o: boot.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stage2_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stage2_exec_CFLAGS) $(CFLAGS) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
|
||||
|
@ -1200,6 +1366,25 @@ stage2_exec-fsys_ffs.lo: fsys_ffs.c
|
|||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
||||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm -f .deps/$(*D)/$(*F).pp
|
||||
|
||||
stage2_exec-fsys_minix.o: fsys_minix.c
|
||||
@echo '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stage2_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stage2_exec_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
|
||||
|
||||
stage2_exec-fsys_minix.lo: fsys_minix.c
|
||||
@echo '$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stage2_exec_CFLAGS) $(CFLAGS) -c -o $@ $<'; \
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stage2_exec_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
|
||||
check-TESTS: $(TESTS)
|
||||
@failed=0; all=0; xfail=0; xpass=0; \
|
||||
srcdir=$(srcdir); export srcdir; \
|
||||
|
|
|
@ -40,6 +40,9 @@ struct fsys_entry fsys_table[NUM_FSYS + 1] =
|
|||
# endif
|
||||
# ifdef FSYS_EXT2FS
|
||||
{"ext2fs", ext2fs_mount, ext2fs_read, ext2fs_dir},
|
||||
# endif
|
||||
# ifdef FSYS_MINIX
|
||||
{"minix", minix_mount, minix_read, minix_dir},
|
||||
# endif
|
||||
/* XX FFS should come last as it's superblock is commonly crossing tracks
|
||||
on floppies from track 1 to 2, while others only use 1. */
|
||||
|
|
|
@ -51,8 +51,18 @@ int ext2fs_dir (char *dirname);
|
|||
#define FSYS_EXT2FS_NUM 0
|
||||
#endif
|
||||
|
||||
#ifdef FSYS_MINIX
|
||||
#define FSYS_MINIX_NUM 1
|
||||
int minix_mount (void);
|
||||
int minix_read (char *buf, int len);
|
||||
int minix_dir (char *dirname);
|
||||
#else
|
||||
#define FSYS_MINIX_NUM 0
|
||||
#endif
|
||||
|
||||
#ifndef NUM_FSYS
|
||||
#define NUM_FSYS ( FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM )
|
||||
#define NUM_FSYS \
|
||||
(FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM + FSYS_MINIX_NUM)
|
||||
#endif
|
||||
|
||||
/* defines for the block filesystem info area */
|
||||
|
|
524
stage2/fsys_minix.c
Normal file
524
stage2/fsys_minix.c
Normal file
|
@ -0,0 +1,524 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 1999 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
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/* Restrictions:
|
||||
This is MINIX V1 only (yet)
|
||||
Disk creation is like:
|
||||
mkfs.minix -c -n14 DEVICE
|
||||
*/
|
||||
|
||||
#ifdef FSYS_MINIX
|
||||
|
||||
#include "shared.h"
|
||||
#include "filesys.h"
|
||||
|
||||
/* #define DEBUG_MINIX */
|
||||
|
||||
/* indirect blocks */
|
||||
static int mapblock1, mapblock2;
|
||||
|
||||
/* sizes are always in bytes, BLOCK values are always in DEV_BSIZE (sectors) */
|
||||
#define DEV_BSIZE 512
|
||||
|
||||
/* include/linux/fs.h */
|
||||
#define BLOCK_SIZE_BITS 10
|
||||
#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
|
||||
|
||||
/* made up, defaults to 1 but can be passed via mount_opts */
|
||||
#define WHICH_SUPER 1
|
||||
/* kind of from fs/ext2/super.c (is OK for minix) */
|
||||
#define SBLOCK (WHICH_SUPER * BLOCK_SIZE / DEV_BSIZE) /* = 2 */
|
||||
|
||||
/* include/asm-i386/type.h */
|
||||
typedef __signed__ char __s8;
|
||||
typedef unsigned char __u8;
|
||||
typedef __signed__ short __s16;
|
||||
typedef unsigned short __u16;
|
||||
typedef __signed__ int __s32;
|
||||
typedef unsigned int __u32;
|
||||
|
||||
/* include/linux/minix_fs.h */
|
||||
#define MINIX_ROOT_INO 1
|
||||
|
||||
/* Not the same as the bogus LINK_MAX in <linux/limits.h>. Oh well. */
|
||||
#define MINIX_LINK_MAX 250
|
||||
#define MINIX2_LINK_MAX 65530
|
||||
|
||||
#define MINIX_I_MAP_SLOTS 8
|
||||
#define MINIX_Z_MAP_SLOTS 64
|
||||
#define MINIX_SUPER_MAGIC 0x137F /* original minix fs */
|
||||
#define MINIX_SUPER_MAGIC2 0x138F /* minix fs, 30 char names */
|
||||
#define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 fs */
|
||||
#define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2 fs, 30 char names */
|
||||
#define MINIX_VALID_FS 0x0001 /* Clean fs. */
|
||||
#define MINIX_ERROR_FS 0x0002 /* fs has errors. */
|
||||
|
||||
#define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode)))
|
||||
#define MINIX2_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix2_inode)))
|
||||
|
||||
#define MINIX_V1 0x0001 /* original minix fs */
|
||||
#define MINIX_V2 0x0002 /* minix V2 fs */
|
||||
|
||||
/* originally this is :
|
||||
#define INODE_VERSION(inode) inode->i_sb->u.minix_sb.s_version
|
||||
here we have */
|
||||
#define INODE_VERSION(inode) (SUPERBLOCK->s_version)
|
||||
|
||||
#define MINIX_NAME_LEN 14 /* XXX depend on version */
|
||||
|
||||
/*
|
||||
* This is the original minix inode layout on disk.
|
||||
* Note the 8-bit gid and atime and ctime.
|
||||
*/
|
||||
struct minix_inode {
|
||||
__u16 i_mode;
|
||||
__u16 i_uid;
|
||||
__u32 i_size;
|
||||
__u32 i_time;
|
||||
__u8 i_gid;
|
||||
__u8 i_nlinks;
|
||||
__u16 i_zone[9];
|
||||
};
|
||||
|
||||
/*
|
||||
* The new minix inode has all the time entries, as well as
|
||||
* long block numbers and a third indirect block (7+1+1+1
|
||||
* instead of 7+1+1). Also, some previously 8-bit values are
|
||||
* now 16-bit. The inode is now 64 bytes instead of 32.
|
||||
*/
|
||||
struct minix2_inode {
|
||||
__u16 i_mode;
|
||||
__u16 i_nlinks;
|
||||
__u16 i_uid;
|
||||
__u16 i_gid;
|
||||
__u32 i_size;
|
||||
__u32 i_atime;
|
||||
__u32 i_mtime;
|
||||
__u32 i_ctime;
|
||||
__u32 i_zone[10];
|
||||
};
|
||||
|
||||
/*
|
||||
* minix super-block data on disk
|
||||
*/
|
||||
struct minix_super_block {
|
||||
__u16 s_ninodes;
|
||||
__u16 s_nzones;
|
||||
__u16 s_imap_blocks;
|
||||
__u16 s_zmap_blocks;
|
||||
__u16 s_firstdatazone;
|
||||
__u16 s_log_zone_size;
|
||||
__u32 s_max_size;
|
||||
__u16 s_magic;
|
||||
__u16 s_state;
|
||||
__u32 s_zones;
|
||||
};
|
||||
|
||||
struct minix_dir_entry {
|
||||
__u16 inode;
|
||||
char name[0];
|
||||
};
|
||||
|
||||
/* made up, these are pointers into FSYS_BUF */
|
||||
/* read once, always stays there: */
|
||||
#define SUPERBLOCK \
|
||||
((struct minix_super_block *)(FSYS_BUF))
|
||||
#define INODE \
|
||||
((struct minix_inode *)((int) SUPERBLOCK + BLOCK_SIZE))
|
||||
#define DATABLOCK1 \
|
||||
((int)((int)INODE + sizeof(struct minix_inode)))
|
||||
#define DATABLOCK2 \
|
||||
((int)((int)DATABLOCK1 + BLOCK_SIZE))
|
||||
|
||||
/* linux/stat.h */
|
||||
#define S_IFMT 00170000
|
||||
#define S_IFLNK 0120000
|
||||
#define S_IFREG 0100000
|
||||
#define S_IFDIR 0040000
|
||||
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
|
||||
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
||||
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
|
||||
#define PATH_MAX 1024 /* include/linux/limits.h */
|
||||
#define MAX_LINK_COUNT 5 /* number of symbolic links to follow */
|
||||
|
||||
/* check filesystem types and read superblock into memory buffer */
|
||||
int
|
||||
minix_mount (void)
|
||||
{
|
||||
int retval = 1;
|
||||
|
||||
if ((((current_drive & 0x80 || current_slice != 0))
|
||||
&& (current_slice != PC_SLICE_TYPE_MINIX)
|
||||
&& ! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_OTHER))
|
||||
|| part_length < (SBLOCK +
|
||||
(sizeof (struct minix_super_block) / DEV_BSIZE))
|
||||
|| ! devread (SBLOCK, 0, sizeof (struct minix_super_block),
|
||||
(char *) SUPERBLOCK)
|
||||
|| SUPERBLOCK->s_magic != MINIX_SUPER_MAGIC)
|
||||
retval = 0;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Takes a file system block number and reads it into BUFFER. */
|
||||
static int
|
||||
minix_rdfsb (int fsblock, int buffer)
|
||||
{
|
||||
return devread (fsblock * (BLOCK_SIZE / DEV_BSIZE), 0,
|
||||
BLOCK_SIZE, (char *) buffer);
|
||||
}
|
||||
|
||||
/* Maps LOGICAL_BLOCK (the file offset divided by the blocksize) into
|
||||
a physical block (the location in the file system) via an inode. */
|
||||
static int
|
||||
minix_block_map (int logical_block)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (logical_block < 7)
|
||||
return INODE->i_zone[logical_block];
|
||||
|
||||
logical_block -= 7;
|
||||
if (logical_block < 512)
|
||||
{
|
||||
i = INODE->i_zone[7];
|
||||
|
||||
if (!i || ((mapblock1 != 1)
|
||||
&& !minix_rdfsb (i, DATABLOCK1)))
|
||||
{
|
||||
errnum = ERR_FSYS_CORRUPT;
|
||||
return -1;
|
||||
}
|
||||
mapblock1 = 1;
|
||||
return ((__u16 *) DATABLOCK1) [logical_block];
|
||||
}
|
||||
|
||||
logical_block -= 512;
|
||||
i = INODE->i_zone[8];
|
||||
if (!i || ((mapblock1 != 2)
|
||||
&& !minix_rdfsb (i, DATABLOCK1)))
|
||||
{
|
||||
errnum = ERR_FSYS_CORRUPT;
|
||||
return -1;
|
||||
}
|
||||
mapblock1 = 2;
|
||||
i = ((__u16 *) DATABLOCK1)[logical_block >> 9];
|
||||
if (!i || ((mapblock2 != i)
|
||||
&& !minix_rdfsb (i, DATABLOCK2)))
|
||||
{
|
||||
errnum = ERR_FSYS_CORRUPT;
|
||||
return -1;
|
||||
}
|
||||
mapblock2 = i;
|
||||
return ((__u16 *) DATABLOCK2)[logical_block & 511];
|
||||
}
|
||||
|
||||
/* read from INODE into BUF */
|
||||
int
|
||||
minix_read (char *buf, int len)
|
||||
{
|
||||
int logical_block;
|
||||
int offset;
|
||||
int map;
|
||||
int ret = 0;
|
||||
int size = 0;
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
/* find the (logical) block component of our location */
|
||||
logical_block = filepos >> BLOCK_SIZE_BITS;
|
||||
offset = filepos & (BLOCK_SIZE - 1);
|
||||
map = minix_block_map (logical_block);
|
||||
#ifdef DEBUG_MINIX
|
||||
printf ("map=%d\n", map);
|
||||
#endif
|
||||
if (map < 0)
|
||||
break;
|
||||
|
||||
size = BLOCK_SIZE;
|
||||
size -= offset;
|
||||
if (size > len)
|
||||
size = len;
|
||||
|
||||
#ifndef STAGE1_5
|
||||
debug_fs_func = debug_fs;
|
||||
#endif /* STAGE1_5 */
|
||||
|
||||
devread (map * (BLOCK_SIZE / DEV_BSIZE),
|
||||
offset, size, buf);
|
||||
|
||||
#ifndef STAGE1_5
|
||||
debug_fs_func = NULL;
|
||||
#endif /* STAGE1_5 */
|
||||
|
||||
buf += size;
|
||||
len -= size;
|
||||
filepos += size;
|
||||
ret += size;
|
||||
}
|
||||
|
||||
if (errnum)
|
||||
ret = 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* preconditions: minix_mount already executed, therefore supblk in buffer
|
||||
known as SUPERBLOCK
|
||||
returns: 0 if error, nonzero iff we were able to find the file successfully
|
||||
postconditions: on a nonzero return, buffer known as INODE contains the
|
||||
inode of the file we were trying to look up
|
||||
side effects: none yet */
|
||||
int
|
||||
minix_dir (char *dirname)
|
||||
{
|
||||
int current_ino = MINIX_ROOT_INO; /* start at the root */
|
||||
int updir_ino = current_ino; /* the parent of the current directory */
|
||||
int ino_blk; /* fs pointer of the inode's info */
|
||||
|
||||
int str_chk; /* used ot hold the results of a string
|
||||
compare */
|
||||
|
||||
struct minix_inode * raw_inode; /* inode info for current_ino */
|
||||
|
||||
char linkbuf[PATH_MAX]; /* buffer for following sym-links */
|
||||
int link_count = 0;
|
||||
|
||||
char * rest;
|
||||
char ch;
|
||||
|
||||
int off; /* offset within block of directory
|
||||
entry */
|
||||
int loc; /* location within a directory */
|
||||
int blk; /* which data blk within dir entry */
|
||||
long map; /* fs pointer of a particular block from
|
||||
dir entry */
|
||||
struct minix_dir_entry * dp; /* pointer to directory entry */
|
||||
|
||||
/* loop invariants:
|
||||
current_ino = inode to lookup
|
||||
dirname = pointer to filename component we are cur looking up within
|
||||
the directory known pointed to by current_ino (if any) */
|
||||
|
||||
#ifdef DEBUG_MINIX
|
||||
printf ("\n");
|
||||
#endif
|
||||
|
||||
while (1)
|
||||
{
|
||||
#ifdef DEBUG_MINIX
|
||||
printf ("inode %d, dirname %s\n", current_ino, dirname);
|
||||
#endif
|
||||
|
||||
ino_blk = (2 + SUPERBLOCK->s_imap_blocks + SUPERBLOCK->s_zmap_blocks
|
||||
+ (current_ino - 1) / MINIX_INODES_PER_BLOCK);
|
||||
if (! minix_rdfsb (ino_blk, (int) INODE))
|
||||
return 0;
|
||||
|
||||
/* reset indirect blocks! */
|
||||
mapblock2 = mapblock1 = -1;
|
||||
|
||||
raw_inode = INODE + ((current_ino - 1) % MINIX_INODES_PER_BLOCK);
|
||||
|
||||
/* copy inode to fixed location */
|
||||
memmove ((void *) INODE, (void *) raw_inode,
|
||||
sizeof (struct minix_inode));
|
||||
|
||||
/* If we've got a symbolic link, then chase it. */
|
||||
if (S_ISLNK (INODE->i_mode))
|
||||
{
|
||||
int len;
|
||||
|
||||
if (++link_count > MAX_LINK_COUNT)
|
||||
{
|
||||
errnum = ERR_SYMLINK_LOOP;
|
||||
return 0;
|
||||
}
|
||||
#ifdef DEBUG_MINIX
|
||||
printf ("S_ISLNK (%s)\n", dirname);
|
||||
#endif
|
||||
|
||||
/* Find out how long our remaining name is. */
|
||||
len = 0;
|
||||
while (dirname[len] && !isspace (dirname[len]))
|
||||
len++;
|
||||
|
||||
/* Get the symlink size. */
|
||||
filemax = (INODE->i_size);
|
||||
if (filemax + len > sizeof (linkbuf) - 2)
|
||||
{
|
||||
errnum = ERR_FILELENGTH;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (len)
|
||||
{
|
||||
/* Copy the remaining name to the end of the symlink data.
|
||||
Note that DIRNAME and LINKBUF may overlap! */
|
||||
memmove (linkbuf + filemax, dirname, len);
|
||||
}
|
||||
linkbuf[filemax + len] = '\0';
|
||||
|
||||
/* Read the necessary blocks, and reset the file pointer. */
|
||||
len = grub_read (linkbuf, filemax);
|
||||
filepos = 0;
|
||||
if (!len)
|
||||
return 0;
|
||||
|
||||
#ifdef DEBUG_MINIX
|
||||
printf ("symlink=%s\n", linkbuf);
|
||||
#endif
|
||||
|
||||
dirname = linkbuf;
|
||||
if (*dirname == '/')
|
||||
{
|
||||
/* It's an absolute link, so look it up in root. */
|
||||
current_ino = MINIX_ROOT_INO;
|
||||
updir_ino = current_ino;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Relative, so look it up in our parent directory. */
|
||||
current_ino = updir_ino;
|
||||
}
|
||||
|
||||
/* Try again using the new name. */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If end of filename, INODE points to the file's inode */
|
||||
if (!*dirname || isspace (*dirname))
|
||||
{
|
||||
if (!S_ISREG (INODE->i_mode))
|
||||
{
|
||||
errnum = ERR_BAD_FILETYPE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
filemax = (INODE->i_size);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* else we have to traverse a directory */
|
||||
updir_ino = current_ino;
|
||||
|
||||
/* skip over slashes */
|
||||
while (*dirname == '/')
|
||||
dirname++;
|
||||
|
||||
/* if this isn't a directory of sufficient size to hold our file,
|
||||
abort */
|
||||
if (!(INODE->i_size) || !S_ISDIR (INODE->i_mode))
|
||||
{
|
||||
errnum = ERR_BAD_FILETYPE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* skip to next slash or end of filename (space) */
|
||||
for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/';
|
||||
rest++);
|
||||
|
||||
/* look through this directory and find the next filename component */
|
||||
/* invariant: rest points to slash after the next filename component */
|
||||
*rest = 0;
|
||||
loc = 0;
|
||||
|
||||
do
|
||||
{
|
||||
#ifdef DEBUG_MINIX
|
||||
printf ("dirname=`%s', rest=`%s', loc=%d\n", dirname, rest, loc);
|
||||
#endif
|
||||
|
||||
/* if our location/byte offset into the directory exceeds the size,
|
||||
give up */
|
||||
if (loc >= INODE->i_size)
|
||||
{
|
||||
if (print_possibilities < 0)
|
||||
{
|
||||
putchar ('\n');
|
||||
}
|
||||
else
|
||||
{
|
||||
errnum = ERR_FILE_NOT_FOUND;
|
||||
*rest = ch;
|
||||
}
|
||||
return (print_possibilities < 0);
|
||||
}
|
||||
|
||||
/* else, find the (logical) block component of our location */
|
||||
blk = loc >> BLOCK_SIZE_BITS;
|
||||
|
||||
/* we know which logical block of the directory entry we are looking
|
||||
for, now we have to translate that to the physical (fs) block on
|
||||
the disk */
|
||||
map = minix_block_map (blk);
|
||||
#ifdef DEBUG_MINIX
|
||||
printf ("fs block=%d\n", map);
|
||||
#endif
|
||||
mapblock2 = -1;
|
||||
if ((map < 0) || !minix_rdfsb (map, DATABLOCK2))
|
||||
{
|
||||
errnum = ERR_FSYS_CORRUPT;
|
||||
*rest = ch;
|
||||
return 0;
|
||||
}
|
||||
off = loc & (BLOCK_SIZE - 1);
|
||||
dp = (struct minix_dir_entry *) (DATABLOCK2 + off);
|
||||
/* advance loc prematurely to next on-disk directory entry */
|
||||
loc += sizeof (dp->inode) + 14; /* XXX */
|
||||
|
||||
/* NOTE: minix filenames are NULL terminated if < 14 else exact */
|
||||
|
||||
#ifdef DEBUG_MINIX
|
||||
printf ("directory entry ino=%d\n", dp->inode);
|
||||
if (dp->inode)
|
||||
printf ("entry=%s\n", dp->name);
|
||||
#endif
|
||||
|
||||
if (dp->inode)
|
||||
{
|
||||
int saved_c = dp->name[MINIX_NAME_LEN+1];
|
||||
|
||||
dp->name[MINIX_NAME_LEN+1] = 0;
|
||||
str_chk = substring (dirname, dp->name);
|
||||
|
||||
# ifndef STAGE1_5
|
||||
if (print_possibilities && ch != '/'
|
||||
&& (!*dirname || str_chk <= 0))
|
||||
{
|
||||
if (print_possibilities > 0)
|
||||
print_possibilities = -print_possibilities;
|
||||
print_a_completion (dp->name);
|
||||
}
|
||||
# endif
|
||||
|
||||
dp->name[MINIX_NAME_LEN+1] = saved_c;
|
||||
}
|
||||
|
||||
}
|
||||
while (!dp->inode || (str_chk || (print_possibilities && ch != '/')));
|
||||
|
||||
current_ino = dp->inode;
|
||||
*(dirname = rest) = ch;
|
||||
}
|
||||
/* never get here */
|
||||
}
|
||||
|
||||
#endif /* FSYS_MINIX */
|
|
@ -106,6 +106,7 @@
|
|||
#define PC_SLICE_TYPE_FAT32_LBA 0xc
|
||||
#define PC_SLICE_TYPE_FAT16_LBA 0xe
|
||||
#define PC_SLICE_TYPE_WIN95_EXTENDED 0xf
|
||||
#define PC_SLICE_TYPE_MINIX 0x80
|
||||
#define PC_SLICE_TYPE_EXT2FS 0x83
|
||||
|
||||
/* For convinience. */
|
||||
|
|
|
@ -130,23 +130,26 @@ extern char *grub_scratch_mem;
|
|||
#define STAGE2_VER_STR_OFFS 0xd
|
||||
|
||||
/* Stage 2 identifiers */
|
||||
#define STAGE2_ID_STAGE2 0
|
||||
#define STAGE2_ID_FFS_STAGE1_5 1
|
||||
#define STAGE2_ID_E2FS_STAGE1_5 2
|
||||
#define STAGE2_ID_FAT_STAGE1_5 3
|
||||
#define STAGE2_ID_STAGE2 0
|
||||
#define STAGE2_ID_FFS_STAGE1_5 1
|
||||
#define STAGE2_ID_E2FS_STAGE1_5 2
|
||||
#define STAGE2_ID_FAT_STAGE1_5 3
|
||||
#define STAGE2_ID_MINIX_STAGE1_5 4
|
||||
|
||||
#ifndef STAGE1_5
|
||||
#define STAGE2_ID STAGE2_ID_STAGE2
|
||||
# define STAGE2_ID STAGE2_ID_STAGE2
|
||||
#else
|
||||
#if defined(FSYS_FFS)
|
||||
#define STAGE2_ID STAGE2_ID_FFS_STAGE1_5
|
||||
#elif defined(FSYS_EXT2FS)
|
||||
#define STAGE2_ID STAGE2_ID_E2FS_STAGE1_5
|
||||
#elif defined(FSYS_FAT)
|
||||
#define STAGE2_ID STAGE2_ID_FAT_STAGE1_5
|
||||
#else
|
||||
#error "unknown Stage 2"
|
||||
#endif
|
||||
# if defined(FSYS_FFS)
|
||||
# define STAGE2_ID STAGE2_ID_FFS_STAGE1_5
|
||||
# elif defined(FSYS_EXT2FS)
|
||||
# define STAGE2_ID STAGE2_ID_E2FS_STAGE1_5
|
||||
# elif defined(FSYS_FAT)
|
||||
# define STAGE2_ID STAGE2_ID_FAT_STAGE1_5
|
||||
# elif defined(FSYS_MINIX)
|
||||
# define STAGE2_ID STAGE2_ID_MINIX_STAGE1_5
|
||||
# else
|
||||
# error "unknown Stage 2"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -47,6 +47,9 @@ check fat_stage1_5 31744
|
|||
# Likewise.
|
||||
check e2fs_stage1_5 31744
|
||||
|
||||
# Likewise.
|
||||
check minix_stage1_5 31744
|
||||
|
||||
# This limitation is arbitrary; If you want to make this larger, just
|
||||
# modify Stage 1.
|
||||
check stage2 46080
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue