add a new option --no-mem-option into the command kernel.

This commit is contained in:
okuji 2000-06-23 08:53:27 +00:00
parent 9a41c6b1d4
commit f0ae3c922f
5 changed files with 68 additions and 32 deletions

View file

@ -1,3 +1,15 @@
2000-06-23 OKUJI Yoshinori <okuji@gnu.org>
* stage2/boot.c (load_image): Take an additional argument
LOAD_FLAGS.
If the kernel type is Linux and the bit
KERNEL_LOAD_NO_MEM_OPTION in LOAD_FLAGS is set, don't pass a
Linux's mem option automatically.
* stage2/shared.h (load_image): Added the new argument.
* stage2/builtins.c (kernel_func): If `--no-mem-option' is
specified, set the bit KERNEL_LOAD_NO_MEM_OPTION in LOAD_FLAGS,
otherwise, LOAD_FLAGS is zero.
2000-06-22 OKUJI Yoshinori <okuji@gnu.org>
* docs/tutorial.texi: Fixed some typos and syntax errors.

2
NEWS
View file

@ -4,6 +4,8 @@ New in 0.5.96 - XXXX-XX-XX:
* New commands, "reboot" and "halt".
* New command, "hiddenmenu". You can hide the menu interface by default
with this command.
* You can specify `--no-mem-option' to the command "kernel", if you want
GRUB not to pass a Linux's mem option automatically.
New in 0.5.95 - XXXX-XX-XX:
* NetBSD ELF kernel support is added. You have to specify the new option

View file

@ -38,7 +38,8 @@ static struct mod_list mll[99];
*/
kernel_t
load_image (char *kernel, char *arg, kernel_t suggested_type)
load_image (char *kernel, char *arg, kernel_t suggested_type,
unsigned long load_flags)
{
int len, i, exec_type = 0, align_4k = 1;
kernel_t type = KERNEL_TYPE_NONE;
@ -273,7 +274,8 @@ load_image (char *kernel, char *arg, kernel_t suggested_type)
/* Add a mem option automatically only if the user doesn't
specify it explicitly. */
if (! grub_strstr (src, "mem="))
if (! grub_strstr (src, "mem=")
&& ! (load_flags & KERNEL_LOAD_NO_MEM_OPTION))
{
grub_memmove (dest, "mem=", 4);
dest += 4;

View file

@ -1932,9 +1932,12 @@ static int
kernel_func (char *arg, int flags)
{
int len;
char *kernel_arg = arg;
kernel_t suggested_type = KERNEL_TYPE_NONE;
unsigned long load_flags = 0;
/* Deal with GNU-style long options. */
while (1)
{
/* If the option `--type=TYPE' is specified, convert the string to
a kernel type. */
if (grub_memcmp (arg, "--type=", 7) == 0)
@ -1960,11 +1963,20 @@ kernel_func (char *arg, int flags)
errnum = ERR_BAD_ARGUMENT;
return 1;
}
}
/* If the `--no-mem-option' is specified, don't pass a Linux's mem
option automatically. If the kernel is another type, this flag
has no effect. */
else if (grub_memcmp (arg, "--no-mem-option", 15) == 0)
load_flags |= KERNEL_LOAD_NO_MEM_OPTION;
else
break;
kernel_arg = skip_to (0, arg);
/* Try the next. */
arg = skip_to (0, arg);
}
len = grub_strlen (kernel_arg);
len = grub_strlen (arg);
/* Reset MB_CMDLINE. */
mb_cmdline = (char *) MB_CMDLINE_BUF;
@ -1975,8 +1987,8 @@ kernel_func (char *arg, int flags)
}
/* Copy the command-line to MB_CMDLINE. */
grub_memmove (mb_cmdline, kernel_arg, len + 1);
kernel_type = load_image (kernel_arg, mb_cmdline, suggested_type);
grub_memmove (mb_cmdline, arg, len + 1);
kernel_type = load_image (arg, mb_cmdline, suggested_type, load_flags);
if (kernel_type == KERNEL_TYPE_NONE)
return 1;
@ -1989,13 +2001,14 @@ static struct builtin builtin_kernel =
"kernel",
kernel_func,
BUILTIN_CMDLINE,
"kernel [--type=TYPE] FILE [ARG ...]",
"kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]",
"Attempt to load the primary boot image from FILE. The rest of the"
"line is passed verbatim as the \"kernel command line\". Any modules"
" must be reloaded after using this command. The option --type is used"
" to suggest what type of kernel to be loaded. TYPE must be either of"
" \"netbsd\", \"freebsd\", \"openbsd\", \"linux\", \"biglinux\" and"
" \"multiboot\"."
" \"multiboot\". The option --no-mem-option tells GRUB not to pass a"
" Linux's mem option automatically."
};

View file

@ -795,7 +795,14 @@ void copy_current_part_entry (char *buf);
#ifndef STAGE1_5
void bsd_boot (kernel_t type, int bootdev, char *arg)
__attribute__ ((noreturn));
kernel_t load_image (char *kernel, char *arg, kernel_t suggested_type);
/* Define flags for load_image here. */
/* Don't pass a Linux's mem option automatically. */
#define KERNEL_LOAD_NO_MEM_OPTION (1 << 0)
kernel_t load_image (char *kernel, char *arg, kernel_t suggested_type,
unsigned long load_flags);
int load_module (char *module, char *arg);
int load_initrd (char *initrd);
#endif