Hello. In this case we can transfer the whole functionality located in
kern/loader.c to a dedicated module boot.mod. This module will also
register "boot" command. In this way the encapsulation won't be broken
and kernel will become even smaller.
Vladimir 'phcoder' Serbinenko
Vesa Jääskeläinen wrote:
> Hi,
>
> How about following (may not be syntaxically correct):
>
> In kernel:
>
> /* Variable holding pointer to preboot hook function. */
> preboot_hook:
> .long 0
>
> ...
> /* Check if there is preboot hook installed. */
> movl preboot_hook, %eax
> testl %eax, %eax
> jne 1f
> call %eax
> 1:
> /* Continue boot. */
>
>
> Then in module code:
>
> void grub_preboot_hook_handler(void)
> {
> /* Process list of registered preboot hooks. */
> }
>
> void grub_preboot_register_hook(...);
> void grub_preboot_unregister_hook(...);
>
> GRUB_MOD_INIT(preboot)
> {
> preboot_hook = grub_preboot_hook_handler;
> }
>
> GRUB_MOD_FINI(preboot)
> {
> preboot_hook = 0;
> }
>
> If preboot.mod gets loaded then it goes and registers preboot handler to
> kernel to do its tricks. Other modules then would use preboot.mod to
> register their own handlers.
>
> This would have minimal impact for kernel.
>
> Thanks,
> Vesa Jääskeläinen
>
>
> _______________________________________________
> Grub-devel mailing list
> [email protected]
> http://lists.gnu.org/mailman/listinfo/grub-devel
_______________________________________________
Grub-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel