NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-amd64/59207: unexpected behavior of dev command in bootstrap code



The following reply was made to PR port-amd64/59207; it has been noted by GNATS.

From: Paul Goyette <paul%whooppee.com@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: 
Subject: Re: port-amd64/59207: unexpected behavior of dev command in bootstrap
 code
Date: Wed, 26 Mar 2025 06:23:48 -0700 (PDT)

 With the patches below, PLUS the pxeboot patch you sent offline, it
 (bootx64.efi) works as desired.  I have removed all of the NAME=xxx
 from the kernel filenames and set DEV=NAME=xxx (to override the initial
 value of DEV=NAME-yyy.  It boots correctly from the specified kernel
 file.
 
 A qemu VM installed with these patches still seems to ignore the DEV
 command within boot.cfg (but I have not cacrefully verified this.)  I
 was not able to test any other non-efi boots...
 
 Here is the pxeboot patch that you originally sent off-list:
 
 ```
 diff -urN a/src/sys/arch/i386/stand/pxeboot/main.c
 b/src/sys/arch/i386/stand/pxeboot/main.c
 --- a/src/sys/arch/i386/stand/pxeboot/main.c    2024-11-10
 04:31:15.013906675 +0000
 +++ b/src/sys/arch/i386/stand/pxeboot/main.c    2025-03-26
 11:07:28.331263167 +0000
 @@ -180,6 +180,18 @@
          return (1);
   }
 
 +/*
 + * dummy function to satisfy link against call in
 + * sys/arch/i386/stand/lib/bootmenu.c:do_bootcfg_command()
 + */ +/* ARGSUSED */
 +void
 +command_dev(char *arg)
 +{
 +       (void)arg;
 +       return;
 +}
 +
   /* ARGSUSED */
   void
   command_help(char *arg)
 ```
 
 
 
 On Wed, 26 Mar 2025, RVP via gnats wrote:
 
 > The following reply was made to PR port-amd64/59207; it has been noted by GNATS.
 >
 > From: RVP <rvp%SDF.ORG@localhost>
 > To: gnats-bugs%netbsd.org@localhost
 > Cc:
 > Subject: Re: port-amd64/59207: unexpected behavior of dev command in bootstrap
 > code
 > Date: Wed, 26 Mar 2025 07:44:21 +0000 (UTC)
 >
 > On Sun, 23 Mar 2025, Paul Goyette via gnats wrote:
 >
 > > It seems that the rndseed command behaves similarly, [...]
 > >
 >
 > Yeah, the set of commands recognized in /boot.cfg differ from those
 > understood at the bootloader prompt.
 >
 > For EFI on amd64, following the call sequence:
 >
 > sys/arch/i386/stand/efiboot/efiboot.c:efi_main()	->
 > sys/arch/i386/stand/efiboot/boot.c:boot()		->
 > sys/arch/i386/stand/lib/bootmenu.c:parsebootconf()	->
 > sys/lib/libsa/bootcfg.c:perform_bootcfg()
 >
 > we see that only these commands are recognized in /boot.cfg:
 >
 > menu, banner, timeout, default, consdev, root, format, clear &
 > fs, load, userconf via the call-back function.
 >
 > At the bootloader prompt, the `commands[]' array has the commands you can
 > type in:
 >
 > sys/arch/i386/stand/efiboot/efiboot.c:efi_main()	->
 > sys/arch/i386/stand/efiboot/boot.c:boot()		->
 > sys/arch/i386/stand/lib/menuutils.c:bootmenu()	-> docommand() ->
 > sys/arch/i386/stand/efiboot/boot.c:			->
 >
 > struct bootblk_command commands[] = { ... };
 >
 > There're probably good reasons for this...
 >
 > Anyway, Paul, can you please try this patch?
 >
 > Thx,
 >
 > -RVP
 >
 > ---START patch---
 > diff -urN a/src/sys/arch/i386/stand/boot/boot2.c b/src/sys/arch/i386/stand/boot/boot2.c
 > --- a/src/sys/arch/i386/stand/boot/boot2.c	2022-06-08 21:43:45.000000000 +0000
 > +++ b/src/sys/arch/i386/stand/boot/boot2.c	2025-03-26 06:42:31.883704627 +0000
 > @@ -130,7 +130,6 @@
 >   void	command_quit(char *);
 >   void	command_boot(char *);
 >   void	command_pkboot(char *);
 > -void	command_dev(char *);
 >   void	command_consdev(char *);
 >   void	command_root(char *);
 >   #ifndef SMALL
 > diff -urN a/src/sys/arch/i386/stand/dosboot/main.c b/src/sys/arch/i386/stand/dosboot/main.c
 > --- a/src/sys/arch/i386/stand/dosboot/main.c	2024-09-12 05:58:29.835738814 +0000
 > +++ b/src/sys/arch/i386/stand/dosboot/main.c	2025-03-26 06:42:31.883704627 +0000
 > @@ -65,7 +65,6 @@
 >   void	command_quit(char *);
 >   void	command_boot(char *);
 >   void	command_mode(char *);
 > -void	command_dev(char *);
 >
 >   const struct bootblk_command commands[] = {
 >   	{ "help",	command_help },
 > diff -urN a/src/sys/arch/i386/stand/lib/bootmenu.c b/src/sys/arch/i386/stand/lib/bootmenu.c
 > --- a/src/sys/arch/i386/stand/lib/bootmenu.c	2024-11-28 01:49:47.366302337 +0000
 > +++ b/src/sys/arch/i386/stand/lib/bootmenu.c	2025-03-26 07:04:54.920298651 +0000
 > @@ -57,10 +57,14 @@
 >   static void
 >   do_bootcfg_command(const char *cmd, char *arg)
 >   {
 > -	if (strcmp(cmd, BOOTCFG_CMD_LOAD) == 0)
 > -		module_add(arg);
 > -	else if (strcmp(cmd, "fs") == 0)
 > +	if (strcmp(cmd, BOOTCFG_CMD_DEV) == 0)
 > +		command_dev(arg);
 > +	else if (strcmp(cmd, BOOTCFG_CMD_FS) == 0)
 >   		fs_add(arg);
 > +	else if (strcmp(cmd, BOOTCFG_CMD_LOAD) == 0)
 > +		module_add(arg);
 > +	else if (strcmp(cmd, BOOTCFG_CMD_RNDSEED) == 0)
 > +		rnd_add(arg);
 >   	else if (strcmp(cmd, BOOTCFG_CMD_USERCONF) == 0)
 >   		userconf_add(arg);
 >   }
 > diff -urN a/src/sys/arch/i386/stand/lib/libi386.h b/src/sys/arch/i386/stand/lib/libi386.h
 > --- a/src/sys/arch/i386/stand/lib/libi386.h	2024-09-18 04:04:46.535251031 +0000
 > +++ b/src/sys/arch/i386/stand/lib/libi386.h	2025-03-26 06:42:31.883704627 +0000
 > @@ -150,6 +150,9 @@
 >   void userconf_add(char *);
 >   void module_add_split(const char *, uint8_t);
 >
 > +/* Note: implementations differ in boot2, dosboot & efiboot */
 > +void command_dev(char *);
 > +
 >   struct btinfo_framebuffer;
 >   void framebuffer_configure(struct btinfo_framebuffer *);
 >
 > diff -urN a/src/sys/lib/libsa/bootcfg.c b/src/sys/lib/libsa/bootcfg.c
 > --- a/src/sys/lib/libsa/bootcfg.c	2022-01-05 16:01:54.000000000 +0000
 > +++ b/src/sys/lib/libsa/bootcfg.c	2025-03-26 07:03:58.367307984 +0000
 > @@ -227,8 +227,6 @@
 >   			bootcfg_info.consdev = value;
 >   		} else if (!strncmp(key, "root", 4)) {
 >   			bootcfg_info.root = value;
 > -		} else if (!strncmp(key, BOOTCFG_CMD_LOAD, 4)) {
 > -			command(BOOTCFG_CMD_LOAD, value);
 >   		} else if (!strncmp(key, "format", 6)) {
 >   			printf("value:%c\n", *value);
 >   			switch (*value) {
 > @@ -251,8 +249,6 @@
 >   			}
 >   		} else if (!strncmp(key, "clear", 5)) {
 >   			bootcfg_info.clear = !!atoi(value);
 > -		} else if (!strncmp(key, BOOTCFG_CMD_USERCONF, 8)) {
 > -			command(BOOTCFG_CMD_USERCONF, value);
 >   		} else {
 >   			command(key, value);
 >   		}
 > diff -urN a/src/sys/lib/libsa/bootcfg.h b/src/sys/lib/libsa/bootcfg.h
 > --- a/src/sys/lib/libsa/bootcfg.h	2021-09-07 11:41:31.000000000 +0000
 > +++ b/src/sys/lib/libsa/bootcfg.h	2025-03-26 07:12:00.103744727 +0000
 > @@ -29,12 +29,15 @@
 >   #ifndef _BOOTCFG_H
 >   #define _BOOTCFG_H
 >
 > -#define BOOTCFG_FILENAME "boot.cfg"
 > -#define BOOTCFG_MAXMENU	 20
 > -#define BOOTCFG_MAXBANNER 12
 > +#define BOOTCFG_FILENAME	"boot.cfg"
 > +#define BOOTCFG_MAXMENU		20
 > +#define BOOTCFG_MAXBANNER	12
 >
 > -#define BOOTCFG_CMD_LOAD	  "load"
 > -#define BOOTCFG_CMD_USERCONF	  "userconf"
 > +#define BOOTCFG_CMD_DEV		"dev"
 > +#define BOOTCFG_CMD_FS		"fs"
 > +#define BOOTCFG_CMD_LOAD	"load"
 > +#define BOOTCFG_CMD_RNDSEED	"rndseed"
 > +#define BOOTCFG_CMD_USERCONF	"userconf"
 >
 >   typedef void (*bootcfg_command)(const char *cmd, char *arg);
 >
 > ---END patch---
 >
 >
 > !DSPAM:67e3b09e68781226255623!
 >
 >
 
 +---------------------+--------------------------+----------------------+
 | Paul Goyette (.sig) | PGP Key fingerprint:     | E-mail addresses:    |
 | (Retired)           | 1B11 1849 721C 56C8 F63A | paul%whooppee.com@localhost    |
 | Software Developer  | 6E2E 05FD 15CE 9F2D 5102 | pgoyette%netbsd.org@localhost  |
 | & Network Engineer  |                          | pgoyette99%gmail.com@localhost |
 +---------------------+--------------------------+----------------------+
 


Home | Main Index | Thread Index | Old Index