Index: conf/common.rmk
===================================================================
--- conf/common.rmk (revision 1967)
+++ conf/common.rmk (working copy)
@@ -325,7 +325,7 @@
scsi_mod_LDFLAGS = $(COMMON_LDFLAGS)
# Commands.
-pkglib_MODULES += hello.mod boot.mod terminal.mod ls.mod \
+pkglib_MODULES += hello.mod _boot.mod boot.mod terminal.mod ls.mod \
cmp.mod cat.mod help.mod search.mod \
loopback.mod fs_uuid.mod configfile.mod echo.mod \
terminfo.mod test.mod blocklist.mod hexdump.mod \
@@ -336,8 +336,13 @@
hello_mod_CFLAGS = $(COMMON_CFLAGS)
hello_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For _boot.mod.
+_boot_mod_SOURCES = commands/boot.c
+_boot_mod_CFLAGS = $(COMMON_CFLAGS)
+_boot_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
# For boot.mod.
-boot_mod_SOURCES = commands/boot.c
+boot_mod_SOURCES = commands/boot_normal.c
boot_mod_CFLAGS = $(COMMON_CFLAGS)
boot_mod_LDFLAGS = $(COMMON_LDFLAGS)
Index: conf/i386-pc.rmk
===================================================================
--- conf/i386-pc.rmk (revision 1967)
+++ conf/i386-pc.rmk (working copy)
@@ -41,7 +41,7 @@
# For kernel.img.
kernel_img_SOURCES = kern/i386/pc/startup.S kern/main.c kern/device.c \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
- kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/misc.c kern/mm.c kern/rescue.c kern/term.c \
kern/time.c \
kern/i386/dl.c kern/i386/pc/init.c kern/i386/pc/mmap.c \
kern/parser.c kern/partition.c \
@@ -52,7 +52,7 @@
term/i386/pc/console.c term/i386/vga_common.c \
symlist.c
kernel_img_HEADERS = arg.h boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
- env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
+ env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h rescue.h symbol.h term.h time.h types.h \
machine/biosdisk.h machine/boot.h machine/console.h machine/init.h \
machine/memory.h machine/loader.h machine/vga.h machine/vbe.h \
@@ -112,7 +112,7 @@
# For grub-emu.
util/grub-emu.c_DEPENDENCIES = grub_emu_init.h
-grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \
+grub_emu_SOURCES = commands/boot.c commands/boot_normal.c commands/cat.c commands/cmp.c \
commands/configfile.c commands/echo.c commands/help.c \
commands/terminal.c commands/ls.c commands/test.c \
commands/search.c commands/blocklist.c commands/hexdump.c \
@@ -125,7 +125,7 @@
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
kern/err.c \
normal/execute.c kern/file.c kern/fs.c normal/lexer.c \
- kern/loader.c kern/main.c kern/misc.c kern/parser.c \
+ kern/main.c kern/misc.c kern/parser.c \
grub_script.tab.c kern/partition.c kern/rescue.c kern/term.c \
normal/arg.c normal/cmdline.c normal/command.c normal/function.c\
normal/completion.c normal/main.c normal/color.c \
Index: conf/i386-efi.rmk
===================================================================
--- conf/i386-efi.rmk (revision 1967)
+++ conf/i386-efi.rmk (working copy)
@@ -49,7 +49,7 @@
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
kern/err.c \
normal/execute.c kern/file.c kern/fs.c normal/lexer.c \
- kern/loader.c kern/main.c kern/misc.c kern/parser.c \
+ kern/main.c kern/misc.c kern/parser.c \
grub_script.tab.c kern/partition.c kern/rescue.c kern/term.c \
normal/arg.c normal/cmdline.c normal/command.c normal/function.c\
normal/completion.c normal/context.c normal/main.c \
@@ -82,7 +82,7 @@
kernel_mod_EXPORTS = no
kernel_mod_SOURCES = kern/i386/efi/startup.S kern/main.c kern/device.c \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
- kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/misc.c kern/mm.c kern/rescue.c kern/term.c \
kern/i386/dl.c kern/i386/efi/init.c kern/parser.c kern/partition.c \
kern/env.c symlist.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c \
term/efi/console.c disk/efi/efidisk.c \
@@ -91,7 +91,7 @@
kern/generic/rtc_get_time_ms.c \
kern/generic/millisleep.c
kernel_mod_HEADERS = arg.h boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
- env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
+ env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h rescue.h symbol.h term.h time.h types.h \
efi/efi.h efi/time.h efi/disk.h
kernel_mod_CFLAGS = $(COMMON_CFLAGS)
Index: conf/x86_64-efi.rmk
===================================================================
--- conf/x86_64-efi.rmk (revision 1967)
+++ conf/x86_64-efi.rmk (working copy)
@@ -51,7 +51,7 @@
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
kern/err.c \
normal/execute.c kern/file.c kern/fs.c normal/lexer.c \
- kern/loader.c kern/main.c kern/misc.c kern/parser.c \
+ kern/main.c kern/misc.c kern/parser.c \
grub_script.tab.c kern/partition.c kern/rescue.c kern/term.c \
normal/arg.c normal/cmdline.c normal/command.c normal/function.c\
normal/completion.c normal/context.c normal/main.c \
@@ -85,7 +85,7 @@
kernel_mod_SOURCES = kern/x86_64/efi/startup.S kern/x86_64/efi/callwrap.S \
kern/main.c kern/device.c \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
- kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/misc.c kern/mm.c kern/rescue.c kern/term.c \
kern/x86_64/dl.c kern/i386/efi/init.c kern/parser.c kern/partition.c \
kern/env.c symlist.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c \
kern/time.c \
@@ -93,7 +93,7 @@
kern/generic/millisleep.c kern/generic/rtc_get_time_ms.c \
term/efi/console.c disk/efi/efidisk.c
kernel_mod_HEADERS = arg.h boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
- env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
+ env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h rescue.h symbol.h term.h time.h types.h \
efi/efi.h efi/time.h efi/disk.h machine/loader.h
kernel_mod_CFLAGS = $(COMMON_CFLAGS)
Index: conf/powerpc-ieee1275.rmk
===================================================================
--- conf/powerpc-ieee1275.rmk (revision 1967)
+++ conf/powerpc-ieee1275.rmk (working copy)
@@ -15,7 +15,7 @@
kernel_elf_HEADERS = arg.h boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h rescue.h \
- symbol.h term.h time.h types.h powerpc/libgcc.h loader.h partition.h \
+ symbol.h term.h time.h types.h powerpc/libgcc.h partition.h \
pc_partition.h ieee1275/ieee1275.h machine/kernel.h
symlist.c: $(addprefix include/grub/,$(kernel_elf_HEADERS)) config.h gensymlist.sh
@@ -52,7 +52,7 @@
\
io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
- kern/err.c kern/file.c kern/fs.c kern/loader.c kern/main.c \
+ kern/err.c kern/file.c kern/fs.c kern/main.c \
kern/misc.c kern/parser.c kern/partition.c kern/rescue.c \
kern/term.c fs/fshelp.c \
normal/arg.c normal/cmdline.c normal/command.c \
@@ -75,7 +75,7 @@
kernel_elf_SOURCES = kern/powerpc/ieee1275/startup.S kern/ieee1275/cmain.c \
kern/ieee1275/ieee1275.c kern/main.c kern/device.c \
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
- kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/misc.c kern/mm.c kern/rescue.c kern/term.c \
kern/ieee1275/init.c \
kern/ieee1275/mmap.c \
term/ieee1275/ofconsole.c \
Index: conf/i386-coreboot.rmk
===================================================================
--- conf/i386-coreboot.rmk (revision 1967)
+++ conf/i386-coreboot.rmk (working copy)
@@ -16,7 +16,7 @@
kern/i386/multiboot_mmap.c \
kern/main.c kern/device.c \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
- kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/misc.c kern/mm.c kern/rescue.c kern/term.c \
kern/time.c \
kern/i386/dl.c kern/parser.c kern/partition.c \
kern/i386/tsc.c kern/i386/pit.c \
@@ -27,7 +27,7 @@
term/i386/pc/at_keyboard.c \
symlist.c
kernel_elf_HEADERS = arg.h boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
- env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
+ env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h rescue.h symbol.h term.h time.h types.h \
machine/boot.h machine/console.h machine/init.h \
machine/memory.h machine/loader.h
Index: conf/sparc64-ieee1275.rmk
===================================================================
--- conf/sparc64-ieee1275.rmk (revision 1967)
+++ conf/sparc64-ieee1275.rmk (working copy)
@@ -15,7 +15,7 @@
kernel_elf_HEADERS = arg.h boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h rescue.h \
- symbol.h term.h time.h types.h sparc64/libgcc.h loader.h partition.h \
+ symbol.h term.h time.h types.h sparc64/libgcc.h partition.h \
pc_partition.h ieee1275/ieee1275.h machine/kernel.h
symlist.c: $(addprefix include/grub/,$(kernel_elf_HEADERS)) config.h gensymlist.sh
@@ -53,7 +53,7 @@
# grub_script.tab.c \
# io/gzio.c \
# kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \
-# kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \
+# kern/file.c kern/fs.c kern/main.c kern/misc.c \
# kern/parser.c kern/partition.c kern/rescue.c kern/term.c \
# normal/arg.c normal/cmdline.c normal/command.c \
# normal/completion.c normal/context.c normal/execute.c \
@@ -69,7 +69,7 @@
kernel_elf_SOURCES = kern/sparc64/ieee1275/init.c kern/ieee1275/ieee1275.c \
kern/main.c kern/device.c kern/disk.c kern/dl.c kern/file.c \
- kern/fs.c kern/err.c kern/misc.c kern/mm.c kern/loader.c \
+ kern/fs.c kern/err.c kern/misc.c kern/mm.c \
kern/rescue.c kern/term.c term/ieee1275/ofconsole.c \
kern/sparc64/ieee1275/openfw.c disk/ieee1275/ofdisk.c \
kern/partition.c kern/env.c kern/sparc64/dl.c symlist.c \
Index: conf/i386-ieee1275.rmk
===================================================================
--- conf/i386-ieee1275.rmk (revision 1967)
+++ conf/i386-ieee1275.rmk (working copy)
@@ -17,7 +17,7 @@
kern/ieee1275/cmain.c kern/ieee1275/openfw.c \
kern/main.c kern/device.c \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
- kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/misc.c kern/mm.c kern/rescue.c kern/term.c \
kern/i386/dl.c kern/parser.c kern/partition.c \
kern/env.c \
kern/time.c \
@@ -27,7 +27,7 @@
disk/ieee1275/ofdisk.c \
symlist.c
kernel_elf_HEADERS = arg.h cache.h device.h disk.h dl.h elf.h elfload.h \
- env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
+ env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h rescue.h symbol.h term.h time.h types.h \
ieee1275/ieee1275.h machine/kernel.h machine/loader.h machine/memory.h
kernel_elf_CFLAGS = $(COMMON_CFLAGS)
@@ -71,7 +71,7 @@
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
kern/err.c \
normal/execute.c kern/file.c kern/fs.c normal/lexer.c \
- kern/loader.c kern/main.c kern/misc.c kern/parser.c \
+ kern/main.c kern/misc.c kern/parser.c \
grub_script.tab.c kern/partition.c kern/rescue.c kern/term.c \
normal/arg.c normal/cmdline.c normal/command.c normal/function.c\
normal/completion.c normal/main.c \
Index: kern/loader.c
===================================================================
--- kern/loader.c (revision 1967)
+++ kern/loader.c (working copy)
@@ -1,75 +0,0 @@
-/*
- * GRUB -- GRand Unified Bootloader
- * Copyright (C) 2002,2003,2004,2006,2007 Free Software Foundation, Inc.
- *
- * GRUB is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GRUB is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GRUB. If not, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-
-static grub_err_t (*grub_loader_boot_func) (void);
-static grub_err_t (*grub_loader_unload_func) (void);
-static int grub_loader_noreturn;
-
-static int grub_loader_loaded;
-
-int
-grub_loader_is_loaded (void)
-{
- return grub_loader_loaded;
-}
-
-void
-grub_loader_set (grub_err_t (*boot) (void),
- grub_err_t (*unload) (void),
- int noreturn)
-{
- if (grub_loader_loaded && grub_loader_unload_func)
- grub_loader_unload_func ();
-
- grub_loader_boot_func = boot;
- grub_loader_unload_func = unload;
- grub_loader_noreturn = noreturn;
-
- grub_loader_loaded = 1;
-}
-
-void
-grub_loader_unset(void)
-{
- if (grub_loader_loaded && grub_loader_unload_func)
- grub_loader_unload_func ();
-
- grub_loader_boot_func = 0;
- grub_loader_unload_func = 0;
-
- grub_loader_loaded = 0;
-}
-
-grub_err_t
-grub_loader_boot (void)
-{
- if (! grub_loader_loaded)
- return grub_error (GRUB_ERR_NO_KERNEL, "no loaded kernel");
-
- if (grub_loader_noreturn)
- grub_machine_fini ();
-
- return (grub_loader_boot_func) ();
-}
-
Index: kern/rescue.c
===================================================================
--- kern/rescue.c (revision 1967)
+++ kern/rescue.c (working copy)
@@ -117,14 +117,6 @@
grub_refresh ();
}
-/* boot */
-static void
-grub_rescue_cmd_boot (int argc __attribute__ ((unused)),
- char *argv[] __attribute__ ((unused)))
-{
- grub_loader_boot ();
-}
-
/* cat FILE */
static void
grub_rescue_cmd_cat (int argc, char *argv[])
@@ -620,8 +612,6 @@
grub_printf ("Entering rescue mode...\n");
- grub_rescue_register_command ("boot", grub_rescue_cmd_boot,
- "boot an operating system");
grub_rescue_register_command ("cat", grub_rescue_cmd_cat,
"show the contents of a file");
grub_rescue_register_command ("help", grub_rescue_cmd_help,
Index: include/grub/loader.h
===================================================================
--- include/grub/loader.h (revision 1967)
+++ include/grub/loader.h (working copy)
@@ -25,20 +25,26 @@
#include
#include
+
/* Check if a loader is loaded. */
-int EXPORT_FUNC(grub_loader_is_loaded) (void);
+int grub_loader_is_loaded (void);
/* Set loader functions. NORETURN must be set to true, if BOOT won't return
to the original state. */
-void EXPORT_FUNC(grub_loader_set) (grub_err_t (*boot) (void),
+void grub_loader_set (grub_err_t (*boot) (void),
grub_err_t (*unload) (void),
int noreturn);
/* Unset current loader, if any. */
-void EXPORT_FUNC(grub_loader_unset) (void);
+void grub_loader_unset (void);
-/* Call the boot hook in current loader. This may or may not return,
- depending on the setting by grub_loader_set. */
-grub_err_t EXPORT_FUNC(grub_loader_boot) (void);
+/*Add a preboot function*/
+void *grub_loader_add_preboot (grub_err_t (*preboot_func) (int noreturn));
+/*Remove given preboot function*/
+void grub_loader_remove_preboot (void *hnd);
+
+void grub_rescue_cmd_boot (int argc, char *argv[]);
+
+
#endif /* ! GRUB_LOADER_HEADER */
Index: include/grub/kernel.h
===================================================================
--- include/grub/kernel.h (revision 1967)
+++ include/grub/kernel.h (working copy)
@@ -64,7 +64,7 @@
void grub_machine_init (void);
/* The machine-specific finalization. */
-void grub_machine_fini (void);
+void EXPORT_FUNC(grub_machine_fini) (void);
/* The machine-specific prefix initialization. */
void grub_machine_set_prefix (void);
Index: ChangeLog
===================================================================
--- ChangeLog (revision 1967)
+++ ChangeLog (working copy)
@@ -1,3 +1,24 @@
+2009-02-07 Vladimir Serbinenko
+
+ Add preboot hooks and move boot out of kernel
+
+ * conf/common.rmk: Added _boot.mod
+ * conf/i386-pc.rmk: Removed loader.c and loader.h from
+ kernel and grub-emu sources
+ * conf/i386-coreboot.rmk: Likewise
+ * conf/i386-efi.rmk: Likewise
+ * conf/i386-ieee1275.rmk: Likewise
+ * conf/powerpc-ieee1275.rmk: Likewise
+ * conf/sparc64-ieee1275.rmk: Likewise
+ * commands/boot.c: Moved from here...
+ * commands/boot_normal.c: ...moved here
+ * kern/loader.c: Moved to ..
+ * commands/boot.c: ... moved here
+ * commands/boot.c: preboot hook support
+ * kern/rescue.c: removed grub_rescue_cmd_boot
+ * include/grub/loader.h: removed EXPORT_FUNC
+ * include/grub/kernel.h: added EXPORT_FUNC to grub_machine_init
+
2009-02-01 Felix Zielcke
* INSTALL: Note that we now require at least autconf 2.59 and that LZO
Index: commands/boot.c
===================================================================
--- commands/boot.c (revision 1967)
+++ commands/boot.c (working copy)
@@ -17,34 +17,140 @@
* along with GRUB. If not, see .
*/
-#include
+#include
+#include
+#include
+#include
+#include
+#include
#include
-#include
-#include
-#include
-static grub_err_t
-grub_cmd_boot (struct grub_arg_list *state __attribute__ ((unused)),
- int argc, char **args __attribute__ ((unused)))
+struct grub_loader_preboot_t
{
- if (argc)
- return grub_error (GRUB_ERR_BAD_ARGUMENT, "too many arguments");
+ struct grub_loader_preboot_t *prev;
+ struct grub_loader_preboot_t *next;
+ grub_err_t (*preboot_func) (int noreturn);
+};
+
+static grub_dl_t my_mod;
+
+static grub_err_t (*grub_loader_boot_func) (void);
+static grub_err_t (*grub_loader_unload_func) (void);
+static int grub_loader_noreturn;
+static int grub_loader_loaded;
+static struct grub_loader_preboot_t *grub_loader_preboots=0;
+
+void *
+grub_loader_add_preboot (grub_err_t (*preboot_func) (int noreturn))
+{
+ struct grub_loader_preboot_t *cur;
+
+ if (!preboot_func)
+ return 0;
+
+ cur=(struct grub_loader_preboot_t *)
+ grub_malloc (sizeof (struct grub_loader_preboot_t));
+ if (!cur)
+ {
+ grub_error (GRUB_ERR_OUT_OF_MEMORY, "hook not added");
+ return 0;
+ }
+
+ cur->preboot_func=preboot_func;
+ cur->prev=0;
+ if (grub_loader_preboots)
+ {
+ cur->next=grub_loader_preboots;
+ cur->next->prev=cur;
+ }
+ else
+ cur->next=0;
+ grub_loader_preboots=cur;
+
+ return cur;
+}
+
+void
+grub_loader_remove_preboot (void *hnd)
+{
+ struct grub_loader_preboot_t *cur=(struct grub_loader_preboot_t *)hnd;
+
+ if (cur->next)
+ cur->next->prev=cur->prev;
+
+ if (cur->prev)
+ cur->prev->next=cur->next;
+ else
+ grub_loader_preboots=cur->next;
+
+ grub_free (cur);
+}
+
+int
+grub_loader_is_loaded (void)
+{
+ return grub_loader_loaded;
+}
+
+void
+grub_loader_set (grub_err_t (*boot) (void),
+ grub_err_t (*unload) (void),
+ int noreturn)
+{
+ if (grub_loader_loaded && grub_loader_unload_func)
+ grub_loader_unload_func ();
- grub_loader_boot ();
+ grub_loader_boot_func = boot;
+ grub_loader_unload_func = unload;
+ grub_loader_noreturn = noreturn;
- return 0;
+ grub_loader_loaded = 1;
}
-
+void
+grub_loader_unset(void)
+{
+ if (grub_loader_loaded && grub_loader_unload_func)
+ grub_loader_unload_func ();
+
+ grub_loader_boot_func = 0;
+ grub_loader_unload_func = 0;
-GRUB_MOD_INIT(boot)
+ grub_loader_loaded = 0;
+}
+
+
+void
+grub_rescue_cmd_boot (int argc __attribute__ ((unused)),
+ char *argv[] __attribute__ ((unused)))
{
- (void) mod; /* To stop warning. */
- grub_register_command ("boot", grub_cmd_boot, GRUB_COMMAND_FLAG_BOTH,
- "boot", "Boot an operating system.", 0);
+ struct grub_loader_preboot_t *cur;
+ if (! grub_loader_loaded)
+ {
+ grub_error (GRUB_ERR_NO_KERNEL, "no loaded kernel");
+ return;
+ }
+
+ if (grub_loader_noreturn)
+ grub_machine_fini ();
+
+ for (cur=grub_loader_preboots; cur; cur=cur->next)
+ if (cur->preboot_func)
+ cur->preboot_func (grub_loader_noreturn);
+
+ (grub_loader_boot_func) ();
}
-GRUB_MOD_FINI(boot)
+
+GRUB_MOD_INIT(_boot)
{
- grub_unregister_command ("boot");
+ grub_rescue_register_command ("boot",
+ grub_rescue_cmd_boot,
+ "boot OS");
+ my_mod = mod;
}
+
+GRUB_MOD_FINI(_boot)
+{
+ grub_rescue_unregister_command ("boot");
+}
Index: commands/boot_normal.c
===================================================================
--- commands/boot_normal.c (revision 0)
+++ commands/boot_normal.c (revision 0)
@@ -0,0 +1,48 @@
+/* boot_normal.c - wraper of boot command for normal mode */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2003,2005,2007 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see .
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+static grub_err_t
+grub_cmd_boot (struct grub_arg_list *state __attribute__ ((unused)),
+ int argc, char **args __attribute__ ((unused)))
+{
+
+ grub_rescue_cmd_boot (argc, args);
+
+ return grub_errno;
+}
+
+
+
+GRUB_MOD_INIT(boot)
+{
+ (void) mod; /* To stop warning. */
+ grub_register_command ("boot", grub_cmd_boot, GRUB_COMMAND_FLAG_BOTH,
+ "boot", "Boot an operating system.", 0);
+}
+
+GRUB_MOD_FINI(boot)
+{
+ grub_unregister_command ("boot");
+}