Help message changes, and a little fix for partition hiding.
This commit is contained in:
parent
82889257ad
commit
99c588976f
5 changed files with 385 additions and 400 deletions
194
ChangeLog
194
ChangeLog
|
@ -1,3 +1,19 @@
|
||||||
|
1999-09-09 Gordon Matzigkeit <gord@fig.org>
|
||||||
|
|
||||||
|
* docs/grub.texi (Commands): Synchronize descriptions with
|
||||||
|
builtins.c.
|
||||||
|
|
||||||
|
* stage2/builtins.c (hide_func): Use set_partition_hidden_flag.
|
||||||
|
(unhide_func): Likewise.
|
||||||
|
Many help message cleanups. From Pavel Roskin.
|
||||||
|
|
||||||
|
* stage2/shared.h (set_partition_hidden_flag): Declare.
|
||||||
|
|
||||||
|
* stage2/disk_io.c (set_partition_hidden_flag): New function
|
||||||
|
merged from hide_partition and unhide_partition. Make sure we OR
|
||||||
|
with the inverse of the flag bit rather than XORing to unhide the
|
||||||
|
partition.
|
||||||
|
|
||||||
1999-09-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/asmstub.c (_FILE_OFFSET_BITS): Defined.
|
* grub/asmstub.c (_FILE_OFFSET_BITS): Defined.
|
||||||
|
@ -5,7 +21,7 @@
|
||||||
instead of int to lseek, and compare the return value with
|
instead of int to lseek, and compare the return value with
|
||||||
OFFSET. Reported by Pavel Roskin.
|
OFFSET. Reported by Pavel Roskin.
|
||||||
(grub_stage2) [!__linux__ && !__GNU__]: Print a warning message.
|
(grub_stage2) [!__linux__ && !__GNU__]: Print a warning message.
|
||||||
|
|
||||||
1999-09-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/stage2.c (run_menu): If run_script is successfully
|
* stage2/stage2.c (run_menu): If run_script is successfully
|
||||||
|
@ -14,13 +30,13 @@
|
||||||
zero.
|
zero.
|
||||||
* stage2/cmdline.c (run_script): If ERRNUM is non-zero, wait an
|
* stage2/cmdline.c (run_script): If ERRNUM is non-zero, wait an
|
||||||
input character, whether FALLBACK is less than zero or not.
|
input character, whether FALLBACK is less than zero or not.
|
||||||
|
|
||||||
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/builtins.c (configfile_func): New function.
|
* stage2/builtins.c (configfile_func): New function.
|
||||||
(builtin_configfile): New variable.
|
(builtin_configfile): New variable.
|
||||||
(builtin_table): Added the pointer to BUILTIN_CONFIGFILE.
|
(builtin_table): Added the pointer to BUILTIN_CONFIGFILE.
|
||||||
|
|
||||||
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Pavel Roskin:
|
From Pavel Roskin:
|
||||||
|
@ -35,12 +51,12 @@
|
||||||
(imps_lapic_addr): Likewise.
|
(imps_lapic_addr): Likewise.
|
||||||
(imps_cpu_apic_map): Likewise.
|
(imps_cpu_apic_map): Likewise.
|
||||||
(imps_apic_cpu_map): Likewise.
|
(imps_apic_cpu_map): Likewise.
|
||||||
|
|
||||||
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/builtins.c (testload_func): Fix the typos: 0x2000000 ->
|
* stage2/builtins.c (testload_func): Fix the typos: 0x2000000 ->
|
||||||
0x200000 and 0x3000000 -> 0x300000.
|
0x200000 and 0x3000000 -> 0x300000.
|
||||||
|
|
||||||
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Hisazumi Kenji <nel@soraneko.com>:
|
From Hisazumi Kenji <nel@soraneko.com>:
|
||||||
|
@ -50,7 +66,7 @@
|
||||||
(MAPBUF_LEN): Likewise.
|
(MAPBUF_LEN): Likewise.
|
||||||
(ffs_mount): Set MAPBLOCK_OFFSET to -1.
|
(ffs_mount): Set MAPBLOCK_OFFSET to -1.
|
||||||
(block_map): Added partial read support.
|
(block_map): Added partial read support.
|
||||||
|
|
||||||
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/cmdline.c (find_command): If COMMAND is less than
|
* stage2/cmdline.c (find_command): If COMMAND is less than
|
||||||
|
@ -72,7 +88,7 @@
|
||||||
(builtin_testload): Likewise.
|
(builtin_testload): Likewise.
|
||||||
(builtin_unhide): Likewise.
|
(builtin_unhide): Likewise.
|
||||||
(builtin_uppermem): Likewise.
|
(builtin_uppermem): Likewise.
|
||||||
|
|
||||||
1999-09-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
The internal of the command handling is heavily modified, and
|
The internal of the command handling is heavily modified, and
|
||||||
|
@ -154,7 +170,7 @@
|
||||||
new builtin commands interface.
|
new builtin commands interface.
|
||||||
Run enter_cmdline forever.
|
Run enter_cmdline forever.
|
||||||
If run_menu returns, restart the loop.
|
If run_menu returns, restart the loop.
|
||||||
|
|
||||||
1999-09-04 Pavel Roskin <pavel_roskin@geocities.com>
|
1999-09-04 Pavel Roskin <pavel_roskin@geocities.com>
|
||||||
|
|
||||||
* docs/menu.lst: More meaningful examples. Not using (0x80,0)
|
* docs/menu.lst: More meaningful examples. Not using (0x80,0)
|
||||||
|
@ -167,26 +183,26 @@
|
||||||
stage2.
|
stage2.
|
||||||
* stage2/gunzip.c [NO_DECOMPRESSION]: Disable all code if
|
* stage2/gunzip.c [NO_DECOMPRESSION]: Disable all code if
|
||||||
decompression is disabled.
|
decompression is disabled.
|
||||||
|
|
||||||
1999-09-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/boot.c (load_image): Use PHDR->P_PADDR instead of
|
* stage2/boot.c (load_image): Use PHDR->P_PADDR instead of
|
||||||
PHDR->P_VADDR. Reported by Ramon van Handel <vhandel@chem.vu.nl>.
|
PHDR->P_VADDR. Reported by Ramon van Handel <vhandel@chem.vu.nl>.
|
||||||
|
|
||||||
1999-09-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* docs/help2man: Upgraded to 1.013.
|
* docs/help2man: Upgraded to 1.013.
|
||||||
* docs/grub.8: Regenerated.
|
* docs/grub.8: Regenerated.
|
||||||
|
|
||||||
1999-09-02 Pavel Roskin <pavel_roskin@geocities.com>
|
1999-09-02 Pavel Roskin <pavel_roskin@geocities.com>
|
||||||
|
|
||||||
* stage2/cmdline.c (enter_cmdline) [GRUB_UTIL]: Add a space in
|
* stage2/cmdline.c (enter_cmdline) [GRUB_UTIL]: Add a space in
|
||||||
the LBA warning message.
|
the LBA warning message.
|
||||||
|
|
||||||
1999-09-02 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-02 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
The character `=' after a command is now optional.
|
The character `=' after a command is now optional.
|
||||||
|
|
||||||
* stage2/char_io.c (get_cmdline): Search for a space or a equal
|
* stage2/char_io.c (get_cmdline): Search for a space or a equal
|
||||||
character after the first word in CMDLINE when TAB lists
|
character after the first word in CMDLINE when TAB lists
|
||||||
completions, instead of just searching for a eqaul character.
|
completions, instead of just searching for a eqaul character.
|
||||||
|
@ -195,26 +211,26 @@
|
||||||
(commands): Delete all the equal characters.
|
(commands): Delete all the equal characters.
|
||||||
* docs/menu.lst: Likewise.
|
* docs/menu.lst: Likewise.
|
||||||
* docs/grub.texi: Likewise.
|
* docs/grub.texi: Likewise.
|
||||||
|
|
||||||
1999-09-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-09-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/asmstub.c (env_for_exit): New variable.
|
* grub/asmstub.c (env_for_exit): New variable.
|
||||||
(grub_stage2): Do a setjmp in doit, and when it returns
|
(grub_stage2): Do a setjmp in doit, and when it returns
|
||||||
non-zero, set STATUS to 1 if ERRNUM is non-zero.
|
non-zero, set STATUS to 1 if ERRNUM is non-zero.
|
||||||
(stop): Call longjmp instead of exit.
|
(stop): Call longjmp instead of exit.
|
||||||
|
|
||||||
1999-08-31 Pavel Roskin <pavel_roskin@geocities.com>
|
1999-08-31 Pavel Roskin <pavel_roskin@geocities.com>
|
||||||
|
|
||||||
* stage2/boot.c [GRUB_UTIL] (bsd_boot_entry): New function.
|
* stage2/boot.c [GRUB_UTIL] (bsd_boot_entry): New function.
|
||||||
(bsd_boot) [GRUB_UTIL]: Set ENTRY_ADDR to BSD_BOOT_ENTRY to fake
|
(bsd_boot) [GRUB_UTIL]: Set ENTRY_ADDR to BSD_BOOT_ENTRY to fake
|
||||||
the *BSD boot.
|
the *BSD boot.
|
||||||
|
|
||||||
1999-08-31 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-31 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/fsys_fat.c (fat_create_blocklist): Cast FAT_BUF to
|
* stage2/fsys_fat.c (fat_create_blocklist): Cast FAT_BUF to
|
||||||
unsigned short * instead of unsigned long *. Suggested by Pavel
|
unsigned short * instead of unsigned long *. Suggested by Pavel
|
||||||
Roskin.
|
Roskin.
|
||||||
|
|
||||||
1999-08-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Edward Killips <ekillips@triton.net>:
|
From Edward Killips <ekillips@triton.net>:
|
||||||
|
@ -223,7 +239,7 @@
|
||||||
* stage2/disk_io.c (unhide_partition): New function.
|
* stage2/disk_io.c (unhide_partition): New function.
|
||||||
(hide_partition): Likewise.
|
(hide_partition): Likewise.
|
||||||
* stage2/pc_slice.h (PC_SLICE_TYPE_HIDDEN_FLAG): New macro.
|
* stage2/pc_slice.h (PC_SLICE_TYPE_HIDDEN_FLAG): New macro.
|
||||||
|
|
||||||
1999-08-29 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-29 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Pavel Roskin <pavel_roskin@geocities.com>:
|
From Pavel Roskin <pavel_roskin@geocities.com>:
|
||||||
|
@ -233,7 +249,7 @@
|
||||||
MINIX_SUPER_MAGIC, and set NAMELEN to 30 if it is
|
MINIX_SUPER_MAGIC, and set NAMELEN to 30 if it is
|
||||||
MINIX_SUPER_MAGIC2.
|
MINIX_SUPER_MAGIC2.
|
||||||
(minix_dir): Use NAMELEN instead of MINIX_NAME_LEN.
|
(minix_dir): Use NAMELEN instead of MINIX_NAME_LEN.
|
||||||
|
|
||||||
1999-08-29 Pavel Roskin <pavel_roslin@geocities.com>
|
1999-08-29 Pavel Roskin <pavel_roslin@geocities.com>
|
||||||
|
|
||||||
* grub/Makefile.am, stage1/Makefile.am, stage2/Makefile.am:
|
* grub/Makefile.am, stage1/Makefile.am, stage2/Makefile.am:
|
||||||
|
@ -244,7 +260,7 @@
|
||||||
|
|
||||||
* stage2/fsys_fat.c (fat_create_blocklist): Return 1 for the
|
* stage2/fsys_fat.c (fat_create_blocklist): Return 1 for the
|
||||||
root directory on FAT12 and FAT16.
|
root directory on FAT12 and FAT16.
|
||||||
|
|
||||||
1999-08-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/boot.c (load_image): Accept two arguments, KERNEL and
|
* stage2/boot.c (load_image): Accept two arguments, KERNEL and
|
||||||
|
@ -259,7 +275,7 @@
|
||||||
HEAP for the Multiboot command-line buffer.
|
HEAP for the Multiboot command-line buffer.
|
||||||
* stage2/shared.h (MB_CMDLINE_BUF): New macro.
|
* stage2/shared.h (MB_CMDLINE_BUF): New macro.
|
||||||
(MB_CMDLINE_BUFLEN): Likewise.
|
(MB_CMDLINE_BUFLEN): Likewise.
|
||||||
|
|
||||||
1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* docs/Makefile.am [GRUB_MAINT] (grub.8): The argument for the
|
* docs/Makefile.am [GRUB_MAINT] (grub.8): The argument for the
|
||||||
|
@ -267,7 +283,7 @@
|
||||||
* docs/grub.8: Regenerated.
|
* docs/grub.8: Regenerated.
|
||||||
* docs/grub.texi: Do not use the name "the Stage 2 emulator" any
|
* docs/grub.texi: Do not use the name "the Stage 2 emulator" any
|
||||||
more. Use the name "the grub shell" instead.
|
more. Use the name "the grub shell" instead.
|
||||||
|
|
||||||
1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Klaus Reichl <klaus.reichl@alcatel.at>:
|
From Klaus Reichl <klaus.reichl@alcatel.at>:
|
||||||
|
@ -291,7 +307,7 @@
|
||||||
STAGE2_ID_MINIX_STAGE1_5.
|
STAGE2_ID_MINIX_STAGE1_5.
|
||||||
* grub/Makefile.am (AM_CFLAGS): Added -DFSYS_MINIX=1.
|
* grub/Makefile.am (AM_CFLAGS): Added -DFSYS_MINIX=1.
|
||||||
* configure.in (--disable-minix): New option.
|
* configure.in (--disable-minix): New option.
|
||||||
|
|
||||||
1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Jochen Hoenicke <jochen@gnu.org>:
|
From Jochen Hoenicke <jochen@gnu.org>:
|
||||||
|
@ -316,7 +332,7 @@
|
||||||
(PC_SLICE_TYPE_FAT32_LBA): Likewise.
|
(PC_SLICE_TYPE_FAT32_LBA): Likewise.
|
||||||
(PC_SLICE_TYPE_FAT16_LBA): Likewise.
|
(PC_SLICE_TYPE_FAT16_LBA): Likewise.
|
||||||
(IS_PC_SLICE_TYPE_FAT): Likewise.
|
(IS_PC_SLICE_TYPE_FAT): Likewise.
|
||||||
|
|
||||||
1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/fsys_ffs.c (ffs_mount): Do not shift the fs type
|
* stage2/fsys_ffs.c (ffs_mount): Do not shift the fs type
|
||||||
|
@ -324,12 +340,12 @@
|
||||||
<takehiro@coral.ocn.ne.jp>.
|
<takehiro@coral.ocn.ne.jp>.
|
||||||
* stage2/fsys_fat.c (fat_mount): Do not shift the fs type
|
* stage2/fsys_fat.c (fat_mount): Do not shift the fs type
|
||||||
FS_MSDOS.
|
FS_MSDOS.
|
||||||
|
|
||||||
1999-08-13 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-13 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
Pavel Roskin's patch that adds new options to disable arbitrary
|
Pavel Roskin's patch that adds new options to disable arbitrary
|
||||||
filesystems is heavily modified and applied.
|
filesystems is heavily modified and applied.
|
||||||
|
|
||||||
* configure.in (--disable-ext2fs): New option.
|
* configure.in (--disable-ext2fs): New option.
|
||||||
(--disable-fat): Likewise.
|
(--disable-fat): Likewise.
|
||||||
(--disable-ffs): Likewise.
|
(--disable-ffs): Likewise.
|
||||||
|
@ -338,14 +354,14 @@
|
||||||
-DFSYS_FAT=1 and -DFSYS_FFS=1.
|
-DFSYS_FAT=1 and -DFSYS_FFS=1.
|
||||||
* stage2/Makefile.am (libgrub_a_CFLAGS): Likewise.
|
* stage2/Makefile.am (libgrub_a_CFLAGS): Likewise.
|
||||||
(stage2_exec_CFLAGS): Added @FSYS_CFLAGS@.
|
(stage2_exec_CFLAGS): Added @FSYS_CFLAGS@.
|
||||||
* stage2/filesys.h
|
* stage2/filesys.h
|
||||||
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_FFS): Deleted.
|
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_FFS): Deleted.
|
||||||
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_FAT): Likewise.
|
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_FAT): Likewise.
|
||||||
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_EXT2FS): Likewise.
|
[!(FSYS_FFS || FSYS_FAT || FSYS_EXT2FS)] (FSYS_EXT2FS): Likewise.
|
||||||
* stage2/fsys_ext2fs.c [!FSYS_EXT2FS]: Do not define anything.
|
* stage2/fsys_ext2fs.c [!FSYS_EXT2FS]: Do not define anything.
|
||||||
* stage2/fsys_fat.c [!FSYS_FAT]: Likewise.
|
* stage2/fsys_fat.c [!FSYS_FAT]: Likewise.
|
||||||
* stage2/fsys_ffs.c [!FSYS_FFS]: Likewise.
|
* stage2/fsys_ffs.c [!FSYS_FFS]: Likewise.
|
||||||
|
|
||||||
1999-08-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage1/stage1_lba.S: Use STAGE1_DRP_ADDR for the address of
|
* stage1/stage1_lba.S: Use STAGE1_DRP_ADDR for the address of
|
||||||
|
@ -353,7 +369,7 @@
|
||||||
(drive_parameter): Deleted.
|
(drive_parameter): Deleted.
|
||||||
* stage1/stage1.h (STAGE1_DRP_ADDR): New macro.
|
* stage1/stage1.h (STAGE1_DRP_ADDR): New macro.
|
||||||
(STAGE1_DRP_SIZE): Likewise.
|
(STAGE1_DRP_SIZE): Likewise.
|
||||||
|
|
||||||
1999-08-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/bios.c (get_diskinfo): In LBA mode, set TOTAL_SECTORS
|
* stage2/bios.c (get_diskinfo): In LBA mode, set TOTAL_SECTORS
|
||||||
|
@ -365,11 +381,11 @@
|
||||||
* stage2/shared.h (device_map): Declared.
|
* stage2/shared.h (device_map): Declared.
|
||||||
* grub/asmstub.c (device_map): Defined as a global variable
|
* grub/asmstub.c (device_map): Defined as a global variable
|
||||||
instead of a local variable.
|
instead of a local variable.
|
||||||
|
|
||||||
1999-08-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
Support the NetBSD and OpenBSD partition slices.
|
Support the NetBSD and OpenBSD partition slices.
|
||||||
|
|
||||||
* stage2/pc_slice.h (PC_SLICE_TYPE_BSD): Deleted.
|
* stage2/pc_slice.h (PC_SLICE_TYPE_BSD): Deleted.
|
||||||
(PC_SLICE_TYPE_FREEBSD): New macro.
|
(PC_SLICE_TYPE_FREEBSD): New macro.
|
||||||
(PC_SLICE_TYPE_OPENBSD): Likewise.
|
(PC_SLICE_TYPE_OPENBSD): Likewise.
|
||||||
|
@ -387,19 +403,19 @@
|
||||||
(real_open_partition): Use the macro IS_PC_SLICE_TYPE_BSD instead
|
(real_open_partition): Use the macro IS_PC_SLICE_TYPE_BSD instead
|
||||||
of checking if CURRENT_SLICE is equal to the BSD partition type
|
of checking if CURRENT_SLICE is equal to the BSD partition type
|
||||||
directly.
|
directly.
|
||||||
|
|
||||||
1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/cmdline.c (commands): Added geometry.
|
* stage2/cmdline.c (commands): Added geometry.
|
||||||
(enter_cmdline): If CUR_HEAP has the string "geometry", print
|
(enter_cmdline): If CUR_HEAP has the string "geometry", print
|
||||||
out the information about a drive that the argument represents.
|
out the information about a drive that the argument represents.
|
||||||
|
|
||||||
1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/stage2.c (run_menu): Terminate the string PASSWORD
|
* stage2/stage2.c (run_menu): Terminate the string PASSWORD
|
||||||
before checking if ENTERED is identical to PASSWORD. Reported
|
before checking if ENTERED is identical to PASSWORD. Reported
|
||||||
by Mark Lundeberg <aa026@pgfn.bc.ca>.
|
by Mark Lundeberg <aa026@pgfn.bc.ca>.
|
||||||
|
|
||||||
1999-08-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/stage2.c (set_line_normal): New function.
|
* stage2/stage2.c (set_line_normal): New function.
|
||||||
|
@ -410,7 +426,7 @@
|
||||||
From Pavel Roskin:
|
From Pavel Roskin:
|
||||||
* stage2/stage2.c (run_menu) [GRUB_UTIL]: Quit when pushing the
|
* stage2/stage2.c (run_menu) [GRUB_UTIL]: Quit when pushing the
|
||||||
key `q'.
|
key `q'.
|
||||||
|
|
||||||
1999-08-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-05 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* acinclude.m4 (grub_ASM_PREFIX_REQUIREMENT): New function.
|
* acinclude.m4 (grub_ASM_PREFIX_REQUIREMENT): New function.
|
||||||
|
@ -418,35 +434,35 @@
|
||||||
ADDR32 and DATA32 based on the result.
|
ADDR32 and DATA32 based on the result.
|
||||||
* stage2/asm.S: Replace addr32 and data32 prefixes with ADDR32
|
* stage2/asm.S: Replace addr32 and data32 prefixes with ADDR32
|
||||||
and DATA32 respectively.
|
and DATA32 respectively.
|
||||||
|
|
||||||
1999-08-05 Pavel Roskin <pavel_roskin@geocities.com>
|
1999-08-05 Pavel Roskin <pavel_roskin@geocities.com>
|
||||||
|
|
||||||
* stage2/boot.c (load_image): Use RAW_ADDR macro when loading
|
* stage2/boot.c (load_image): Use RAW_ADDR macro when loading
|
||||||
an a.out kernel.
|
an a.out kernel.
|
||||||
|
|
||||||
1999-08-04 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-04 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/asm.S: Make each of the addr32 and data32 prefixes
|
* stage2/asm.S: Make each of the addr32 and data32 prefixes
|
||||||
appear in the same line as it modifies, as the gas manual in
|
appear in the same line as it modifies, as the gas manual in
|
||||||
binutils-2.9.5.0.4 says "it must be in the same line".
|
binutils-2.9.5.0.4 says "it must be in the same line".
|
||||||
|
|
||||||
1999-08-04 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-04 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* boot.c (load_image): Fix a strcmp test. Reported by Pavel
|
* boot.c (load_image): Fix a strcmp test. Reported by Pavel
|
||||||
Roskin <pavel_roskin@geocities.com>.
|
Roskin <pavel_roskin@geocities.com>.
|
||||||
|
|
||||||
1999-08-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From "Dan J. Walters" <djw@cs.utexas.edu>:
|
From "Dan J. Walters" <djw@cs.utexas.edu>:
|
||||||
* stage2/i386-elf.h (EI_BRAND): New macro.
|
* stage2/i386-elf.h (EI_BRAND): New macro.
|
||||||
* stage2/boot.c (load_image): If the kernel is ELF, check if it
|
* stage2/boot.c (load_image): If the kernel is ELF, check if it
|
||||||
is a FreeBSD kernel as well as a Multiboot kernel, and if it is
|
is a FreeBSD kernel as well as a Multiboot kernel, and if it is
|
||||||
a FreeBSD kernel, then mask ENTRY_ADDR since FreeBSD requires
|
a FreeBSD kernel, then mask ENTRY_ADDR since FreeBSD requires
|
||||||
that. Likewise, mask MEMADDR.
|
that. Likewise, mask MEMADDR.
|
||||||
(bsd_boot): Set the bi_symtab and the bi_esymtab members of BI
|
(bsd_boot): Set the bi_symtab and the bi_esymtab members of BI
|
||||||
only if MBI.FLAGS has the flag MB_INFO_AOUT_SYMS. Otherwise,
|
only if MBI.FLAGS has the flag MB_INFO_AOUT_SYMS. Otherwise,
|
||||||
clear them.
|
clear them.
|
||||||
|
|
||||||
1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Pavel Roskin <pavel_roskin@geocities.com>:
|
From Pavel Roskin <pavel_roskin@geocities.com>:
|
||||||
|
@ -458,13 +474,13 @@
|
||||||
* configure.in: Check for string.h and strings.h.
|
* configure.in: Check for string.h and strings.h.
|
||||||
* grub/asmstub.c (grub_stage2): Fix a misordering in the output
|
* grub/asmstub.c (grub_stage2): Fix a misordering in the output
|
||||||
format of the inline assembly.
|
format of the inline assembly.
|
||||||
|
|
||||||
1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Pavel Roskin <pavel_roskin@geocities.com>:
|
From Pavel Roskin <pavel_roskin@geocities.com>:
|
||||||
* stage2/asm.S (get_diskinfo_standard): If the number of sectors
|
* stage2/asm.S (get_diskinfo_standard): If the number of sectors
|
||||||
returned is zero, then return an error code, even if non-carrier.
|
returned is zero, then return an error code, even if non-carrier.
|
||||||
|
|
||||||
1999-07-15 Gordon Matzigkeit <gord@zen.fig.org>
|
1999-07-15 Gordon Matzigkeit <gord@zen.fig.org>
|
||||||
|
|
||||||
* docs/Makefile.am (grub.info): Use an ugly hack to downgrade
|
* docs/Makefile.am (grub.info): Use an ugly hack to downgrade
|
||||||
|
@ -478,7 +494,7 @@
|
||||||
|
|
||||||
* grub/main.c (main): Call printf instead of grub_printf.
|
* grub/main.c (main): Call printf instead of grub_printf.
|
||||||
Reported by Klaus Reichl <a8709182@unet.univie.ac.at>.
|
Reported by Klaus Reichl <a8709182@unet.univie.ac.at>.
|
||||||
|
|
||||||
1999-07-15 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-15 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/cmdline.c (skip_to): Don't increase CMDLINE if the
|
* stage2/cmdline.c (skip_to): Don't increase CMDLINE if the
|
||||||
|
@ -495,18 +511,18 @@
|
||||||
(VIRTUAL_TO_PHYS) (inb) (outb) (cmos_write_byte)
|
(VIRTUAL_TO_PHYS) (inb) (outb) (cmos_write_byte)
|
||||||
(cmos_read_byte): ... here.
|
(cmos_read_byte): ... here.
|
||||||
* stage2/cmdline.c [!GRUB_UTIL]: Include apic.h and smp-imps.h.
|
* stage2/cmdline.c [!GRUB_UTIL]: Include apic.h and smp-imps.h.
|
||||||
|
|
||||||
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
The function ungetch is simulated so that the user can use a
|
The function ungetch is simulated so that the user can use a
|
||||||
buggy curses.
|
buggy curses.
|
||||||
|
|
||||||
* grub/asmstub.c [HAVE_LIBCURSES] (save_char): New variable.
|
* grub/asmstub.c [HAVE_LIBCURSES] (save_char): New variable.
|
||||||
(getkey) [HAVE_LIBCURSES]: If SAVE_CHAR is not ERR, return
|
(getkey) [HAVE_LIBCURSES]: If SAVE_CHAR is not ERR, return
|
||||||
SAVE_CHAR and clear it.
|
SAVE_CHAR and clear it.
|
||||||
(checkkey) [HAVE_LIBCURSES]: If SAVE_CHAR is not ERR, return
|
(checkkey) [HAVE_LIBCURSES]: If SAVE_CHAR is not ERR, return
|
||||||
SAVE_CHAR. If C is not ERR, set SAVE_CHAR to C.
|
SAVE_CHAR. If C is not ERR, set SAVE_CHAR to C.
|
||||||
|
|
||||||
1999-07-14 Pavel Roskin <pavel_roskin@geocities.com>
|
1999-07-14 Pavel Roskin <pavel_roskin@geocities.com>
|
||||||
|
|
||||||
* stage2/char_io.c (get_cmdline) [GRUB_UTIL]: Recognize
|
* stage2/char_io.c (get_cmdline) [GRUB_UTIL]: Recognize
|
||||||
|
@ -515,18 +531,18 @@
|
||||||
* grub/asmstub.c (grub_stage2) [HAVE_LIBCURSES]: Call wtimeout
|
* grub/asmstub.c (grub_stage2) [HAVE_LIBCURSES]: Call wtimeout
|
||||||
instead of nodelay.
|
instead of nodelay.
|
||||||
(getkey) [HAVE_LIBCURSES]: Likewise.
|
(getkey) [HAVE_LIBCURSES]: Likewise.
|
||||||
|
|
||||||
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage1/stage1_lba.S (probe_values): New variable. This is not
|
* stage1/stage1_lba.S (probe_values): New variable. This is not
|
||||||
used actually, but prevents `install' command from failing
|
used actually, but prevents `install' command from failing
|
||||||
bogusly.
|
bogusly.
|
||||||
|
|
||||||
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-14 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
All constants in stage1s are moved to stage1.h and renamed
|
All constants in stage1s are moved to stage1.h and renamed
|
||||||
appropriately, and include stage1.h instead.
|
appropriately, and include stage1.h instead.
|
||||||
|
|
||||||
* grub/Makefile.am (AM_CFLAGS): Added the include path to stage1.
|
* grub/Makefile.am (AM_CFLAGS): Added the include path to stage1.
|
||||||
* stage2/Makefile.am (INCLUDES): New variable.
|
* stage2/Makefile.am (INCLUDES): New variable.
|
||||||
* stage1/Makefile.am (stage1_exec_SOURCES): Added stage1.h
|
* stage1/Makefile.am (stage1_exec_SOURCES): Added stage1.h
|
||||||
|
@ -573,24 +589,24 @@
|
||||||
|
|
||||||
* stage1/stage1_lba.S: Fix a bug that incorrectly assigns the
|
* stage1/stage1_lba.S: Fix a bug that incorrectly assigns the
|
||||||
segment of buffer address.
|
segment of buffer address.
|
||||||
|
|
||||||
1999-07-13 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-13 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/boot.c (load_image): When removing "vga=...", memmove
|
* stage2/boot.c (load_image): When removing "vga=...", memmove
|
||||||
the length of VGA_END plus one.
|
the length of VGA_END plus one.
|
||||||
|
|
||||||
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/bios.c (get_diskinfo): In LBA mode, compute
|
* stage2/bios.c (get_diskinfo): In LBA mode, compute
|
||||||
TOTAL_SECTORS from DRP instead of GEOMETRY.
|
TOTAL_SECTORS from DRP instead of GEOMETRY.
|
||||||
Clear GEOMETRY->FLAGS first.
|
Clear GEOMETRY->FLAGS first.
|
||||||
|
|
||||||
* stage2/boot.c (load_image): Fix inverted lines.
|
* stage2/boot.c (load_image): Fix inverted lines.
|
||||||
|
|
||||||
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
Support Linux video mode selection.
|
Support Linux video mode selection.
|
||||||
|
|
||||||
* stage2/shared.h (LINUX_VID_MODE_OFFSET): New macro.
|
* stage2/shared.h (LINUX_VID_MODE_OFFSET): New macro.
|
||||||
(LINUX_VID_MODE_NORMAL): Likewise.
|
(LINUX_VID_MODE_NORMAL): Likewise.
|
||||||
(LINUX_VID_MODE_EXTENDED): Likewise.
|
(LINUX_VID_MODE_EXTENDED): Likewise.
|
||||||
|
@ -599,7 +615,7 @@
|
||||||
(grub_strlen): Declared.
|
(grub_strlen): Declared.
|
||||||
* stage2/boot.c (load_image): Added Linux video mode selection.
|
* stage2/boot.c (load_image): Added Linux video mode selection.
|
||||||
* stage2/char_io.c [!STAGE1_5] (grub_strlen): New function.
|
* stage2/char_io.c [!STAGE1_5] (grub_strlen): New function.
|
||||||
|
|
||||||
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/char_io.c (print_error): Print ERRNUM in the format of
|
* stage2/char_io.c (print_error): Print ERRNUM in the format of
|
||||||
|
@ -626,7 +642,7 @@
|
||||||
(grub_memmove): Likewise.
|
(grub_memmove): Likewise.
|
||||||
(grub_strstr): Likewise.
|
(grub_strstr): Likewise.
|
||||||
(grub_strcmp): Likewise.
|
(grub_strcmp): Likewise.
|
||||||
|
|
||||||
1999-07-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage1/stage1.S (sectors): Change the size to long.
|
* stage1/stage1.S (sectors): Change the size to long.
|
||||||
|
@ -643,20 +659,20 @@
|
||||||
Call 32bits div instructions instead of 16bits div instructions.
|
Call 32bits div instructions instead of 16bits div instructions.
|
||||||
Update the position where to load data from at the end of this
|
Update the position where to load data from at the end of this
|
||||||
loop, instead of the beginning.
|
loop, instead of the beginning.
|
||||||
|
|
||||||
* stage1/stage1_lba.S: New file.
|
* stage1/stage1_lba.S: New file.
|
||||||
* stage1/Makefile.am (nodist_pkgdata_DATA): Added stage1_lba.
|
* stage1/Makefile.am (nodist_pkgdata_DATA): Added stage1_lba.
|
||||||
(LDFLAGS): New variable.
|
(LDFLAGS): New variable.
|
||||||
(noinst_PROGRAMS): Added stage1_lba.exec.
|
(noinst_PROGRAMS): Added stage1_lba.exec.
|
||||||
(stage1_lba_exec_SOURCES): New variable.
|
(stage1_lba_exec_SOURCES): New variable.
|
||||||
(%: %.exec): New rule.
|
(%: %.exec): New rule.
|
||||||
|
|
||||||
1999-06-28 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-28 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/main.c (main): The third argument for strtoul is changed
|
* grub/main.c (main): The third argument for strtoul is changed
|
||||||
to 0 in the case where an option is OPT_INSTALL_PARTIION.
|
to 0 in the case where an option is OPT_INSTALL_PARTIION.
|
||||||
Reported by Pavel Roskin <pavel_roskin@geocities.com>.
|
Reported by Pavel Roskin <pavel_roskin@geocities.com>.
|
||||||
|
|
||||||
1999-06-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/shared.h (STAGE2_STAGE2_ID): New macro.
|
* stage2/shared.h (STAGE2_STAGE2_ID): New macro.
|
||||||
|
@ -675,7 +691,7 @@
|
||||||
(COMPAT_VERSION_MINOR): Set to 1.
|
(COMPAT_VERSION_MINOR): Set to 1.
|
||||||
* stage2/asm.S (stage2_id): New variable.
|
* stage2/asm.S (stage2_id): New variable.
|
||||||
* stage1/stage1.S: Change the minor version to 1.
|
* stage1/stage1.S: Change the minor version to 1.
|
||||||
|
|
||||||
1999-06-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* configure.in (CFLAGS): Set to "-g", since only this flag is
|
* configure.in (CFLAGS): Set to "-g", since only this flag is
|
||||||
|
@ -693,20 +709,20 @@
|
||||||
|
|
||||||
* stage2/asm.S (chain_stage2): Pass CURRENT_PARTITION and
|
* stage2/asm.S (chain_stage2): Pass CURRENT_PARTITION and
|
||||||
CURRENT_DRIVE, instead of INSTALL_PARTITION and BOOT_DRIVE.
|
CURRENT_DRIVE, instead of INSTALL_PARTITION and BOOT_DRIVE.
|
||||||
|
|
||||||
1999-06-27 Pavel Roskin <pavel_roskin@geocities.com>
|
1999-06-27 Pavel Roskin <pavel_roskin@geocities.com>
|
||||||
|
|
||||||
* configure.in: set CFLAGS to "-Os -g" for compilers which
|
* configure.in: set CFLAGS to "-Os -g" for compilers which
|
||||||
understand "-Os" if CFLAGS is not already set. Use
|
understand "-Os" if CFLAGS is not already set. Use
|
||||||
"-O2 -fno-strength-reduce -fno-unroll-loops -g" for older gcc
|
"-O2 -fno-strength-reduce -fno-unroll-loops -g" for older gcc
|
||||||
versions.
|
versions.
|
||||||
|
|
||||||
1999-06-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/disk_io.c (attempt_mount) [STAGE1_5]: Set FSYS_TYPE to
|
* stage2/disk_io.c (attempt_mount) [STAGE1_5]: Set FSYS_TYPE to
|
||||||
0, and set it to NUM_FSYS if mount fails.
|
0, and set it to NUM_FSYS if mount fails.
|
||||||
(real_open_partition): Call rawread in Stage 1.5 as well.
|
(real_open_partition): Call rawread in Stage 1.5 as well.
|
||||||
|
|
||||||
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* Makefile.am (SUBDIRS): Change the order of the directories so
|
* Makefile.am (SUBDIRS): Change the order of the directories so
|
||||||
|
@ -716,12 +732,12 @@
|
||||||
* docs/help2man: Copied from help2man-1.012, which contains my
|
* docs/help2man: Copied from help2man-1.012, which contains my
|
||||||
previous change.
|
previous change.
|
||||||
* docs/grub.8: Regenerated.
|
* docs/grub.8: Regenerated.
|
||||||
|
|
||||||
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
Build process is cleaned up. Stage 2 and Stage 1.5's are all
|
Build process is cleaned up. Stage 2 and Stage 1.5's are all
|
||||||
built in the directory stage2.
|
built in the directory stage2.
|
||||||
|
|
||||||
From Pavel Roskin <pavel_roskin@geocities.com>:
|
From Pavel Roskin <pavel_roskin@geocities.com>:
|
||||||
* Makefile.am (SUBDIRS): e2fs_stage1_5, ffs_stage1_5,
|
* Makefile.am (SUBDIRS): e2fs_stage1_5, ffs_stage1_5,
|
||||||
fat_stage1_5 and shared_src are removed.
|
fat_stage1_5 and shared_src are removed.
|
||||||
|
@ -853,15 +869,15 @@
|
||||||
(ffs_stage1_5_exec_CFLAGS): Likewise.
|
(ffs_stage1_5_exec_CFLAGS): Likewise.
|
||||||
(ffs_stage1_5_exec_LDFLAGS): Likewise.
|
(ffs_stage1_5_exec_LDFLAGS): Likewise.
|
||||||
(% : %.exec): New rule.
|
(% : %.exec): New rule.
|
||||||
|
|
||||||
* stage2/size_test: New file, for checking for the sizes of
|
* stage2/size_test: New file, for checking for the sizes of
|
||||||
Stage 2 and Stage 1.5's.
|
Stage 2 and Stage 1.5's.
|
||||||
|
|
||||||
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-24 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage1/stage1.S: Call testb instead of andb when checking if
|
* stage1/stage1.S: Call testb instead of andb when checking if
|
||||||
the drive is a floppy.
|
the drive is a floppy.
|
||||||
|
|
||||||
1999-06-23 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-23 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/asmstub.c [__linux__]: Include linux/fs.h for BLKFLSBUF.
|
* grub/asmstub.c [__linux__]: Include linux/fs.h for BLKFLSBUF.
|
||||||
|
@ -887,11 +903,11 @@
|
||||||
(opt_section): New variable.
|
(opt_section): New variable.
|
||||||
(section): Likewise.
|
(section): Likewise.
|
||||||
* docs/grub.8: Produced by help2man automatically.
|
* docs/grub.8: Produced by help2man automatically.
|
||||||
|
|
||||||
1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* shared_src/char_io.c (get_cmdline): Add two missing `break's.
|
* shared_src/char_io.c (get_cmdline): Add two missing `break's.
|
||||||
|
|
||||||
* shared_src/cmdline.c (commands): Add quit.
|
* shared_src/cmdline.c (commands): Add quit.
|
||||||
(enter_cmdline): Change the return type to cmdline_t, and return
|
(enter_cmdline): Change the return type to cmdline_t, and return
|
||||||
CMDLINE_OK if successful, otherwise CMDLINE_ERROR if fail.
|
CMDLINE_OK if successful, otherwise CMDLINE_ERROR if fail.
|
||||||
|
@ -907,12 +923,12 @@
|
||||||
otherwise return MENU_OK.
|
otherwise return MENU_OK.
|
||||||
(cmain): If enter_cmdline aborts, then break the command-line
|
(cmain): If enter_cmdline aborts, then break the command-line
|
||||||
loop and return. If run_menu aborts, then return.
|
loop and return. If run_menu aborts, then return.
|
||||||
|
|
||||||
1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-22 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* shared_src/Makefile.am (EXTRA_DIST): Add bios.c. Reported by
|
* shared_src/Makefile.am (EXTRA_DIST): Add bios.c. Reported by
|
||||||
Pavel Roskin <pavel_roskin@geocities.com>.
|
Pavel Roskin <pavel_roskin@geocities.com>.
|
||||||
|
|
||||||
1999-06-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* docs/Makefile.am (html): Deleted.
|
* docs/Makefile.am (html): Deleted.
|
||||||
|
@ -931,7 +947,7 @@
|
||||||
* docs/commands.txt: Likewise.
|
* docs/commands.txt: Likewise.
|
||||||
* docs/embedded_data.txt: Likewise.
|
* docs/embedded_data.txt: Likewise.
|
||||||
* docs/filesystem.txt: Likewise.
|
* docs/filesystem.txt: Likewise.
|
||||||
|
|
||||||
1999-06-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Alexander K. Hudek <alexhudek@home.com>:
|
From Alexander K. Hudek <alexhudek@home.com>:
|
||||||
|
@ -940,12 +956,12 @@
|
||||||
* shared_src/pc_slice.c (PC_SLICE_TYPE_WIN95_EXTENDED): New
|
* shared_src/pc_slice.c (PC_SLICE_TYPE_WIN95_EXTENDED): New
|
||||||
macro.
|
macro.
|
||||||
* shared_src/bios.c (biosdisk): Clear the reserved member of DAP.
|
* shared_src/bios.c (biosdisk): Clear the reserved member of DAP.
|
||||||
|
|
||||||
1999-06-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-08 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
Color-menu support based on Peter Astrand
|
Color-menu support based on Peter Astrand
|
||||||
<altic@lysator.liu.se>'s patch.
|
<altic@lysator.liu.se>'s patch.
|
||||||
|
|
||||||
* shared_src/asm.S (nocursor): New function.
|
* shared_src/asm.S (nocursor): New function.
|
||||||
* shared_src/cmdline.c (normal_color): New variable.
|
* shared_src/cmdline.c (normal_color): New variable.
|
||||||
(highlight_color): Likewise.
|
(highlight_color): Likewise.
|
||||||
|
@ -962,12 +978,12 @@
|
||||||
(cmain): Initialize normal_color and highlight_color. Handle
|
(cmain): Initialize normal_color and highlight_color. Handle
|
||||||
the color command in the same way as the command-line
|
the color command in the same way as the command-line
|
||||||
interface.
|
interface.
|
||||||
|
|
||||||
1999-06-07 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-07 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* e2fs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 31744.
|
* e2fs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 31744.
|
||||||
* fat_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Likewise.
|
* fat_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Likewise.
|
||||||
|
|
||||||
1999-06-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-06 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
The debug version of Stage 2 is removed.
|
The debug version of Stage 2 is removed.
|
||||||
|
@ -994,7 +1010,7 @@
|
||||||
* Makefile.am (SUBDIRS): stage2_debug is removed.
|
* Makefile.am (SUBDIRS): stage2_debug is removed.
|
||||||
* stage2_debug/Makefile.am: Deleted.
|
* stage2_debug/Makefile.am: Deleted.
|
||||||
* stage2_debug/Makefile.in: Likewise.
|
* stage2_debug/Makefile.in: Likewise.
|
||||||
|
|
||||||
1999-06-02 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-02 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/main.c (verbose): New variable.
|
* grub/main.c (verbose): New variable.
|
||||||
|
@ -1006,7 +1022,7 @@
|
||||||
(main): Handle OPT_VERBOSE and OPT_READ_ONLY.
|
(main): Handle OPT_VERBOSE and OPT_READ_ONLY.
|
||||||
If HOLD and VERBOSE are non-zero, then display the message
|
If HOLD and VERBOSE are non-zero, then display the message
|
||||||
about how to restart /sbin/grub.
|
about how to restart /sbin/grub.
|
||||||
|
|
||||||
* shared_src/shared.h (verbose) [GRUB_UTIL]: Declared.
|
* shared_src/shared.h (verbose) [GRUB_UTIL]: Declared.
|
||||||
(read_only) [GRUB_UTIL]: Likewise.
|
(read_only) [GRUB_UTIL]: Likewise.
|
||||||
|
|
||||||
|
@ -1022,7 +1038,7 @@
|
||||||
|
|
||||||
* shared_src/disk_io.c (set_device) [STAGE1_5]: Eliminate
|
* shared_src/disk_io.c (set_device) [STAGE1_5]: Eliminate
|
||||||
completion code.
|
completion code.
|
||||||
|
|
||||||
1999-06-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/asmstub.c: Do not use I_AM_VERY_BRAVE any more.
|
* grub/asmstub.c: Do not use I_AM_VERY_BRAVE any more.
|
||||||
|
@ -1033,7 +1049,7 @@
|
||||||
instead of 0, and check if it is equal to -1 instead of 0 when
|
instead of 0, and check if it is equal to -1 instead of 0 when
|
||||||
close it.
|
close it.
|
||||||
(get_diskinfo): Treat -1 as non-caching state instead of 0.
|
(get_diskinfo): Treat -1 as non-caching state instead of 0.
|
||||||
|
|
||||||
1999-06-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-06-01 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
Reported from Klaus Reichl <a8709182@unet.univie.ac.at>:
|
Reported from Klaus Reichl <a8709182@unet.univie.ac.at>:
|
||||||
|
@ -1059,12 +1075,12 @@
|
||||||
when the functon print_completion modifies CMDLINE.
|
when the functon print_completion modifies CMDLINE.
|
||||||
* shared_src/stage2.c (get_line_from_config): Fix LITERAL
|
* shared_src/stage2.c (get_line_from_config): Fix LITERAL
|
||||||
handling.
|
handling.
|
||||||
|
|
||||||
1999-05-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-05-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/asmstub.c (grub_stage2): Fix a memory leak that FP is
|
* grub/asmstub.c (grub_stage2): Fix a memory leak that FP is
|
||||||
not closed.
|
not closed.
|
||||||
|
|
||||||
1999-05-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-05-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/main.c: Replace OPT_DISABLE_CONFIG_FILE and
|
* grub/main.c: Replace OPT_DISABLE_CONFIG_FILE and
|
||||||
|
@ -1076,7 +1092,7 @@
|
||||||
Change the help message according to the changes above.
|
Change the help message according to the changes above.
|
||||||
(main): Handle OPT_NO_CONFIG_FILE and OPT_NO_CURSES, instead
|
(main): Handle OPT_NO_CONFIG_FILE and OPT_NO_CURSES, instead
|
||||||
of OPT_DISABLE_CONFIG_FILE and OPT_DISABLE_CURSES.
|
of OPT_DISABLE_CONFIG_FILE and OPT_DISABLE_CURSES.
|
||||||
|
|
||||||
1999-05-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-05-21 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* docs/TODO: Moved to ...
|
* docs/TODO: Moved to ...
|
||||||
|
@ -1086,7 +1102,7 @@
|
||||||
* docs/COPYING: Removed.
|
* docs/COPYING: Removed.
|
||||||
* docs/Makefile.am (EXTRA_DIST): Get rid of BUGS.
|
* docs/Makefile.am (EXTRA_DIST): Get rid of BUGS.
|
||||||
* Makefile.am (EXTRA_DIST): Set to BUGS.
|
* Makefile.am (EXTRA_DIST): Set to BUGS.
|
||||||
|
|
||||||
1999-05-17 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-05-17 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* acinclude.m4 (grub_ASM_EXT_C): Do not overrun the command
|
* acinclude.m4 (grub_ASM_EXT_C): Do not overrun the command
|
||||||
|
@ -1096,12 +1112,12 @@
|
||||||
|
|
||||||
* docs/Makefile.am (info_TEXINFOS): Added multiboot.texi.
|
* docs/Makefile.am (info_TEXINFOS): Added multiboot.texi.
|
||||||
* docs/multiboot.texi: New file. From Kunihiro Ishiguro.
|
* docs/multiboot.texi: New file. From Kunihiro Ishiguro.
|
||||||
|
|
||||||
1999-05-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-05-12 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* grub/asmstub.c: Include <errno.h>. Reported by Kunihiro
|
* grub/asmstub.c: Include <errno.h>. Reported by Kunihiro
|
||||||
Ishiguro <kunihiro@zebra.org>.
|
Ishiguro <kunihiro@zebra.org>.
|
||||||
|
|
||||||
1999-05-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-05-11 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
Reported by Brian Brunswick <brian@skarpsey.demon.co.uk>:
|
Reported by Brian Brunswick <brian@skarpsey.demon.co.uk>:
|
||||||
|
@ -1130,7 +1146,7 @@
|
||||||
* e2fs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 81920.
|
* e2fs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 81920.
|
||||||
* fat_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Likewise.
|
* fat_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Likewise.
|
||||||
* ffs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 7168.
|
* ffs_stage1_5/Makefile.am (IMPORTANT_SIZE_LIMIT): Set to 7168.
|
||||||
|
|
||||||
1999-05-03 Gordon Matzigkeit <gord@trick.fig.org>
|
1999-05-03 Gordon Matzigkeit <gord@trick.fig.org>
|
||||||
|
|
||||||
From Pavel Roskin:
|
From Pavel Roskin:
|
||||||
|
|
247
docs/grub.texi
247
docs/grub.texi
|
@ -639,10 +639,6 @@ start, where they are ignored.
|
||||||
Commands usable in configuration files only.
|
Commands usable in configuration files only.
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@item timeout @var{sec}
|
|
||||||
Set a timeout, in @var{sec} seconds, before automatically booting the
|
|
||||||
default entry (normally the first entry defined).
|
|
||||||
|
|
||||||
@item default @var{num}
|
@item default @var{num}
|
||||||
Set the default entry to entry number @var{num} (if not specified, it is
|
Set the default entry to entry number @var{num} (if not specified, it is
|
||||||
0, the first entry).
|
0, the first entry).
|
||||||
|
@ -651,8 +647,8 @@ Set the default entry to entry number @var{num} (if not specified, it is
|
||||||
Go into unattended boot mode: if the default boot entry has any errors,
|
Go into unattended boot mode: if the default boot entry has any errors,
|
||||||
instead of waiting for the user to do anything, it immediately starts
|
instead of waiting for the user to do anything, it immediately starts
|
||||||
over using the @var{num} entry (same numbering as the @code{default}
|
over using the @var{num} entry (same numbering as the @code{default}
|
||||||
command). This obviously doesn't help if the machine was in the middle
|
command). This obviously won't help if the machine was rebooted by a
|
||||||
of the boot process (after leaving GRUB's code) and rebooted.
|
kernel that GRUB loaded.
|
||||||
|
|
||||||
@item password @var{passwd} @var{new-config-file}
|
@item password @var{passwd} @var{new-config-file}
|
||||||
Disable all interactive editing control (menu entry editor and
|
Disable all interactive editing control (menu entry editor and
|
||||||
|
@ -660,6 +656,10 @@ command line). If the password @var{passwd} is entered, it loads the
|
||||||
@var{new-config-file} as a new config file and restarts the GRUB Stage
|
@var{new-config-file} as a new config file and restarts the GRUB Stage
|
||||||
2.
|
2.
|
||||||
|
|
||||||
|
@item timeout @var{sec}
|
||||||
|
Set a timeout, in @var{sec} seconds, before automatically booting the
|
||||||
|
default entry (normally the first entry defined).
|
||||||
|
|
||||||
@item title @var{name}@dots{}
|
@item title @var{name}@dots{}
|
||||||
Start a new boot entry, and set its name to the contents of the rest of
|
Start a new boot entry, and set its name to the contents of the rest of
|
||||||
the line, starting with the first non-space character.
|
the line, starting with the first non-space character.
|
||||||
|
@ -668,111 +668,19 @@ the line, starting with the first non-space character.
|
||||||
Commands usable both interactively and in configuration files:
|
Commands usable both interactively and in configuration files:
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@item pause @var{message}@dots{}
|
|
||||||
Print the @var{message}, then wait until a key is pressed. Note that
|
|
||||||
placing @key{^G} (ASCII code 7) in the message will cause the speaker to
|
|
||||||
emit the standard beep sound, which is useful when prompting the user to
|
|
||||||
change floppies.
|
|
||||||
|
|
||||||
@item uppermem @var{kbytes}
|
|
||||||
Force GRUB to ignore what it found during the autoprobe of the memory
|
|
||||||
available to the system, and to use @var{kbytes} as the number of
|
|
||||||
kilobytes of upper memory installed. Any address range maps of the
|
|
||||||
system are discarded.
|
|
||||||
|
|
||||||
@strong{Caution:} This should be used with great caution, and should
|
|
||||||
only be necessary on some old machines. GRUB's BIOS probe can pick up
|
|
||||||
all @sc{ram} on all new machines the author has ever heard of. It can
|
|
||||||
also be used for debugging purposes to lie to an OS.
|
|
||||||
|
|
||||||
@item root @var{device} [@var{hdbias}]
|
|
||||||
Set the current @dfn{root partition} to the device @var{device}, then
|
|
||||||
attempt to mount it to get the partition size (for passing the partition
|
|
||||||
descriptor in @code{ES:ESI}, used by some chain-loaded bootloaders), the
|
|
||||||
BSD drive-type (for booting BSD kernels using their native boot format),
|
|
||||||
and fix up automatic determination of the PC partition where a BSD
|
|
||||||
sub-partition is located. The optional @var{hdbias} parameter is a
|
|
||||||
number to tell a kernel which is using one of the BSD boot methodologies
|
|
||||||
how many BIOS drive numbers are on controllers before the current
|
|
||||||
one. An example is if there is an IDE disk and a SCSI disk, then set the
|
|
||||||
root partition normally, except for a kernel using a BSD boot
|
|
||||||
methodology (FreeBSD or NetBSD), then use a @samp{1} for @var{hdbias}.
|
|
||||||
|
|
||||||
@item rootnoverify @var{device} [@var{hdbias}]
|
|
||||||
Similar to @command{root}, but don't attempt to mount the
|
|
||||||
partition. This is useful for when an OS is outside of the area of the
|
|
||||||
disk that GRUB can read, but setting the correct root partition is still
|
|
||||||
desired. Note that the items mentioned in @command{root} above which
|
|
||||||
derived from attempting the mount will NOT work correctly.
|
|
||||||
|
|
||||||
@item chainloader @var{file}
|
|
||||||
Load @var{file} as a chain-loader. Like any other file loaded by the
|
|
||||||
filesystem code, it can use the blocklist notation to grab the first
|
|
||||||
sector of the current partition with @samp{+1}.
|
|
||||||
|
|
||||||
@item kernel @var{file} @dots{}
|
|
||||||
Attempt to load the primary boot image (Multiboot a.out or @sc{elf},
|
|
||||||
Linux zImage or bzImage, FreeBSD a.out, or NetBSD a.out) from
|
|
||||||
@var{file}. This command ignores the rest of the contents of the line,
|
|
||||||
except that the entire line starting with the kernel filename is passed
|
|
||||||
verbatim as the @dfn{kernel command line}. The module state is reset,
|
|
||||||
and so you must reload any modules.
|
|
||||||
|
|
||||||
@item module @var{file} @dots{}
|
|
||||||
Load a boot module for a Multiboot format boot image (no interpretation
|
|
||||||
of the file contents are made, so that user of this command must know
|
|
||||||
what the kernel in question works with). The rest of the line is passed
|
|
||||||
as the @dfn{module command line} much like with the @command{kernel}
|
|
||||||
command.
|
|
||||||
|
|
||||||
@item modulenounzip @var{file} @dots{}
|
|
||||||
Exactly like @command{module}, except that automatic decompression is
|
|
||||||
disabled.
|
|
||||||
|
|
||||||
@item initrd @var{file} @dots{}
|
|
||||||
Load an initial ramdisk for a Linux format boot image and set the
|
|
||||||
appropriate parameters in the Linux setup area in memory.
|
|
||||||
|
|
||||||
@item install @var{stage1-file} [d] @var{dest-device} @var{file} @var{addr} [p] [@var{config-file}]
|
|
||||||
This command is fairly complex, and for detailed examples one should
|
|
||||||
look at @ref{Automated install}. In short, it will perform a full
|
|
||||||
install presuming the stage2 or stage1.5@footnote{They're loaded the
|
|
||||||
same way, so we will refer to the stage1.5 as a stage2 from now on.}
|
|
||||||
is in its final install location.
|
|
||||||
|
|
||||||
In slightly more detail, it will load @var{stage1-file}, validate that
|
|
||||||
it is a GRUB stage1 of the right version number, install a blocklist for
|
|
||||||
loading @var{file} as a stage2. If the option @samp{d} is present, the
|
|
||||||
stage1 will always look for the actual disk @var{file} was installed on,
|
|
||||||
rather than using the booting drive. The stage2 will be loaded at
|
|
||||||
address @var{addr}, which must be @samp{0x8000} for a true stage2, and
|
|
||||||
@samp{0x2000} for a stage1.5. It then writes the completed stage1 to
|
|
||||||
the first block of the device @var{dest-dev}. If the options @samp{p} or
|
|
||||||
@var{config-file} are present, then it reads the first block of stage2,
|
|
||||||
modifies it with the values of the partition @var{file} was found on
|
|
||||||
(for @samp{p}) or places the string @var{config-file} into the area
|
|
||||||
telling the stage2 where to look for a configuration file at boot time.
|
|
||||||
This command preserves the DOS BPB (and for hard disks, the partition
|
|
||||||
table) of the sector the stage1 is to be installed into.
|
|
||||||
|
|
||||||
@item makeactive
|
|
||||||
Set the active partition on the root disk to GRUB's root partition (on a
|
|
||||||
floppy this has no effect). This is limited to working with @emph{primary}
|
|
||||||
PC partitions.
|
|
||||||
|
|
||||||
@item boot
|
@item boot
|
||||||
This boots the OS/chain-loader which has been loaded. Only necessary if
|
This boots the OS/chain-loader which has been loaded. Only necessary if
|
||||||
running the fully interactive command line (it is implicit at the end of
|
running the fully interactive command line (it is implicit at the end of
|
||||||
a config-file entry).
|
a config-file entry).
|
||||||
|
|
||||||
@item color @var{normal} [@var{highlight}]
|
@item color @var{normal} [@var{highlight}]
|
||||||
Change the menu colors. The color @var{normal} is used for the normal
|
Change the menu colors. The color @var{normal} is used for most
|
||||||
line in the menu, and the color @var{highlight} is used to highlight the
|
lines in the menu, and the color @var{highlight} is used to highlight the
|
||||||
line where the cursor points to. If you omit @var{highlight}, then the
|
line where the cursor points. If you omit @var{highlight}, then the
|
||||||
inverted color of @var{normal} is used for the highlighted line. You
|
inverted color of @var{normal} is used for the highlighted line. You
|
||||||
must specify an integer for a color value, and the 0-3 bits represents
|
must specify an integer for a color value, where bits 0-3 represent
|
||||||
the foreground color, the 4-6 bits represents the background color, and
|
the foreground color, bits 4-6 represent the background color, and
|
||||||
the 7 bit represents that the foreground blinks.
|
bit 7 indicates that the foreground blinks.
|
||||||
|
|
||||||
These are the possible values and the meanings:
|
These are the possible values and the meanings:
|
||||||
|
|
||||||
|
@ -845,18 +753,13 @@ title OS-BS like
|
||||||
color 0x16 0x60
|
color 0x16 0x60
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@item testload @var{file}
|
@item chainloader @var{file}
|
||||||
Read the entire contents of @var{file} in several different ways and
|
Load @var{file} as a chain-loader. Like any other file loaded by the
|
||||||
compares them, to test the filesystem code. The output is somewhat
|
filesystem code, it can use the blocklist notation to grab the first
|
||||||
cryptic , but if no errors are reported and the final @samp{i=@var{X},
|
sector of the current partition with @samp{+1}.
|
||||||
filepos=@var{Y}} reading has @var{X} and @var{Y} equal, then it is
|
|
||||||
definitely consistent, and very likely works correctly subject to a
|
|
||||||
consistent offset error. If this test succeeds, then a good next step is
|
|
||||||
to try loading a kernel with your code.
|
|
||||||
|
|
||||||
@item read @var{addr}
|
@item configfile @var{file}
|
||||||
Read a 32-bit unsigned value from memory at address @var{addr} and
|
Load @var{file} as the configuration file.
|
||||||
displays it in hex format.
|
|
||||||
|
|
||||||
@item displaymem
|
@item displaymem
|
||||||
Display what GRUB thinks the system address space map of the machine is,
|
Display what GRUB thinks the system address space map of the machine is,
|
||||||
|
@ -868,10 +771,6 @@ at 1MB and going up to the first chipset hole for @dfn{upper memory}
|
||||||
(the standard PC @dfn{upper memory} interface is limited to reporting a
|
(the standard PC @dfn{upper memory} interface is limited to reporting a
|
||||||
maximum of 64MB).
|
maximum of 64MB).
|
||||||
|
|
||||||
@item impsprobe
|
|
||||||
Probe the Intel Multiprocessor Specification 1.1 or 1.4 configuration
|
|
||||||
table and boot the various CPUs which are found into a tight loop.
|
|
||||||
|
|
||||||
@item fstest
|
@item fstest
|
||||||
Toggle filesystem test mode.
|
Toggle filesystem test mode.
|
||||||
|
|
||||||
|
@ -885,9 +784,115 @@ requests from the disk.
|
||||||
Filesystem test mode is turned off by any use of the @command{install}
|
Filesystem test mode is turned off by any use of the @command{install}
|
||||||
or @command{testload} commands.
|
or @command{testload} commands.
|
||||||
|
|
||||||
|
@item hide @var{partition}
|
||||||
|
Hide @var{partition} by setting the @dfn{hidden} bit in its partition
|
||||||
|
type code.
|
||||||
|
|
||||||
|
@item impsprobe
|
||||||
|
Probe the Intel Multiprocessor Specification 1.1 or 1.4 configuration
|
||||||
|
table and boot the various CPUs which are found into a tight loop.
|
||||||
|
|
||||||
|
@item initrd @var{file} @dots{}
|
||||||
|
Load an initial ramdisk for a Linux format boot image and set the
|
||||||
|
appropriate parameters in the Linux setup area in memory.
|
||||||
|
|
||||||
|
@item install @var{stage1-file} [d] @var{dest-device} @var{file} @var{addr} [p] [@var{config-file}]
|
||||||
|
This command is fairly complex, and for detailed examples one should
|
||||||
|
look at @ref{Automated install}. In short, it will perform a full
|
||||||
|
install presuming the stage2 or stage1.5@footnote{They're loaded the
|
||||||
|
same way, so we will refer to the stage1.5 as a stage2 from now on.}
|
||||||
|
is in its final install location.
|
||||||
|
|
||||||
|
In slightly more detail, it will load @var{stage1-file}, validate that
|
||||||
|
it is a GRUB stage1 of the right version number, install a blocklist for
|
||||||
|
loading @var{file} as a stage2. If the option @samp{d} is present, the
|
||||||
|
stage1 will always look for the actual disk @var{file} was installed on,
|
||||||
|
rather than using the booting drive. The stage2 will be loaded at
|
||||||
|
address @var{addr}, which must be @samp{0x8000} for a true stage2, and
|
||||||
|
@samp{0x2000} for a stage1.5. It then writes the completed stage1 to
|
||||||
|
the first block of the device @var{dest-dev}. If the options @samp{p} or
|
||||||
|
@var{config-file} are present, then it reads the first block of stage2,
|
||||||
|
modifies it with the values of the partition @var{file} was found on
|
||||||
|
(for @samp{p}) or places the string @var{config-file} into the area
|
||||||
|
telling the stage2 where to look for a configuration file at boot time.
|
||||||
|
This command preserves the DOS BPB (and for hard disks, the partition
|
||||||
|
table) of the sector the stage1 is to be installed into.
|
||||||
|
|
||||||
|
@item kernel @var{file} @dots{}
|
||||||
|
Attempt to load the primary boot image (Multiboot a.out or @sc{elf},
|
||||||
|
Linux zImage or bzImage, FreeBSD a.out, or NetBSD a.out) from
|
||||||
|
@var{file}. The rest of the line is passed verbatim as the @dfn{kernel
|
||||||
|
command line}. Any modules must be reloaded after using this command.
|
||||||
|
|
||||||
|
@item makeactive
|
||||||
|
Set the active partition on the root disk to GRUB's root partition.
|
||||||
|
This command is limited to @emph{primary} PC partitions on a hard disk.
|
||||||
|
|
||||||
|
@item module @var{file} @dots{}
|
||||||
|
Load a boot module @var{file} for a Multiboot format boot image (no
|
||||||
|
interpretation of the file contents are made, so that user of this
|
||||||
|
command must know what the kernel in question expects). The rest of the
|
||||||
|
line is passed as the @dfn{module command line}, like the
|
||||||
|
@command{kernel} command.
|
||||||
|
|
||||||
|
@item modulenounzip @var{file} @dots{}
|
||||||
|
The same as @command{module}, except that automatic decompression is
|
||||||
|
disabled.
|
||||||
|
|
||||||
|
@item pause @var{message}@dots{}
|
||||||
|
Print the @var{message}, then wait until a key is pressed. Note that
|
||||||
|
placing @key{^G} (ASCII code 7) in the message will cause the speaker to
|
||||||
|
emit the standard beep sound, which is useful when prompting the user to
|
||||||
|
change floppies.
|
||||||
|
|
||||||
@item quit
|
@item quit
|
||||||
Exit from the grub shell @command{grub} (@pxref{The grub shell}). This
|
Exit from the GRUB shell @command{grub} (@pxref{The grub shell}). This
|
||||||
is just ignored in the native Stage 2.
|
command is ignored in the native Stage 2.
|
||||||
|
|
||||||
|
@item read @var{addr}
|
||||||
|
Read a 32-bit value from memory at address @var{addr} and
|
||||||
|
display it in hex format.
|
||||||
|
|
||||||
|
@item root @var{device} [@var{hdbias}]
|
||||||
|
Set the current @dfn{root partition} to the device @var{device}, then
|
||||||
|
attempt to mount it to get the partition size (for passing the partition
|
||||||
|
descriptor in @code{ES:ESI}, used by some chain-loaded bootloaders), the
|
||||||
|
BSD drive-type (for booting BSD kernels using their native boot format),
|
||||||
|
and correctly determine the PC partition where a BSD sub-partition is
|
||||||
|
located. The optional @var{hdbias} parameter is a number to tell a BSD
|
||||||
|
kernel how many BIOS drive numbers are on controllers before the current
|
||||||
|
one. For example, if there is an IDE disk and a SCSI disk, and your
|
||||||
|
FreeBSD root partition is on the SCSI disk, then use a @samp{1} for
|
||||||
|
@var{hdbias}.
|
||||||
|
|
||||||
|
@item rootnoverify @var{device} [@var{hdbias}]
|
||||||
|
Similar to @command{root}, but don't attempt to mount the
|
||||||
|
partition. This is useful for when an OS is outside of the area of the
|
||||||
|
disk that GRUB can read, but setting the correct root partition is still
|
||||||
|
desired. Note that the items mentioned in @command{root} above which
|
||||||
|
derived from attempting the mount will @emph{not} work correctly.
|
||||||
|
|
||||||
|
@item testload @var{file}
|
||||||
|
Read the entire contents of @var{file} in several different ways and
|
||||||
|
compares them, to test the filesystem code. The output is somewhat
|
||||||
|
cryptic , but if no errors are reported and the final @samp{i=@var{X},
|
||||||
|
filepos=@var{Y}} reading has @var{X} and @var{Y} equal, then it is
|
||||||
|
definitely consistent, and very likely works correctly subject to a
|
||||||
|
consistent offset error. If this test succeeds, then a good next step is
|
||||||
|
to try loading a kernel.
|
||||||
|
|
||||||
|
@item unhide @var{partition}
|
||||||
|
Unhide @var{partition} by clearing the @dfn{hidden} bit in its partition
|
||||||
|
type code.
|
||||||
|
|
||||||
|
@item uppermem @var{kbytes}
|
||||||
|
Force GRUB to assume that only @var{kbytes} kilobytes of upper memory
|
||||||
|
are installed. Any system address range maps are discarded.
|
||||||
|
|
||||||
|
@strong{Caution:} This should be used with great caution, and should
|
||||||
|
only be necessary on some old machines. GRUB's BIOS probe can pick up
|
||||||
|
all @sc{ram} on all new machines the author has ever heard of. It can
|
||||||
|
also be used for debugging purposes to lie to an OS.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -87,24 +87,24 @@ boot_func (char *arg, int flags)
|
||||||
/* *BSD */
|
/* *BSD */
|
||||||
bsd_boot (kernel_type, bootdev, arg);
|
bsd_boot (kernel_type, bootdev, arg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KERNEL_TYPE_LINUX:
|
case KERNEL_TYPE_LINUX:
|
||||||
/* Linux */
|
/* Linux */
|
||||||
linux_boot ();
|
linux_boot ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KERNEL_TYPE_BIG_LINUX:
|
case KERNEL_TYPE_BIG_LINUX:
|
||||||
/* Big Linux */
|
/* Big Linux */
|
||||||
big_linux_boot ();
|
big_linux_boot ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KERNEL_TYPE_CHAINLOADER:
|
case KERNEL_TYPE_CHAINLOADER:
|
||||||
/* Chainloader */
|
/* Chainloader */
|
||||||
gateA20 (0);
|
gateA20 (0);
|
||||||
boot_drive = saved_drive;
|
boot_drive = saved_drive;
|
||||||
chain_stage1 (0, BOOTSEC_LOCATION, BOOTSEC_LOCATION - 16);
|
chain_stage1 (0, BOOTSEC_LOCATION, BOOTSEC_LOCATION - 16);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KERNEL_TYPE_MULTIBOOT:
|
case KERNEL_TYPE_MULTIBOOT:
|
||||||
/* Multiboot */
|
/* Multiboot */
|
||||||
multi_boot ((int) entry_addr, (int) &mbi);
|
multi_boot ((int) entry_addr, (int) &mbi);
|
||||||
|
@ -114,7 +114,7 @@ boot_func (char *arg, int flags)
|
||||||
errnum = ERR_BOOT_COMMAND;
|
errnum = ERR_BOOT_COMMAND;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ chainloader_func (char *arg, int flags)
|
||||||
kernel_type = KERNEL_TYPE_NONE;
|
kernel_type = KERNEL_TYPE_NONE;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,13 +187,13 @@ static struct builtin builtin_color =
|
||||||
color_func,
|
color_func,
|
||||||
BUILTIN_CMDLINE | BUILTIN_MENU,
|
BUILTIN_CMDLINE | BUILTIN_MENU,
|
||||||
"color NORMAL [HIGHLIGHT]",
|
"color NORMAL [HIGHLIGHT]",
|
||||||
"Change the menu colors. The color NORMAL is used for the normal"
|
"Change the menu colors. The color NORMAL is used for most"
|
||||||
" line in the menu, and the color HIGHLIGHT is used to highlight the"
|
" lines in the menu, and the color HIGHLIGHT is used to highlight the"
|
||||||
" line where the cursor points to. If you omit HIGHLIGHT, then the"
|
" line where the cursor points. If you omit HIGHLIGHT, then the"
|
||||||
" inverted color of NORMAL is used for the highlighted line. You"
|
" inverted color of NORMAL is used for the highlighted line. You"
|
||||||
" must specify an integer for a color value, and the 0-3 bits"
|
" must specify an integer for a color value, where bits 0-3"
|
||||||
" represents the foreground color, the 4-6 bits represents the"
|
" represent the foreground color, bits 4-6 represents the"
|
||||||
" background color, and the 7 bit represents that the foreground"
|
" background color, and bit 7 indicates that the foreground"
|
||||||
" blinks."
|
" blinks."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ configfile_func (char *arg, int flags)
|
||||||
/* Check if the file ARG is present. */
|
/* Check if the file ARG is present. */
|
||||||
if (! grub_open (arg))
|
if (! grub_open (arg))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* Copy ARG to CONFIG_FILE. */
|
/* Copy ARG to CONFIG_FILE. */
|
||||||
while ((*new_config++ = *arg++) != 0)
|
while ((*new_config++ = *arg++) != 0)
|
||||||
;
|
;
|
||||||
|
@ -230,7 +230,7 @@ static struct builtin builtin_configfile =
|
||||||
configfile_func,
|
configfile_func,
|
||||||
BUILTIN_CMDLINE,
|
BUILTIN_CMDLINE,
|
||||||
"configfile FILE",
|
"configfile FILE",
|
||||||
"Load the file FILE as the configuration file."
|
"Load FILE as the configuration file."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ debug_func (char *arg, int flags)
|
||||||
debug = 1;
|
debug = 1;
|
||||||
grub_printf (" Debug mode is turned on\n");
|
grub_printf (" Debug mode is turned on\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ default_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
if (! safe_parse_maxint (&arg, &default_entry))
|
if (! safe_parse_maxint (&arg, &default_entry))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,22 +294,22 @@ displaymem_func (char *arg, int flags)
|
||||||
if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0
|
if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0
|
||||||
|| *((int *) SCRATCHADDR) != 0)
|
|| *((int *) SCRATCHADDR) != 0)
|
||||||
grub_printf (" Address Map BIOS Interface is present\n");
|
grub_printf (" Address Map BIOS Interface is present\n");
|
||||||
|
|
||||||
grub_printf (" Lower memory: %uK, "
|
grub_printf (" Lower memory: %uK, "
|
||||||
"Upper memory (to first chipset hole): %uK\n",
|
"Upper memory (to first chipset hole): %uK\n",
|
||||||
mbi.mem_lower, mbi.mem_upper);
|
mbi.mem_lower, mbi.mem_upper);
|
||||||
|
|
||||||
if (mbi.flags & MB_INFO_MEM_MAP)
|
if (mbi.flags & MB_INFO_MEM_MAP)
|
||||||
{
|
{
|
||||||
struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr;
|
struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr;
|
||||||
int end_addr = mbi.mmap_addr + mbi.mmap_length;
|
int end_addr = mbi.mmap_addr + mbi.mmap_length;
|
||||||
|
|
||||||
grub_printf (" [Address Range Descriptor entries "
|
grub_printf (" [Address Range Descriptor entries "
|
||||||
"immediately follow (values are 64-bit)]\n");
|
"immediately follow (values are 64-bit)]\n");
|
||||||
while (end_addr > (int) map)
|
while (end_addr > (int) map)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
if (map->Type == MB_ARD_MEMORY)
|
if (map->Type == MB_ARD_MEMORY)
|
||||||
str = "Usable RAM";
|
str = "Usable RAM";
|
||||||
else
|
else
|
||||||
|
@ -318,11 +318,11 @@ displaymem_func (char *arg, int flags)
|
||||||
" Length: %u X 4GB + %u bytes\n",
|
" Length: %u X 4GB + %u bytes\n",
|
||||||
str, map->BaseAddrHigh, map->BaseAddrLow,
|
str, map->BaseAddrHigh, map->BaseAddrLow,
|
||||||
map->LengthHigh, map->LengthLow);
|
map->LengthHigh, map->LengthLow);
|
||||||
|
|
||||||
map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size));
|
map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@ fallback_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
if (! safe_parse_maxint (&arg, &fallback_entry))
|
if (! safe_parse_maxint (&arg, &fallback_entry))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,9 +357,8 @@ static struct builtin builtin_fallback =
|
||||||
"Go into unattended boot mode: if the default boot entry has any"
|
"Go into unattended boot mode: if the default boot entry has any"
|
||||||
" errors, instead of waiting for the user to do anything, it"
|
" errors, instead of waiting for the user to do anything, it"
|
||||||
" immediately starts over using the NUM entry (same numbering as the"
|
" immediately starts over using the NUM entry (same numbering as the"
|
||||||
" `default=' command). This obviously doesn't help if the machine"
|
" `default=' command). This obviously won't help if the machine"
|
||||||
" was in the middle of the boot process (after leaving GRUB's code)"
|
" was rebooted by a kernel that GRUB loaded."
|
||||||
" and rebooted."
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -378,7 +377,7 @@ fstest_func (char *arg, int flags)
|
||||||
debug_fs = debug_fs_print_func;
|
debug_fs = debug_fs_print_func;
|
||||||
printf (" Filesystem tracing is now on\n");
|
printf (" Filesystem tracing is now on\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,11 +396,11 @@ static int
|
||||||
geometry_func (char *arg, int flags)
|
geometry_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
struct geometry geom;
|
struct geometry geom;
|
||||||
|
|
||||||
set_device (arg);
|
set_device (arg);
|
||||||
if (errnum)
|
if (errnum)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (get_diskinfo (current_drive, &geom))
|
if (get_diskinfo (current_drive, &geom))
|
||||||
{
|
{
|
||||||
errnum = ERR_NO_DISK;
|
errnum = ERR_NO_DISK;
|
||||||
|
@ -410,7 +409,7 @@ geometry_func (char *arg, int flags)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *msg;
|
char *msg;
|
||||||
|
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
msg = device_map[current_drive];
|
msg = device_map[current_drive];
|
||||||
#else
|
#else
|
||||||
|
@ -419,14 +418,14 @@ geometry_func (char *arg, int flags)
|
||||||
else
|
else
|
||||||
msg = "CHS";
|
msg = "CHS";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, "
|
grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, "
|
||||||
"The number of sectors = %d, %s\n",
|
"The number of sectors = %d, %s\n",
|
||||||
current_drive,
|
current_drive,
|
||||||
geom.cylinders, geom.heads, geom.sectors,
|
geom.cylinders, geom.heads, geom.sectors,
|
||||||
geom.total_sectors, msg);
|
geom.total_sectors, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -452,12 +451,12 @@ help_func (char *arg, int flags)
|
||||||
/* Invoked with no argument. Print the list of the short docs. */
|
/* Invoked with no argument. Print the list of the short docs. */
|
||||||
struct builtin **builtin;
|
struct builtin **builtin;
|
||||||
int left = 1;
|
int left = 1;
|
||||||
|
|
||||||
for (builtin = builtin_table; *builtin != 0; builtin++)
|
for (builtin = builtin_table; *builtin != 0; builtin++)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* If this cannot be run in the command-line interface,
|
/* If this cannot be run in the command-line interface,
|
||||||
skip this. */
|
skip this. */
|
||||||
if (! ((*builtin)->flags & BUILTIN_CMDLINE))
|
if (! ((*builtin)->flags & BUILTIN_CMDLINE))
|
||||||
|
@ -496,13 +495,13 @@ help_func (char *arg, int flags)
|
||||||
while (*ptr && *ptr != ' ')
|
while (*ptr && *ptr != ' ')
|
||||||
ptr++;
|
ptr++;
|
||||||
*ptr = 0;
|
*ptr = 0;
|
||||||
|
|
||||||
for (builtin = builtin_table; *builtin; builtin++)
|
for (builtin = builtin_table; *builtin; builtin++)
|
||||||
{
|
{
|
||||||
/* Skip this if this is only for the configuration file. */
|
/* Skip this if this is only for the configuration file. */
|
||||||
if (! ((*builtin)->flags & BUILTIN_CMDLINE))
|
if (! ((*builtin)->flags & BUILTIN_CMDLINE))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (substring (arg, (*builtin)->name) < 1)
|
if (substring (arg, (*builtin)->name) < 1)
|
||||||
{
|
{
|
||||||
char *doc = (*builtin)->long_doc;
|
char *doc = (*builtin)->long_doc;
|
||||||
|
@ -525,7 +524,7 @@ help_func (char *arg, int flags)
|
||||||
if (doc[len - 1] == ' ')
|
if (doc[len - 1] == ' ')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_printf (" ");
|
grub_printf (" ");
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
grub_putchar (*doc++);
|
grub_putchar (*doc++);
|
||||||
|
@ -533,12 +532,12 @@ help_func (char *arg, int flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
arg = next_arg;
|
arg = next_arg;
|
||||||
}
|
}
|
||||||
while (*arg);
|
while (*arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -550,7 +549,7 @@ static struct builtin builtin_help =
|
||||||
"help [PATTERN ...]",
|
"help [PATTERN ...]",
|
||||||
"Display helpful information about builtin commands."
|
"Display helpful information about builtin commands."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* hide */
|
/* hide */
|
||||||
static int
|
static int
|
||||||
|
@ -561,9 +560,9 @@ hide_func (char *arg, int flags)
|
||||||
|
|
||||||
saved_partition = current_partition;
|
saved_partition = current_partition;
|
||||||
saved_drive = current_drive;
|
saved_drive = current_drive;
|
||||||
if (! hide_partition ())
|
if (! set_partition_hidden_flag (1))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -572,8 +571,9 @@ static struct builtin builtin_hide =
|
||||||
"hide",
|
"hide",
|
||||||
hide_func,
|
hide_func,
|
||||||
BUILTIN_CMDLINE | BUILTIN_MENU,
|
BUILTIN_CMDLINE | BUILTIN_MENU,
|
||||||
"hide DRIVE",
|
"hide PARTITION",
|
||||||
"Hide the drive DRIVE by adding 0x10 into the partition type."
|
"Hide PARTITION by setting the \"hidden\" bit in"
|
||||||
|
" its partition type code."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -585,7 +585,7 @@ impsprobe_func (char *arg, int flags)
|
||||||
if (!imps_probe ())
|
if (!imps_probe ())
|
||||||
#endif
|
#endif
|
||||||
printf (" No MPS information found or probe failed\n");
|
printf (" No MPS information found or probe failed\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -617,7 +617,7 @@ initrd_func (char *arg, int flags)
|
||||||
errnum = ERR_NEED_LX_KERNEL;
|
errnum = ERR_NEED_LX_KERNEL;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -653,13 +653,13 @@ install_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
printf("[%d]", sector);
|
printf("[%d]", sector);
|
||||||
|
|
||||||
if (*((unsigned long *) (installlist - 4))
|
if (*((unsigned long *) (installlist - 4))
|
||||||
+ *((unsigned short *) installlist) != sector
|
+ *((unsigned short *) installlist) != sector
|
||||||
|| installlist == BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4)
|
|| installlist == BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4)
|
||||||
{
|
{
|
||||||
installlist -= 8;
|
installlist -= 8;
|
||||||
|
|
||||||
if (*((unsigned long *) (installlist - 8)))
|
if (*((unsigned long *) (installlist - 8)))
|
||||||
errnum = ERR_WONT_FIT;
|
errnum = ERR_WONT_FIT;
|
||||||
else
|
else
|
||||||
|
@ -668,7 +668,7 @@ install_func (char *arg, int flags)
|
||||||
*((unsigned long *) (installlist - 4)) = sector;
|
*((unsigned long *) (installlist - 4)) = sector;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*((unsigned short *) installlist) += 1;
|
*((unsigned short *) installlist) += 1;
|
||||||
installsect = sector;
|
installsect = sector;
|
||||||
installaddr += 512;
|
installaddr += 512;
|
||||||
|
@ -708,12 +708,12 @@ install_func (char *arg, int flags)
|
||||||
/* Do not decompress Stage 2. */
|
/* Do not decompress Stage 2. */
|
||||||
no_decompression = 1;
|
no_decompression = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* copy possible DOS BPB, 59 bytes at byte offset 3 */
|
/* copy possible DOS BPB, 59 bytes at byte offset 3 */
|
||||||
grub_memmove (buffer + BOOTSEC_BPB_OFFSET,
|
grub_memmove (buffer + BOOTSEC_BPB_OFFSET,
|
||||||
old_sect + BOOTSEC_BPB_OFFSET,
|
old_sect + BOOTSEC_BPB_OFFSET,
|
||||||
BOOTSEC_BPB_LENGTH);
|
BOOTSEC_BPB_LENGTH);
|
||||||
|
|
||||||
/* if for a hard disk, copy possible MBR/extended part table */
|
/* if for a hard disk, copy possible MBR/extended part table */
|
||||||
if ((dest_drive & 0x80) && current_partition == 0xFFFFFF)
|
if ((dest_drive & 0x80) && current_partition == 0xFFFFFF)
|
||||||
grub_memmove (buffer + BOOTSEC_PART_OFFSET,
|
grub_memmove (buffer + BOOTSEC_PART_OFFSET,
|
||||||
|
@ -737,27 +737,27 @@ install_func (char *arg, int flags)
|
||||||
/* Open Stage 2. */
|
/* Open Stage 2. */
|
||||||
if (! grub_open (file))
|
if (! grub_open (file))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* If STAGE1_FILE is the LBA version, do a sanity check. */
|
/* If STAGE1_FILE is the LBA version, do a sanity check. */
|
||||||
if (buffer[STAGE1_ID_OFFSET] == STAGE1_ID_LBA)
|
if (buffer[STAGE1_ID_OFFSET] == STAGE1_ID_LBA)
|
||||||
{
|
{
|
||||||
/* The geometry of the drive in which FILE is located. */
|
/* The geometry of the drive in which FILE is located. */
|
||||||
struct geometry load_geom;
|
struct geometry load_geom;
|
||||||
|
|
||||||
/* Check if CURRENT_DRIVE is a floppy disk. */
|
/* Check if CURRENT_DRIVE is a floppy disk. */
|
||||||
if (! (current_drive & 0x80))
|
if (! (current_drive & 0x80))
|
||||||
{
|
{
|
||||||
errnum = ERR_DEV_VALUES;
|
errnum = ERR_DEV_VALUES;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the geometry of CURRENT_DRIVE. */
|
/* Get the geometry of CURRENT_DRIVE. */
|
||||||
if (get_diskinfo (current_drive, &load_geom))
|
if (get_diskinfo (current_drive, &load_geom))
|
||||||
{
|
{
|
||||||
errnum = ERR_NO_DISK;
|
errnum = ERR_NO_DISK;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
/* XXX Can we determine if LBA is supported in
|
/* XXX Can we determine if LBA is supported in
|
||||||
the grub shell as well? */
|
the grub shell as well? */
|
||||||
|
@ -773,21 +773,21 @@ install_func (char *arg, int flags)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! new_drive)
|
if (! new_drive)
|
||||||
new_drive = current_drive;
|
new_drive = current_drive;
|
||||||
else if (current_drive != dest_drive)
|
else if (current_drive != dest_drive)
|
||||||
grub_printf ("Warning: the option `d' is not found, but Stage 2 will"
|
grub_printf ("Warning: the option `d' was not used, but the Stage 1 will"
|
||||||
"be install into a\ndifferent drive from a drive into"
|
"be installed on a\ndifferent drive than the drive where"
|
||||||
" which is installed Stage 1.\n");
|
" the Stage 2 resides.\n");
|
||||||
|
|
||||||
memmove ((char*) BOOTSEC_LOCATION, buffer, SECTOR_SIZE);
|
memmove ((char*) BOOTSEC_LOCATION, buffer, SECTOR_SIZE);
|
||||||
|
|
||||||
*((unsigned char *) (BOOTSEC_LOCATION + STAGE1_FIRSTLIST))
|
*((unsigned char *) (BOOTSEC_LOCATION + STAGE1_FIRSTLIST))
|
||||||
= new_drive;
|
= new_drive;
|
||||||
*((unsigned short *) (BOOTSEC_LOCATION + STAGE1_INSTALLADDR))
|
*((unsigned short *) (BOOTSEC_LOCATION + STAGE1_INSTALLADDR))
|
||||||
= installaddr;
|
= installaddr;
|
||||||
|
|
||||||
i = BOOTSEC_LOCATION+STAGE1_FIRSTLIST - 4;
|
i = BOOTSEC_LOCATION+STAGE1_FIRSTLIST - 4;
|
||||||
while (*((unsigned long *) i))
|
while (*((unsigned long *) i))
|
||||||
{
|
{
|
||||||
|
@ -799,12 +799,12 @@ install_func (char *arg, int flags)
|
||||||
errnum = ERR_BAD_VERSION;
|
errnum = ERR_BAD_VERSION;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
*((int *) i) = 0;
|
*((int *) i) = 0;
|
||||||
*((int *) (i - 4)) = 0;
|
*((int *) (i - 4)) = 0;
|
||||||
i -= 8;
|
i -= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
installlist = BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4;
|
installlist = BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4;
|
||||||
debug_fs = debug_fs_blocklist_func;
|
debug_fs = debug_fs_blocklist_func;
|
||||||
|
|
||||||
|
@ -822,21 +822,21 @@ install_func (char *arg, int flags)
|
||||||
debug_fs = 0;
|
debug_fs = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
stage2_sect = installsect;
|
stage2_sect = installsect;
|
||||||
ptr = skip_to (0, addr);
|
ptr = skip_to (0, addr);
|
||||||
|
|
||||||
if (*ptr == 'p')
|
if (*ptr == 'p')
|
||||||
{
|
{
|
||||||
write_stage2_sect = 1;
|
write_stage2_sect = 1;
|
||||||
*((long *) (SCRATCHADDR + STAGE2_INSTALLPART)) = current_partition;
|
*((long *) (SCRATCHADDR + STAGE2_INSTALLPART)) = current_partition;
|
||||||
ptr = skip_to (0, ptr);
|
ptr = skip_to (0, ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*ptr)
|
if (*ptr)
|
||||||
{
|
{
|
||||||
char *str = ((char *) (SCRATCHADDR + STAGE2_VER_STR_OFFS));
|
char *str = ((char *) (SCRATCHADDR + STAGE2_VER_STR_OFFS));
|
||||||
|
|
||||||
write_stage2_sect = 1;
|
write_stage2_sect = 1;
|
||||||
/* Find a string for the configuration filename. */
|
/* Find a string for the configuration filename. */
|
||||||
while (*(str++))
|
while (*(str++))
|
||||||
|
@ -855,7 +855,7 @@ install_func (char *arg, int flags)
|
||||||
|
|
||||||
/* Clear the cache. */
|
/* Clear the cache. */
|
||||||
buf_track = -1;
|
buf_track = -1;
|
||||||
|
|
||||||
if (biosdisk (BIOSDISK_WRITE,
|
if (biosdisk (BIOSDISK_WRITE,
|
||||||
dest_drive, &dest_geom,
|
dest_drive, &dest_geom,
|
||||||
dest_sector, 1, (BOOTSEC_LOCATION >> 4))
|
dest_sector, 1, (BOOTSEC_LOCATION >> 4))
|
||||||
|
@ -868,13 +868,13 @@ install_func (char *arg, int flags)
|
||||||
debug_fs = 0;
|
debug_fs = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_fs = 0;
|
debug_fs = 0;
|
||||||
|
|
||||||
#ifndef NO_DECOMPRESSION
|
#ifndef NO_DECOMPRESSION
|
||||||
no_decompression = 0;
|
no_decompression = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -884,16 +884,15 @@ static struct builtin builtin_install =
|
||||||
install_func,
|
install_func,
|
||||||
BUILTIN_CMDLINE,
|
BUILTIN_CMDLINE,
|
||||||
"install STAGE1 [d] DEVICE STAGE2 ADDR [p] [CONFIG_FILE]",
|
"install STAGE1 [d] DEVICE STAGE2 ADDR [p] [CONFIG_FILE]",
|
||||||
"Install STAGE1 into DEVICE, and install a blocklist for loading STAGE2"
|
"Install STAGE1 on DEVICE, and install a blocklist for loading STAGE2"
|
||||||
" as a Stage 2. If the option `d' is present, the Stage 1 will always"
|
" as a Stage 2. If the option `d' is present, the Stage 1 will always"
|
||||||
" look for the actual disk STAGE2 is installed on, rather than using"
|
" look for the disk where STAGE2 was installed, rather than using"
|
||||||
" the booting drive. The Stage 2 will be loaded at address ADDR, which"
|
" the booting drive. The Stage 2 will be loaded at address ADDR, which"
|
||||||
" must be 0x8000 for a true Stage 2, and 0x2000 for a Stage 1.5. If"
|
" must be 0x8000 for a true Stage 2, and 0x2000 for a Stage 1.5. If"
|
||||||
" the option `p' or CONFIG_FILE are present, then it reads the first"
|
" the option `p' or CONFIG_FILE is present, then the first block"
|
||||||
" block of Stage 2, modifies it with the values of the partition STAGE2"
|
" of Stage 2 is patched with new values of the partition and name"
|
||||||
" was found on for `p' or places the string CONFIG_FILE into the area"
|
" of the configuration file used by the true Stage 2 (for a Stage 1.5,"
|
||||||
" telling the Stage 2 where to look for a configuration file at boot"
|
" this is the name of the true Stage 2) at boot time."
|
||||||
" time."
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -902,7 +901,7 @@ static int
|
||||||
kernel_func (char *arg, int flags)
|
kernel_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
int len = grub_strlen (arg);
|
int len = grub_strlen (arg);
|
||||||
|
|
||||||
/* Reset MB_CMDLINE. */
|
/* Reset MB_CMDLINE. */
|
||||||
mb_cmdline = (char *) MB_CMDLINE_BUF;
|
mb_cmdline = (char *) MB_CMDLINE_BUF;
|
||||||
if (len + 1 > MB_CMDLINE_BUFLEN)
|
if (len + 1 > MB_CMDLINE_BUFLEN)
|
||||||
|
@ -910,13 +909,13 @@ kernel_func (char *arg, int flags)
|
||||||
errnum = ERR_WONT_FIT;
|
errnum = ERR_WONT_FIT;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy the command-line to MB_CMDLINE. */
|
/* Copy the command-line to MB_CMDLINE. */
|
||||||
grub_memmove (mb_cmdline, arg, len + 1);
|
grub_memmove (mb_cmdline, arg, len + 1);
|
||||||
kernel_type = load_image (arg, mb_cmdline);
|
kernel_type = load_image (arg, mb_cmdline);
|
||||||
if (kernel_type == KERNEL_TYPE_NONE)
|
if (kernel_type == KERNEL_TYPE_NONE)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
mb_cmdline += len + 1;
|
mb_cmdline += len + 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -929,10 +928,9 @@ static struct builtin builtin_kernel =
|
||||||
"kernel FILE [ARG ...]",
|
"kernel FILE [ARG ...]",
|
||||||
"Attempt to load the primary boot image (Multiboot a.out or ELF,"
|
"Attempt to load the primary boot image (Multiboot a.out or ELF,"
|
||||||
" Linux zImage or bzImage, FreeBSD a.out, or NetBSD a.out) from"
|
" Linux zImage or bzImage, FreeBSD a.out, or NetBSD a.out) from"
|
||||||
" FILE. This command ignores the rest of the contents of the line,"
|
" FILE. The rest of the line is passed verbatim as the"
|
||||||
" except that the entire line starting with FILE is"
|
" \"kernel command line\". Any modules must be reloaded after"
|
||||||
" passed verbatim as the \"kernel command line\". The module state is"
|
" using this command."
|
||||||
" reset, and so you must reload any modules."
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -942,7 +940,7 @@ makeactive_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
if (! make_saved_active ())
|
if (! make_saved_active ())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -952,9 +950,8 @@ static struct builtin builtin_makeactive =
|
||||||
makeactive_func,
|
makeactive_func,
|
||||||
BUILTIN_CMDLINE,
|
BUILTIN_CMDLINE,
|
||||||
"makeactive",
|
"makeactive",
|
||||||
"Set the active partition on the root disk to GRUB's root partition"
|
"Set the active partition on the root disk to GRUB's root partition."
|
||||||
" (on a floppy this has no effect). This is limited to working with"
|
" This command is limited to _primary_ PC partitions on a hard disk."
|
||||||
" _primary_ PC partitions."
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -963,7 +960,7 @@ static int
|
||||||
module_func (char *arg, int flags)
|
module_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
int len = grub_strlen (arg);
|
int len = grub_strlen (arg);
|
||||||
|
|
||||||
switch (kernel_type)
|
switch (kernel_type)
|
||||||
{
|
{
|
||||||
case KERNEL_TYPE_MULTIBOOT:
|
case KERNEL_TYPE_MULTIBOOT:
|
||||||
|
@ -988,7 +985,7 @@ module_func (char *arg, int flags)
|
||||||
errnum = ERR_NEED_MB_KERNEL;
|
errnum = ERR_NEED_MB_KERNEL;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -999,10 +996,10 @@ static struct builtin builtin_module =
|
||||||
BUILTIN_CMDLINE,
|
BUILTIN_CMDLINE,
|
||||||
"module FILE [ARG ...]",
|
"module FILE [ARG ...]",
|
||||||
"Load a boot module FILE for a Multiboot format boot image (no"
|
"Load a boot module FILE for a Multiboot format boot image (no"
|
||||||
" interpretation of the file contents are made, so that user of this"
|
" interpretation of the file contents is made, so users of this"
|
||||||
" command must know what the kernel in question works with). The"
|
" command must know what the kernel in question expects). The"
|
||||||
" rest of the line is passed as the \"module command line\" much like"
|
" rest of the line is passed as the \"module command line\", like"
|
||||||
" with the `kernel=' command."
|
" the `kernel=' command."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1011,7 +1008,7 @@ static int
|
||||||
modulenounzip_func (char *arg, int flags)
|
modulenounzip_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
#ifndef NO_DECOMPRESSION
|
#ifndef NO_DECOMPRESSION
|
||||||
no_decompression = 1;
|
no_decompression = 1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1021,7 +1018,7 @@ modulenounzip_func (char *arg, int flags)
|
||||||
#ifndef NO_DECOMPRESSION
|
#ifndef NO_DECOMPRESSION
|
||||||
no_decompression = 0;
|
no_decompression = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1031,7 +1028,7 @@ static struct builtin builtin_modulenounzip =
|
||||||
modulenounzip_func,
|
modulenounzip_func,
|
||||||
BUILTIN_CMDLINE,
|
BUILTIN_CMDLINE,
|
||||||
"modulenounzip FILE [ARG ...]",
|
"modulenounzip FILE [ARG ...]",
|
||||||
"Exactly like `module=', except that automatic decompression is"
|
"The same as `module=', except that automatic decompression is"
|
||||||
" disabled."
|
" disabled."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1047,7 +1044,7 @@ password_func (char *arg, int flags)
|
||||||
errnum = ERR_WONT_FIT;
|
errnum = ERR_WONT_FIT;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
password = (char *) PASSWORD_BUF;
|
password = (char *) PASSWORD_BUF;
|
||||||
grub_memmove (password, arg, len + 1);
|
grub_memmove (password, arg, len + 1);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1065,7 +1062,7 @@ static struct builtin builtin_password =
|
||||||
" FILE as a new config file and restarts the GRUB Stage 2."
|
" FILE as a new config file and restarts the GRUB Stage 2."
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* pause */
|
/* pause */
|
||||||
static int
|
static int
|
||||||
|
@ -1074,7 +1071,7 @@ pause_func (char *arg, int flags)
|
||||||
/* If ESC is returned, then abort this entry. */
|
/* If ESC is returned, then abort this entry. */
|
||||||
if (ASCII_CHAR (getkey ()) == 27)
|
if (ASCII_CHAR (getkey ()) == 27)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1109,7 +1106,7 @@ static struct builtin builtin_quit =
|
||||||
quit_func,
|
quit_func,
|
||||||
BUILTIN_CMDLINE,
|
BUILTIN_CMDLINE,
|
||||||
"quit",
|
"quit",
|
||||||
"Exit from the grub shell."
|
"Exit from the GRUB shell."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1132,8 +1129,8 @@ static struct builtin builtin_read =
|
||||||
read_func,
|
read_func,
|
||||||
BUILTIN_CMDLINE,
|
BUILTIN_CMDLINE,
|
||||||
"read ADDR",
|
"read ADDR",
|
||||||
"Read a 32-bit unsigned value from memory at address ADDR and"
|
"Read a 32-bit value from memory at address ADDR and"
|
||||||
" displays it in hex format."
|
" display it in hex format."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1157,7 +1154,7 @@ root_func (char *arg, int flags)
|
||||||
errnum = 0;
|
errnum = 0;
|
||||||
saved_partition = current_partition;
|
saved_partition = current_partition;
|
||||||
saved_drive = current_drive;
|
saved_drive = current_drive;
|
||||||
|
|
||||||
/* BSD and chainloading evil hacks !! */
|
/* BSD and chainloading evil hacks !! */
|
||||||
biasptr = skip_to (0, next);
|
biasptr = skip_to (0, next);
|
||||||
safe_parse_maxint (&biasptr, &hdbias);
|
safe_parse_maxint (&biasptr, &hdbias);
|
||||||
|
@ -1166,7 +1163,7 @@ root_func (char *arg, int flags)
|
||||||
|
|
||||||
/* Print the type of the filesystem. */
|
/* Print the type of the filesystem. */
|
||||||
print_fsys_type ();
|
print_fsys_type ();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1180,14 +1177,12 @@ static struct builtin builtin_root =
|
||||||
" attempt to mount it to get the partition size (for passing the"
|
" attempt to mount it to get the partition size (for passing the"
|
||||||
" partition descriptor in `ES:ESI', used by some chain-loaded"
|
" partition descriptor in `ES:ESI', used by some chain-loaded"
|
||||||
" bootloaders), the BSD drive-type (for booting BSD kernels using"
|
" bootloaders), the BSD drive-type (for booting BSD kernels using"
|
||||||
" their native boot format), and fix up automatic determination of"
|
" their native boot format), and correctly determine "
|
||||||
" the PC partition where a BSD sub-partition is located. The"
|
" the PC partition where a BSD sub-partition is located. The"
|
||||||
" optional HDBIAS parameter is a number to tell a kernel which is"
|
" optional HDBIAS parameter is a number to tell a BSD kernel"
|
||||||
" using one of the BSD boot methodologies how many BIOS drive"
|
" how many BIOS drive numbers are on controllers before the current"
|
||||||
" numbers are on controllers before the current one. An example is"
|
" one. For example, if there is an IDE disk and a SCSI disk, and your"
|
||||||
" if there is an IDE disk and a SCSI disk, then set the root"
|
" FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS."
|
||||||
" partition normally, except for a kernel using a BSD boot"
|
|
||||||
" methodology (FreeBSD or NetBSD), then use a `1' for HDBIAS."
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1223,31 +1218,31 @@ static int
|
||||||
testload_func (char *arg, int flags)
|
testload_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
kernel_type = KERNEL_TYPE_NONE;
|
kernel_type = KERNEL_TYPE_NONE;
|
||||||
|
|
||||||
if (! grub_open (arg))
|
if (! grub_open (arg))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
debug_fs = debug_fs_print_func;
|
debug_fs = debug_fs_print_func;
|
||||||
|
|
||||||
/* Perform filesystem test on the specified file. */
|
/* Perform filesystem test on the specified file. */
|
||||||
/* Read whole file first. */
|
/* Read whole file first. */
|
||||||
grub_printf ("Whole file: ");
|
grub_printf ("Whole file: ");
|
||||||
|
|
||||||
grub_read ((char *) RAW_ADDR (0x100000), -1);
|
grub_read ((char *) RAW_ADDR (0x100000), -1);
|
||||||
|
|
||||||
/* Now compare two sections of the file read differently. */
|
/* Now compare two sections of the file read differently. */
|
||||||
|
|
||||||
for (i = 0; i < 0x10ac0; i++)
|
for (i = 0; i < 0x10ac0; i++)
|
||||||
{
|
{
|
||||||
*((unsigned char *) RAW_ADDR (0x200000 + i)) = 0;
|
*((unsigned char *) RAW_ADDR (0x200000 + i)) = 0;
|
||||||
*((unsigned char *) RAW_ADDR (0x300000 + i)) = 1;
|
*((unsigned char *) RAW_ADDR (0x300000 + i)) = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* First partial read. */
|
/* First partial read. */
|
||||||
grub_printf ("\nPartial read 1: ");
|
grub_printf ("\nPartial read 1: ");
|
||||||
|
|
||||||
filepos = 0;
|
filepos = 0;
|
||||||
grub_read ((char *) RAW_ADDR (0x200000), 0x7);
|
grub_read ((char *) RAW_ADDR (0x200000), 0x7);
|
||||||
grub_read ((char *) RAW_ADDR (0x200007), 0x100);
|
grub_read ((char *) RAW_ADDR (0x200007), 0x100);
|
||||||
|
@ -1255,10 +1250,10 @@ testload_func (char *arg, int flags)
|
||||||
grub_read ((char *) RAW_ADDR (0x200117), 0x999);
|
grub_read ((char *) RAW_ADDR (0x200117), 0x999);
|
||||||
grub_read ((char *) RAW_ADDR (0x200ab0), 0x10);
|
grub_read ((char *) RAW_ADDR (0x200ab0), 0x10);
|
||||||
grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000);
|
grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000);
|
||||||
|
|
||||||
/* Second partial read. */
|
/* Second partial read. */
|
||||||
grub_printf ("\nPartial read 2: ");
|
grub_printf ("\nPartial read 2: ");
|
||||||
|
|
||||||
filepos = 0;
|
filepos = 0;
|
||||||
grub_read ((char *) RAW_ADDR (0x300000), 0x10000);
|
grub_read ((char *) RAW_ADDR (0x300000), 0x10000);
|
||||||
grub_read ((char *) RAW_ADDR (0x310000), 0x10);
|
grub_read ((char *) RAW_ADDR (0x310000), 0x10);
|
||||||
|
@ -1266,13 +1261,13 @@ testload_func (char *arg, int flags)
|
||||||
grub_read ((char *) RAW_ADDR (0x310017), 0x10);
|
grub_read ((char *) RAW_ADDR (0x310017), 0x10);
|
||||||
grub_read ((char *) RAW_ADDR (0x310027), 0x999);
|
grub_read ((char *) RAW_ADDR (0x310027), 0x999);
|
||||||
grub_read ((char *) RAW_ADDR (0x3109c0), 0x100);
|
grub_read ((char *) RAW_ADDR (0x3109c0), 0x100);
|
||||||
|
|
||||||
grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
|
grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
|
||||||
*((int *) RAW_ADDR (0x200000)),
|
*((int *) RAW_ADDR (0x200000)),
|
||||||
*((int *) RAW_ADDR (0x200004)),
|
*((int *) RAW_ADDR (0x200004)),
|
||||||
*((int *) RAW_ADDR (0x200008)),
|
*((int *) RAW_ADDR (0x200008)),
|
||||||
*((int *) RAW_ADDR (0x20000c)));
|
*((int *) RAW_ADDR (0x20000c)));
|
||||||
|
|
||||||
grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
|
grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
|
||||||
*((int *) RAW_ADDR (0x300000)),
|
*((int *) RAW_ADDR (0x300000)),
|
||||||
*((int *) RAW_ADDR (0x300004)),
|
*((int *) RAW_ADDR (0x300004)),
|
||||||
|
@ -1283,7 +1278,7 @@ testload_func (char *arg, int flags)
|
||||||
if (*((unsigned char *) RAW_ADDR (0x200000 + i))
|
if (*((unsigned char *) RAW_ADDR (0x200000 + i))
|
||||||
!= *((unsigned char *) RAW_ADDR (0x300000 + i)))
|
!= *((unsigned char *) RAW_ADDR (0x300000 + i)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos);
|
grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos);
|
||||||
debug_fs = 0;
|
debug_fs = 0;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1301,7 +1296,7 @@ static struct builtin builtin_testload =
|
||||||
" filepos=Y' reading has X and Y equal, then it is definitely"
|
" filepos=Y' reading has X and Y equal, then it is definitely"
|
||||||
" consistent, and very likely works correctly subject to a"
|
" consistent, and very likely works correctly subject to a"
|
||||||
" consistent offset error. If this test succeeds, then a good next"
|
" consistent offset error. If this test succeeds, then a good next"
|
||||||
" step is to try loading a kernel with your code."
|
" step is to try loading a kernel."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1311,7 +1306,7 @@ timeout_func (char *arg, int flags)
|
||||||
{
|
{
|
||||||
if (! safe_parse_maxint (&arg, &grub_timeout))
|
if (! safe_parse_maxint (&arg, &grub_timeout))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1358,7 +1353,7 @@ unhide_func (char *arg, int flags)
|
||||||
|
|
||||||
saved_partition = current_partition;
|
saved_partition = current_partition;
|
||||||
saved_drive = current_drive;
|
saved_drive = current_drive;
|
||||||
if (! unhide_partition ())
|
if (! set_partition_hidden_flag (0))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1369,8 +1364,9 @@ static struct builtin builtin_unhide =
|
||||||
"unhide",
|
"unhide",
|
||||||
unhide_func,
|
unhide_func,
|
||||||
BUILTIN_CMDLINE | BUILTIN_MENU,
|
BUILTIN_CMDLINE | BUILTIN_MENU,
|
||||||
"unhide DRIVE",
|
"unhide PARTITION",
|
||||||
"Unhide the drive DRIVE by subtracting 0x10 from the partition type."
|
"Unhide PARTITION by clearing the \"hidden\" bit in its"
|
||||||
|
" partition type code."
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1391,10 +1387,8 @@ static struct builtin builtin_uppermem =
|
||||||
uppermem_func,
|
uppermem_func,
|
||||||
BUILTIN_CMDLINE,
|
BUILTIN_CMDLINE,
|
||||||
"uppermem KBYTES",
|
"uppermem KBYTES",
|
||||||
"Force GRUB to ignore what it found during the autoprobe of the"
|
"Force GRUB to assume that only KBYTES kilobytes of upper memory are"
|
||||||
" memory available to the system, and to use KBYTES as the number of"
|
" installed. Any system address range maps are discarded."
|
||||||
" kilobytes of upper memory installed. Any address range maps of the"
|
|
||||||
" system are discarded."
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -312,24 +312,28 @@ make_saved_active (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
unhide_partition (void)
|
set_partition_hidden_flag (int hidden)
|
||||||
{
|
{
|
||||||
if (saved_drive)
|
if (saved_drive)
|
||||||
{
|
{
|
||||||
int part = saved_partition >> 16;
|
int part = saved_partition >> 16;
|
||||||
|
|
||||||
if (part > 3)
|
if (part > 3)
|
||||||
{
|
{
|
||||||
errnum = ERR_NO_PART;
|
errnum = ERR_NO_PART;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, (char *) SCRATCHADDR))
|
if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, (char *) SCRATCHADDR))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (PC_SLICE_TYPE (SCRATCHADDR, part) & PC_SLICE_TYPE_HIDDEN_FLAG)
|
if (PC_SLICE_TYPE (SCRATCHADDR, part) & PC_SLICE_TYPE_HIDDEN_FLAG)
|
||||||
{
|
{
|
||||||
PC_SLICE_TYPE (SCRATCHADDR, part) ^= PC_SLICE_TYPE_HIDDEN_FLAG;
|
if (hidden)
|
||||||
|
PC_SLICE_TYPE (SCRATCHADDR, part) |= PC_SLICE_TYPE_HIDDEN_FLAG;
|
||||||
|
else
|
||||||
|
PC_SLICE_TYPE (SCRATCHADDR, part) &= ~PC_SLICE_TYPE_HIDDEN_FLAG;
|
||||||
|
|
||||||
buf_track = -1;
|
buf_track = -1;
|
||||||
if (biosdisk (BIOSDISK_WRITE, saved_drive, &buf_geom,
|
if (biosdisk (BIOSDISK_WRITE, saved_drive, &buf_geom,
|
||||||
0, 1, SCRATCHSEG))
|
0, 1, SCRATCHSEG))
|
||||||
|
@ -339,41 +343,10 @@ unhide_partition (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
hide_partition (void)
|
|
||||||
{
|
|
||||||
if (saved_drive)
|
|
||||||
{
|
|
||||||
int part = saved_partition >> 16;
|
|
||||||
|
|
||||||
if (part > 3)
|
|
||||||
{
|
|
||||||
errnum = ERR_NO_PART;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, (char *) SCRATCHADDR))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (! (PC_SLICE_TYPE (SCRATCHADDR, part) & PC_SLICE_TYPE_HIDDEN_FLAG))
|
|
||||||
{
|
|
||||||
PC_SLICE_TYPE (SCRATCHADDR, part) |= PC_SLICE_TYPE_HIDDEN_FLAG;
|
|
||||||
buf_track = -1;
|
|
||||||
if (biosdisk (BIOSDISK_WRITE, saved_drive, &buf_geom,
|
|
||||||
0, 1, SCRATCHSEG))
|
|
||||||
{
|
|
||||||
errnum = ERR_WRITE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
check_and_print_mount (void)
|
check_and_print_mount (void)
|
||||||
|
@ -472,7 +445,7 @@ real_open_partition (int flags)
|
||||||
if (! sane_partition ())
|
if (! sane_partition ())
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The "rawread" is probably unnecessary here, but it is good to
|
* The "rawread" is probably unnecessary here, but it is good to
|
||||||
* know it works.
|
* know it works.
|
||||||
|
@ -653,7 +626,7 @@ open_partition (void)
|
||||||
static int incomplete, disk_choice;
|
static int incomplete, disk_choice;
|
||||||
#ifndef STAGE1_5
|
#ifndef STAGE1_5
|
||||||
static int unique;
|
static int unique;
|
||||||
static char unique_string[128]; /* XXX Don't know yet */
|
static char unique_string[128]; /* XXX Don't know yet */
|
||||||
#endif
|
#endif
|
||||||
static enum
|
static enum
|
||||||
{
|
{
|
||||||
|
@ -681,7 +654,7 @@ set_device (char *device)
|
||||||
/* user has given '(' only, let disk_choice handle what disks we have */
|
/* user has given '(' only, let disk_choice handle what disks we have */
|
||||||
return device + 1;
|
return device + 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (*device == '(' && *(++device))
|
if (*device == '(' && *(++device))
|
||||||
{
|
{
|
||||||
if (*device != ',' && *device != ')')
|
if (*device != ',' && *device != ')')
|
||||||
|
@ -691,7 +664,7 @@ set_device (char *device)
|
||||||
#ifndef STAGE1_5
|
#ifndef STAGE1_5
|
||||||
if (*device == 'f' || *device == 'h')
|
if (*device == 'f' || *device == 'h')
|
||||||
{
|
{
|
||||||
/* user has given '([fh]', check for resp. add 'd' and
|
/* user has given '([fh]', check for resp. add 'd' and
|
||||||
let disk_choice handle what disks we have */
|
let disk_choice handle what disks we have */
|
||||||
if (!*(device + 1))
|
if (!*(device + 1))
|
||||||
{
|
{
|
||||||
|
@ -704,7 +677,7 @@ set_device (char *device)
|
||||||
return device + 2;
|
return device + 2;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((*device == 'f' || *device == 'h')
|
if ((*device == 'f' || *device == 'h')
|
||||||
&& (device += 2, (*(device - 1) != 'd')))
|
&& (device += 2, (*(device - 1) != 'd')))
|
||||||
errnum = ERR_NUMBER_PARSING;
|
errnum = ERR_NUMBER_PARSING;
|
||||||
|
@ -993,7 +966,7 @@ print_a_completion (char *filename)
|
||||||
{
|
{
|
||||||
char *f = filename;
|
char *f = filename;
|
||||||
char *u = unique_string;
|
char *u = unique_string;
|
||||||
|
|
||||||
if (! *u && unique == 0)
|
if (! *u && unique == 0)
|
||||||
{
|
{
|
||||||
/* copy first string, this is unique. */
|
/* copy first string, this is unique. */
|
||||||
|
@ -1008,7 +981,7 @@ print_a_completion (char *filename)
|
||||||
*u = '\0';
|
*u = '\0';
|
||||||
}
|
}
|
||||||
unique++;
|
unique++;
|
||||||
|
|
||||||
printf (" %s", filename);
|
printf (" %s", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1024,7 +997,7 @@ print_completions (char *filename)
|
||||||
|
|
||||||
*unique_string = '\0';
|
*unique_string = '\0';
|
||||||
unique = 0;
|
unique = 0;
|
||||||
|
|
||||||
if (*filename == '/' || (ptr = set_device (filename)) || incomplete)
|
if (*filename == '/' || (ptr = set_device (filename)) || incomplete)
|
||||||
{
|
{
|
||||||
errnum = 0;
|
errnum = 0;
|
||||||
|
@ -1039,8 +1012,8 @@ print_completions (char *filename)
|
||||||
|
|
||||||
printf (" Possible disks are: ");
|
printf (" Possible disks are: ");
|
||||||
|
|
||||||
for (i = (ptr && (*(ptr-2) == 'h' && *(ptr-1) == 'd') ? 1 : 0);
|
for (i = (ptr && (*(ptr-2) == 'h' && *(ptr-1) == 'd') ? 1 : 0);
|
||||||
i < (ptr && (*(ptr-2) == 'f' && *(ptr-1) == 'd') ? 1 : 2);
|
i < (ptr && (*(ptr-2) == 'f' && *(ptr-1) == 'd') ? 1 : 2);
|
||||||
i++)
|
i++)
|
||||||
{
|
{
|
||||||
for (j = 0; j < 8; j++)
|
for (j = 0; j < 8; j++)
|
||||||
|
@ -1077,7 +1050,7 @@ print_completions (char *filename)
|
||||||
if ((*(ptr - 2) == 'f') && (*(ptr - 1) == 'd')
|
if ((*(ptr - 2) == 'f') && (*(ptr - 1) == 'd')
|
||||||
&& ('0' <= *ptr && *ptr <= '8'))
|
&& ('0' <= *ptr && *ptr <= '8'))
|
||||||
*(ptr + 1) = ')', *(ptr + 2) = '\0';
|
*(ptr + 1) = ')', *(ptr + 2) = '\0';
|
||||||
|
|
||||||
putchar ('\n');
|
putchar ('\n');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1113,7 +1086,7 @@ print_completions (char *filename)
|
||||||
dir (filename);
|
dir (filename);
|
||||||
{
|
{
|
||||||
char *u = unique_string;
|
char *u = unique_string;
|
||||||
|
|
||||||
if (*u)
|
if (*u)
|
||||||
{
|
{
|
||||||
while (*ptr++)
|
while (*ptr++)
|
||||||
|
|
|
@ -598,11 +598,8 @@ int open_partition (void);
|
||||||
/* Sets device to the one represented by the SAVED_* parameters. */
|
/* Sets device to the one represented by the SAVED_* parameters. */
|
||||||
int make_saved_active (void);
|
int make_saved_active (void);
|
||||||
|
|
||||||
/* Hide a partition. */
|
/* Set or clear the current root partition's hidden flag. */
|
||||||
int hide_partition (void);
|
int set_partition_hidden_flag (int hidden);
|
||||||
|
|
||||||
/* Unhide a partition. */
|
|
||||||
int unhide_partition (void);
|
|
||||||
|
|
||||||
/* Open a file or directory on the active device, using GRUB's
|
/* Open a file or directory on the active device, using GRUB's
|
||||||
internal filesystem support. */
|
internal filesystem support. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue