Re: Idea for change to boot0

From: John Baldwin <jhb_at_freebsd.org>
Date: Fri, 16 Dec 2011 08:57:16 -0500
On Thursday, December 15, 2011 4:21:51 pm Andrew Boyer wrote:
> These two changes allow you to set PXE as the default MBR boot selection, 
which enables you to write a 'reboot to the network' script.  We've found it 
to be very useful.  What do people think?

I think these are good.  One suggestion might be to let the you do
'boot0cfg -s pxe' (or PXE, just use strcasecmp) so it is more explicit
and less of a magic number.  I.e. something like:

	case 's':
		if (strcasecmp(optarg, "pxe") == 0)
			s_arg = 6;
		else
			s_arg = argtoi(optarg, 1, 6, 's');
		break;

I think that is less confusing as some folks might thing '-s 6' means
booting from /dev/fooXs6 (which it doesn't).

Also, the manpage for boot0cfg will need to be updated.  Other than that I 
think this looks great.  I have a slightly updated version below (I also
wanted to keep the output of the default setting in "order" so the logic
is slightly different):

Index: sys/boot/i386/boot0/boot0.S
===================================================================
--- sys/boot/i386/boot0/boot0.S (revision 228534)
+++ sys/boot/i386/boot0/boot0.S (working copy)
_at__at_ -413,6 +413,7 _at__at_
        3:
 #endif /* ONLY_F_KEYS */
 #endif /* SIO */
+check_selection:
                cmpb $0x5,%al                   # F1..F6 or 1..6 ?
 #ifdef PXE /* enable PXE/INT18 using F6 */
                jne 1f;
_at__at_ -421,7 +422,6 _at__at_
 #endif /* PXE */
                jae beep                        # Not in F1..F5, beep
 
-check_selection:
        /*
         * We have a selection.  If it's a bad selection go back to complain.
         * The bits in MNUOPT were set when the options were printed.
Index: usr.sbin/boot0cfg/boot0cfg.c
===================================================================
--- usr.sbin/boot0cfg/boot0cfg.c        (revision 228534)
+++ usr.sbin/boot0cfg/boot0cfg.c        (working copy)
_at__at_ -169,7 +169,10 _at__at_
             o_flag = 1;
             break;
         case 's':
-            s_arg = argtoi(optarg, 1, 5, 's');
+           if (strcasecmp(optarg, "pxe") == 0)
+               s_arg = 6;
+           else
+               s_arg = argtoi(optarg, 1, 5, 's');
             break;
         case 't':
             t_arg = argtoi(optarg, 1, 0xffff, 't');
_at__at_ -472,8 +475,10 _at__at_
     printf("default_selection=F%d (", mbr[OFF_OPT] + 1);
     if (mbr[OFF_OPT] < 4)
        printf("Slice %d", mbr[OFF_OPT] + 1);
+    else if (mbr[OFF_OPT] == 4)
+       printf("Drive 1");
     else
-       printf("Drive 1");
+       printf("PXE");
     printf(")\n");
 }
 
Index: usr.sbin/boot0cfg/boot0cfg.8
===================================================================
--- usr.sbin/boot0cfg/boot0cfg.8        (revision 228534)
+++ usr.sbin/boot0cfg/boot0cfg.8        (working copy)
_at__at_ -146,6 +146,9 _at__at_
 .Ar slice .
 Values between 1 and 4 refer to slices; a value of 5 refers to the
 option of booting from a second disk.
+The special string
+.Dq PXE
+or a value of 6 can be used to boot via PXE.
 .It Fl t Ar ticks
 Set the timeout value to
 .Ar ticks .


-- 
John Baldwin
Received on Fri Dec 16 2011 - 12:57:19 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:22 UTC