* [PATCH] Unify rescue and normal commands
@ 2009-03-05 17:40 Bean
2009-03-07 17:25 ` Bean
2009-03-08 13:07 ` Robert Millan
0 siblings, 2 replies; 9+ messages in thread
From: Bean @ 2009-03-05 17:40 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 1876 bytes --]
Hi,
This patch unify the two command set, make them available in both
rescue and normal mode.
The basic command is registered using grub_register_command:
grub_command_t
grub_register_command (const char *name,
grub_command_func_t func,
const char *summary,
const char *description);
The command function looks like this:
grub_err_t grub_cmd_func (grub_command_t cmd, int argc, char **args);
The extended command is built on top on basic command, it provides
argument parsing function. Extended command only depends on
extcmd.mod, which is much smaller than normal.mod.
grub_extcmd_t grub_register_extcmd (const char *name,
grub_extcmd_func_t func,
unsigned flags,
const char *summary,
const char *description,
const struct grub_arg_option *parser);
static grub_err_t
grub_cmd_func (grub_extcmd_t ext, int argc, char **args);
The option state is in ext->state, to access the underlying command
structure, use ext->cmd.
There is another special command: dynamic command, which is used by
normal module to insert commands in command.lst. The module would only
be loaded when the dynamic command is invoked.
The command.lst now contains both basic and extended commands, the
extended command is prefixed by *.
The command structure has a priority parameter, for basic command, its
value is 0, for extended command, it's 1. When the command list is
search, it uses the priority value to decide which command to use.
I also move the rescue commands out of kernel to module minicmd. Only
set, unset, export, ls and insmod remains, as they're critical for
further modules loading.
--
Bean
[-- Attachment #2: command.zip --]
[-- Type: application/zip, Size: 40244 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Unify rescue and normal commands
2009-03-05 17:40 [PATCH] Unify rescue and normal commands Bean
@ 2009-03-07 17:25 ` Bean
2009-03-08 12:28 ` Robert Millan
2009-03-08 13:07 ` Robert Millan
1 sibling, 1 reply; 9+ messages in thread
From: Bean @ 2009-03-07 17:25 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 2591 bytes --]
On Fri, Mar 6, 2009 at 1:40 AM, Bean <bean123ch@gmail.com> wrote:
> Hi,
>
> This patch unify the two command set, make them available in both
> rescue and normal mode.
>
> The basic command is registered using grub_register_command:
>
> grub_command_t
> grub_register_command (const char *name,
> grub_command_func_t func,
> const char *summary,
> const char *description);
>
> The command function looks like this:
> grub_err_t grub_cmd_func (grub_command_t cmd, int argc, char **args);
>
> The extended command is built on top on basic command, it provides
> argument parsing function. Extended command only depends on
> extcmd.mod, which is much smaller than normal.mod.
>
> grub_extcmd_t grub_register_extcmd (const char *name,
> grub_extcmd_func_t func,
> unsigned flags,
> const char *summary,
> const char *description,
> const struct grub_arg_option *parser);
>
> static grub_err_t
> grub_cmd_func (grub_extcmd_t ext, int argc, char **args);
>
> The option state is in ext->state, to access the underlying command
> structure, use ext->cmd.
>
> There is another special command: dynamic command, which is used by
> normal module to insert commands in command.lst. The module would only
> be loaded when the dynamic command is invoked.
>
> The command.lst now contains both basic and extended commands, the
> extended command is prefixed by *.
>
> The command structure has a priority parameter, for basic command, its
> value is 0, for extended command, it's 1. When the command list is
> search, it uses the priority value to decide which command to use.
>
> I also move the rescue commands out of kernel to module minicmd. Only
> set, unset, export, ls and insmod remains, as they're critical for
> further modules loading.
Hi,
This is an update version of the patch:
1, Add new base class grub_prio_list, which represent a named list
with priority parameter:
struct
{
next;
name;
prio;
}
The list would be sorted by name, then by priority, it would ensure
that first one found is of the highest priority.
Now grub_command is a subclass of grub_prio_list, and use its function
to insert/remove items.
grub_list -> grub_named_list -> grub_prio_list -> grub_command.
2, sync with svn r2021
3, Misc bug fixes.
--
Bean
[-- Attachment #2: command_2.zip --]
[-- Type: application/zip, Size: 33056 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Unify rescue and normal commands
2009-03-07 17:25 ` Bean
@ 2009-03-08 12:28 ` Robert Millan
2009-03-08 12:39 ` Bean
0 siblings, 1 reply; 9+ messages in thread
From: Robert Millan @ 2009-03-08 12:28 UTC (permalink / raw)
To: The development of GRUB 2
On Sun, Mar 08, 2009 at 01:25:37AM +0800, Bean wrote:
> Hi,
>
> This is an update version of the patch:
>
> 1, Add new base class grub_prio_list, which represent a named list
> with priority parameter:
>
> struct
> {
> next;
> name;
> prio;
> }
>
> The list would be sorted by name, then by priority, it would ensure
> that first one found is of the highest priority.
>
> Now grub_command is a subclass of grub_prio_list, and use its function
> to insert/remove items.
>
> grub_list -> grub_named_list -> grub_prio_list -> grub_command.
>
> 2, sync with svn r2021
>
> 3, Misc bug fixes.
Could you send patches as inline attachments? It's cumbersome to review them
when they're inside a zip file.
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Unify rescue and normal commands
2009-03-08 12:28 ` Robert Millan
@ 2009-03-08 12:39 ` Bean
0 siblings, 0 replies; 9+ messages in thread
From: Bean @ 2009-03-08 12:39 UTC (permalink / raw)
To: The development of GRUB 2
On Sun, Mar 8, 2009 at 8:28 PM, Robert Millan <rmh@aybabtu.com> wrote:
> On Sun, Mar 08, 2009 at 01:25:37AM +0800, Bean wrote:
>> Hi,
>>
>> This is an update version of the patch:
>>
>> 1, Add new base class grub_prio_list, which represent a named list
>> with priority parameter:
>>
>> struct
>> {
>> next;
>> name;
>> prio;
>> }
>>
>> The list would be sorted by name, then by priority, it would ensure
>> that first one found is of the highest priority.
>>
>> Now grub_command is a subclass of grub_prio_list, and use its function
>> to insert/remove items.
>>
>> grub_list -> grub_named_list -> grub_prio_list -> grub_command.
>>
>> 2, sync with svn r2021
>>
>> 3, Misc bug fixes.
>
> Could you send patches as inline attachments? It's cumbersome to review them
> when they're inside a zip file.
Hi,
Oh, the patch is too big, I got rebound when using plain file.
--
Bean
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Unify rescue and normal commands
2009-03-05 17:40 [PATCH] Unify rescue and normal commands Bean
2009-03-07 17:25 ` Bean
@ 2009-03-08 13:07 ` Robert Millan
2009-03-08 13:10 ` phcoder
2009-03-08 14:45 ` Bean
1 sibling, 2 replies; 9+ messages in thread
From: Robert Millan @ 2009-03-08 13:07 UTC (permalink / raw)
To: The development of GRUB 2
On Fri, Mar 06, 2009 at 01:40:36AM +0800, Bean wrote:
> Hi,
>
> This patch unify the two command set, make them available in both
> rescue and normal mode.
Could you provide a bit of insight on what we archieve with this? I assume
the idea is that a number of commands no longer need to drag normal.mod in,
which is useful for size constrained use cases (which ones do you have in
mind?).
Is there something else to this? Does normal mode still work the same way?
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Unify rescue and normal commands
2009-03-08 13:07 ` Robert Millan
@ 2009-03-08 13:10 ` phcoder
2009-03-08 14:45 ` Bean
1 sibling, 0 replies; 9+ messages in thread
From: phcoder @ 2009-03-08 13:10 UTC (permalink / raw)
To: The development of GRUB 2
Robert Millan wrote:
> On Fri, Mar 06, 2009 at 01:40:36AM +0800, Bean wrote:
>> Hi,
>>
>> This patch unify the two command set, make them available in both
>> rescue and normal mode.
>
> Could you provide a bit of insight on what we archieve with this? I assume
> the idea is that a number of commands no longer need to drag normal.mod in,
> which is useful for size constrained use cases (which ones do you have in
> mind?).
>
> Is there something else to this? Does normal mode still work the same way?
>
It would also end up with the files like *_normal.c
--
Regards
Vladimir 'phcoder' Serbinenko
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Unify rescue and normal commands
2009-03-08 13:07 ` Robert Millan
2009-03-08 13:10 ` phcoder
@ 2009-03-08 14:45 ` Bean
2009-03-14 15:19 ` Bean
1 sibling, 1 reply; 9+ messages in thread
From: Bean @ 2009-03-08 14:45 UTC (permalink / raw)
To: The development of GRUB 2
On Sun, Mar 8, 2009 at 9:07 PM, Robert Millan <rmh@aybabtu.com> wrote:
> On Fri, Mar 06, 2009 at 01:40:36AM +0800, Bean wrote:
>> Hi,
>>
>> This patch unify the two command set, make them available in both
>> rescue and normal mode.
>
> Could you provide a bit of insight on what we archieve with this? I assume
> the idea is that a number of commands no longer need to drag normal.mod in,
> which is useful for size constrained use cases (which ones do you have in
> mind?).
>
> Is there something else to this? Does normal mode still work the same way?
Hi,
Some reason for unify command set:
1, Some of the normal mode function are just duplication, such as set,
unset, insmod, lsmod, rmmod, boot. And loader commands usually have
two sets, the normal mode part just calls the underlying rescue one,
such as _linux and linux, _chain and chain, _bsd and bsd, etc. These
are eliminated with unify commands.
2, It frees command from normal.mod. The basic command is supported in
kernel, and extended commands only needs extcmd.mod. This make it
possible to embedded some useful command in core.img itself.
3, It's also an important step for my planning of splitting the normal
mode. IMO, it'd be nice to have an unify interface in grub2, users get
different function by loading different modules. For example, to get
rescue mode, he uses minicmd + basic command line + basic line parser,
to get normal mode, he uses menu viewer + bash like parser.
--
Bean
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Unify rescue and normal commands
2009-03-08 14:45 ` Bean
@ 2009-03-14 15:19 ` Bean
2009-03-21 8:39 ` Bean
0 siblings, 1 reply; 9+ messages in thread
From: Bean @ 2009-03-14 15:19 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 9846 bytes --]
On Sun, Mar 8, 2009 at 10:45 PM, Bean <bean123ch@gmail.com> wrote:
> On Sun, Mar 8, 2009 at 9:07 PM, Robert Millan <rmh@aybabtu.com> wrote:
>> On Fri, Mar 06, 2009 at 01:40:36AM +0800, Bean wrote:
>>> Hi,
>>>
>>> This patch unify the two command set, make them available in both
>>> rescue and normal mode.
>>
>> Could you provide a bit of insight on what we archieve with this? I assume
>> the idea is that a number of commands no longer need to drag normal.mod in,
>> which is useful for size constrained use cases (which ones do you have in
>> mind?).
>>
>> Is there something else to this? Does normal mode still work the same way?
>
> Hi,
>
> Some reason for unify command set:
>
> 1, Some of the normal mode function are just duplication, such as set,
> unset, insmod, lsmod, rmmod, boot. And loader commands usually have
> two sets, the normal mode part just calls the underlying rescue one,
> such as _linux and linux, _chain and chain, _bsd and bsd, etc. These
> are eliminated with unify commands.
>
> 2, It frees command from normal.mod. The basic command is supported in
> kernel, and extended commands only needs extcmd.mod. This make it
> possible to embedded some useful command in core.img itself.
>
> 3, It's also an important step for my planning of splitting the normal
> mode. IMO, it'd be nice to have an unify interface in grub2, users get
> different function by loading different modules. For example, to get
> rescue mode, he uses minicmd + basic command line + basic line parser,
> to get normal mode, he uses menu viewer + bash like parser.
Hi,
This is another update. I've resynced with the current svn head, fixes
a few bugs, and modify all platforms except sparc64.
If there is no objection, I'd commit it soon.
2009-03-14 Bean <bean123ch@gmail.com>
* commands/blocklist.c: Add include file <grub/command.h>, remove
<grub/normal.h> and <grub/arg.h>.
(grub_cmd_blocklist): Use the new command interface.
(GRUB_MOD_INIT): Likewise.
(GRUB_MOD_FINI): Likewise.
* commands/boot.c: Likewise.
* commands/cat.c: Likewise.
* commands/cmp.c: Likewise.
* commands/configfile.c: Likewise.
* commands/crc.c: Likewise.
* commands/echo.c: Likewise.
* commands/halt.c: Likewise.
* commands/handler.c: Likewise.
* commands/hdparm.c: Likewise.
* commands/help.c: Likewise.
* commands/hexdump.c: Likewise.
* commands/loadenv.c: Likewise.
* commands/ls.c: Likewise.
* commands/lsmmap.c: Likewise.
* commands/lspci.c: Likewise.
* commands/loadenv.c: Likewise.
* commands/read.c: Likewise.
* commands/reboot.c: Likewise.
* commands/search.c: Likewise.
* commands/sleep.c: Likewise.
* commands/test.c: Likewise.
* commands/usbtest.c: Likewise.
* commands/videotest.c: Likewise.
* commands/i386/cpuid.c: Likewise.
* commands/i386/pc/halt.c: Likewise.
* commands/i386/pc/play.c: Likewise.
* commands/i386/pc/pxecmd.c: Likewise.
* commands/i386/pc/vbeinfo.c: Likewise.
* commands/i386/pc/vbetest.c: Likewise.
* commands/ieee1275/suspend.c: Likewise.
* disk/loopback.c: Likewise.
* font/font_cmd.c: Likewise.
* hello/hello.c: Likewise.
* loader/efi/appleloader.c: Likewise.
* loader/efi/chainloader.c: Likewise.
* loader/i386/bsd.c: Likewise.
* loader/i386/efi/linux.c: Likewise.
* loader/i386/ieee1275/linux.c: Likewise.
* loader/i386/linux.c: Likewise.
* loader/i386/pc/chainloader.c: Likewise.
* loader/i386/pc/linux.c: Likewise.
* loader/powerpc/ieee1275/linux.c: Likewise.
* loader/multiboot_loader.c: Likewise.
* term/gfxterm.c: Likewise.
* term/i386/pc/serial.c: Likewise.
* term/terminfo.c: Likewise.
* term/i386/pc/vesafb.c: Removed <grub/arg.h>.
* term/i386/pc/vga.c: Likewise.
* video/readers/jpeg.c: Likewise.
* video/readers/png.c: Likewise.
* video/readers/tga.c: Likewise.
* util/grub-fstest (cmd_loopback): Removed.
(cmd_blocklist): Likewise.
(cmd_ls): Likewise.
(grub_register_command): Likewise.
(grub_unregister_command): Likewise.
(execute_command): Use grub_command_find to locate command and execute
it.
* include/grub/efi/chainloader.h: Removed.
* loader/efi/chainloader_normal.c: Likewise.
* loader/i386/bsd_normal.c: Likewise.
* loader/i386/pc/chainloader_normal.c: Likewise.
* loader/i386/pc/multiboot_normal.c: Likewise.
* loader/linux_normal.c: Likewise.
* loader/multiboot_loader_normal.c: Likewise.
* loader/powerpc/ieee1275/linux_normal.c: Likewise.
* gencmdlist.sh: Scan new registration command grub_register_extcmd
and grub_register_command_p1.
* conf/common.rmk (grub_fstest_SOURCES): Add kern/list.c,
kern/command.c, lib/arg.c and commands/extcmd.c.
(pkglib_MODULES): Remove boot.mod, and minicmd.mod and extcmd.mod.
(minicmd_mod_SOURCES): New variable.
(minicmd_mod_CFLAGS): Likewise.
(minicmd_mod_LDFLAGS): Likewise.
(extcmd_mod_SOURCES): Likewise.
(extcmd_mod_CFLAGS): Likewise.
(extcmd_mod_LDFLAGS): Likewise.
(boot_mod_SOURCES): Removed.
(boot_mod_CFLAGS): Likewise.
(boot_mod_LDFLAGS): Likewise.
* conf/i386-pc.rmk (kernel_img_SOURCES): Add kern/command.c and
kern/corecmd.c.
(kernel_img_HEADERS): Add command.h.
(grub_emu_SOURCES): Remove commands/boot.c and normal/arg.c, add
commands/minicmd.c, kern/command.c, kern/corecmd.c, commands/extcmd.c
and lib/arg.c.
(pkglib_MODULES): Change _linux.mod, _chain.mod, _bsd.mod and
_multiboot.mod as linux.mod, chain.mod, bsd.mod and multiboot.mod,
remove the corresponding normal mode command.
(normal_mod_SOURCES): Remove normal/arg.c.
* conf/i386-coreboot.rmk: Likewise.
* conf/i386-efi.rmk: Likewise.
* conf/i386-ieee1275.rmk: Likewise.
* conf/powerpc-ieee1275.rmk: Likewise.
* conf/x86_64-efi.rmk: Likewise.
* include/grub/arg.h: Move from here ...
* include/grub/lib/arg.h: ... to here.
* normal/arg.c: Move from here ...
* lib/arg.c: ... to here.
* commands/extcmd.c: New file.
* commands/minicmd.c: Likewise.
* include/grub/command.h: Likewise.
* include/grub/extcmd.h: Likewise.
* kern/command.c: Likewise.
* kern/corecmd.c: Likewise.
* kern/list.c (grub_list_iterate): Return int instead of void.
(grub_list_insert): New function.
(grub_prio_list_insert): Likewise.
* kern/rescue.c (grub_rescue_command): Removed.
(grub_rescue_command_list): Likewise.
(grub_rescue_register_command): Likewise.
(grub_rescue_unregister_command): Likewise.
(grub_rescue_cmd_boot): Move to minicmd.c
(grub_rescue_cmd_help): Likewise.
(grub_rescue_cmd_info): Likewise.
(grub_rescue_cmd_boot): Likewise.
(grub_rescue_cmd_testload): Likewise.
(grub_rescue_cmd_dump): Likewise.
(grub_rescue_cmd_rmmod): Likewise.
(grub_rescue_cmd_lsmod): Likewise.
(grub_rescue_cmd_exit): Likewise.
(grub_rescue_print_devices): Moved to corecmd.c.
(grub_rescue_print_files): Likewise.
(grub_rescue_cmd_ls): Likewise.
(grub_rescue_cmd_insmod): Likewise.
(grub_rescue_cmd_set): Likewise.
(grub_rescue_cmd_unset): Likewise.
(attemp_normal_mode): Use grub_command_find to get normal module.
(grub_enter_rescue_mode): Use grub_register_core_commands to register
commands, remove grub_rescue_regiter_command calls.
* normal/command.c (grub_regiser_command): Removed.
(grub_unregister_command): Likewise.
(grub_command_find): Likewise.
(grub_iterate_commands): Likewise.
(rescue_command): Likewise.
(export_command): Moved to corecmd.c.
(set_command): Removed.
(unset_command): Likewise.
(insmod_command): Likewise.
(rmmod_command): Likewise.
(lsmod_command): Likewise.
(grub_command_init): Likewise.
* normal/completion.c (iterate_command): Use cmd->prio to check for
active command.
(complete_arguments): Use grub_extcmd_t structure to find options.
(grub_normal_do_completion): Change function grub_iterate_commands to
grub_command_iterate.
* normal/execute.c (grub_script_execute_cmd): No need to parse
argument here.
* normal/main.c (grub_dyncmd_dispatcher): New function.
(read_command_list): Register unload commands as dyncmd.
(grub_cmd_normal): Use new command interface, register rescue,
unregister normal at entry, register normal, unregister rescue at exit.
* include/grub/list.h (grub_list_test_t): New type.
(grub_list_iterate): Return int instead of void.
(grub_list_insert): New function.
(GRUB_AS_NAMED_LIST_P): New macro.
(GRUB_AS_PRIO_LIST): Likewise.
(GRUB_AS_PRIO_LIST_P): Likewise.
(GRUB_PRIO_LIST_PRIO_MASK): New constant.
(GRUB_PRIO_LIST_FLAG_ACTIVE): Likewise.
(grub_prio_list): New structure.
(grub_prio_list_insert): New function.
(grub_prio_list_remove): New inline function.
* include/grub/normal.h: Remove <grub/arg.h>, add <grub/command.h>.
(GRUB_COMMAND_FLAG_CMDLINE): Moved to command.h.
(GRUB_COMMAND_FLAG_MENU): Likewise.
(GRUB_COMMAND_FLAG_BOTH): Likewise.
(GRUB_COMMAND_FLAG_TITLE): Likewise.
(GRUB_COMMAND_FLAG_NO_ECHO): Likewise.
(GRUB_COMMAND_FLAG_NO_ARG_PARSE): Removed.
(GRUB_COMMAND_FLAG_NOT_LOADED): Likewise.
(grub_command): Likewise.
(grub_register_command): Likewise.
(grub_command_find): Likewise.
(grub_iterate_commands): Likewise.
(grub_command_init): Likewise.
(grub_arg_parse): Likewise.
(grub_arg_show_help): Likewise.
* include/grub/rescue.h (grub_rescue_register_command): Removed.
(grub_rescue_unregister_command): Likewise.
* include/grub/i386/bsd.h: Remove grub_rescue_cmd_freebsd,
grub_rescue_cmd_openbsd, grub_rescue_cmd_netbsd,
grub_rescue_cmd_freebsd_loadenv and grub_rescue_cmd_freebsd_module.
* include/grub/i386/efi/loader.h: Remove grub_rescue_cmd_linux and
grub_rescue_cmd_initrd.
* include/grub/i386/loader.h: Likewise.
* include/grub/x86_64/loader.h: Likewise.
* include/grub/i386/pc/chainloader.h: Remove grub_chainloader_cmd.
--
Bean
[-- Attachment #2: command_3.zip --]
[-- Type: application/zip, Size: 43827 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Unify rescue and normal commands
2009-03-14 15:19 ` Bean
@ 2009-03-21 8:39 ` Bean
0 siblings, 0 replies; 9+ messages in thread
From: Bean @ 2009-03-21 8:39 UTC (permalink / raw)
To: The development of GRUB 2
Committed.
--
Bean
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-03-21 8:39 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-05 17:40 [PATCH] Unify rescue and normal commands Bean
2009-03-07 17:25 ` Bean
2009-03-08 12:28 ` Robert Millan
2009-03-08 12:39 ` Bean
2009-03-08 13:07 ` Robert Millan
2009-03-08 13:10 ` phcoder
2009-03-08 14:45 ` Bean
2009-03-14 15:19 ` Bean
2009-03-21 8:39 ` Bean
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.