Port-i386 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Patch for boot loader: "menu" command
Hi,
with NetBSD 5.1, the install kernel needs to be booted with a
kernel module loaded (the miniroot kernel module).
This means that any installation attempts following this old
avenue will FAIL from this point forward:
* dropping to the boot prompt
* switch to serial console
* resuming boot with just "boot"
which used to work just fine in the past, but will now fail
spectacularly, first with a warning about missing /dev/console
and subsequently with no ability to exec /sbin/init, and with
only "reboot" as the remaining option.
Now, there are probably several ways to go around mending this.
Some of them are:
1) provide a way to display the contents of boot.cfg (but need to
prevent showing the "contents of /netbsd"...)
2) provide a way to recall and edit one of the boot commands from
boot.cfg (sounds complicated, and more than I intended to chew
off in this round)
3) provide a way to re-enter the boot menu you dropped from in
the first step in the procedure above, and then allow to
select one of the boot methods already specified in boot.cfg
Of these, the least complicated appears to be 3), and here's a
suggested patch (in src/sys/arch/i386/stand/boot/) which I think
will do this.
If there's no vehement opposition, I suggest to also adapt this
for both of netbsd-6 and netbsd-5 and submit pull-up requests for
those branches as well.
Comments?
- Håvard
*** boot2.c 08 Aug 2012 08:31:40 +0200 1.58
--- boot2.c 25 Jul 2013 14:07:26 +0200
***************
*** 120,125 ****
--- 120,128 ----
void command_boot(char *);
void command_dev(char *);
void command_consdev(char *);
+ #ifndef SMALL
+ void command_menu(char *);
+ #endif
void command_modules(char *);
void command_multiboot(char *);
***************
*** 131,136 ****
--- 134,142 ----
{ "boot", command_boot },
{ "dev", command_dev },
{ "consdev", command_consdev },
+ #ifndef SMALL
+ { "menu", command_menu },
+ #endif
{ "modules", command_modules },
{ "load", module_add },
{ "multiboot", command_multiboot },
***************
*** 394,399 ****
--- 400,408 ----
"dev xd[N[x]]:\n"
"consdev {pc|com[0123]|com[0123]kbd|auto}\n"
"vesa {modenum|on|off|enabled|disabled|list}\n"
+ #ifndef SMALL
+ "menu (reenters boot menu, if defined in boot.cfg)\n"
+ #endif
"modules {on|off|enabled|disabled}\n"
"load {path_to_module}\n"
"multiboot [xdNx:][filename] [<args>]\n"
***************
*** 504,509 ****
--- 513,533 ----
printf("invalid console device.\n");
}
+ #ifndef SMALL
+ /* ARGSUSED */
+ void
+ command_menu(char *arg)
+ {
+
+ if (bootconf.nummenu > 0) {
+ /* Does not return */
+ doboottypemenu();
+ } else {
+ printf("No menu defined in boot.cfg\n");
+ }
+ }
+ #endif /* !SMALL */
+
void
command_modules(char *arg)
{
Home |
Main Index |
Thread Index |
Old Index