sys/boot/boot0/boot0.S - r186598

Daniel Braniss danny at cs.huji.ac.il
Sun Jan 9 11:20:16 UTC 2011


> This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
> --------------enig51B4786EC9D39188BAE04052
> Content-Type: multipart/mixed; boundary="------------070003060308030201090207"
> 
> This is a multi-part message in MIME format.
> --------------070003060308030201090207
> Content-Type: text/plain; charset=ISO-8859-1
> Content-Transfer-Encoding: quoted-printable
> 
> Hi,
> 
> Today I ran into an issue where setting the default slice with boot0cfg
> -s is broken.
> 
> This is related to a section of this revision:
> 
> + commit Warner's patch "orb $NOUPDATE,_FLAGS(%bp)"
>   to avoid writing to disk in case of a timeout/default choice;
> 
> This issue is quite well documented in bin/134907 which has been open
> since May 2009.
> 
> Reproduced with a fresh nanobsd build:
> 
> Boot 1 - Slice 1 active as set by nanobsd image builder:
> 
> =3D=3D=3D
> # boot0cfg -v ad0
> #   flag     start chs   type       end chs       offset         size
> 1   0x80      0:  1: 1   0xa5    494: 15:63           63       498897
> 2   0x00    495:  1: 1   0xa5    989: 15:63       499023       498897
> 3   0x00    990:  0: 1   0xa5    992: 15:63       997920         3024
> 
> version=3D2.0  drive=3D0x80  mask=3D0x3  ticks=3D182  bell=3D# (0x23)
> options=3Dpacket,update,nosetdrv
> volume serial ID 9090-9090
> default_selection=3DF1 (Slice 1)
> =3D=3D=3D
> 
> Update the active slice to 2:
> =3D=3D=3D
> # boot0cfg -s 2 -v ad0
> #   flag     start chs   type       end chs       offset         size
> 1   0x80      0:  1: 1   0xa5    494: 15:63           63       498897
> 2   0x00    495:  1: 1   0xa5    989: 15:63       499023       498897
> 3   0x00    990:  0: 1   0xa5    992: 15:63       997920         3024
> 
> version=3D2.0  drive=3D0x80  mask=3D0x3  ticks=3D182  bell=3D# (0x23)
> options=3Dpacket,update,nosetdrv
> volume serial ID 9090-9090
> default_selection=3DF2 (Slice 2)
> =3D=3D=3D
> 
> Reboot and let boot0 time out and boot default slice 2:
> =3D=3D=3D
> # boot0cfg -v ad0
> #   flag     start chs   type       end chs       offset         size
> 1   0x80      0:  1: 1   0xa5    494: 15:63           63       498897
> 2   0x00    495:  1: 1   0xa5    989: 15:63       499023       498897
> 3   0x00    990:  0: 1   0xa5    992: 15:63       997920         3024
> 
> version=3D2.0  drive=3D0x80  mask=3D0x3  ticks=3D182  bell=3D# (0x23)
> options=3Dpacket,update,nosetdrv
> volume serial ID 9090-9090
> default_selection=3DF2 (Slice 2)
> =3D=3D=3D
> The system actually booted into slice 1 here.
> This was verified by dropping to the loader prompt and using show to grab=
> :
> loaddev=3Ddisk0s1a:
> 
> Reboot and hit 2 at the boot0 prompt:
> =3D=3D=3D
> # boot0cfg -v ad0
> #   flag     start chs   type       end chs       offset         size
> 1   0x00      0:  1: 1   0xa5    494: 15:63           63       498897
> 2   0x80    495:  1: 1   0xa5    989: 15:63       499023       498897
> 3   0x00    990:  0: 1   0xa5    992: 15:63       997920         3024
> 
> version=3D2.0  drive=3D0x80  mask=3D0x3  ticks=3D182  bell=3D# (0x23)
> options=3Dpacket,update,nosetdrv
> volume serial ID 9090-9090
> default_selection=3DF2 (Slice 2)
> =3D=3D=3D
> 
> This time we really boot into slice 2.
> 
> The attached patch backs out the relevant part of r186598.
> 
> There was a post on the embedded list that suggested this work around:
>     echo 'a 2' | fdisk -f /dev/stdin ad0
>     boot0cfg -s 2 ad0
> 
> There are 2 issues with this:
> 1) It can't be done without setting kern.geom.debugflags to 0x10.
> 2) It resulted in most/all commands resulting in the error message
> "Device not configured" including the second command and 'shutdown -r now=
> '.
> 
> Both of which leave this really work around fairly broken.

the problem is that boot0cfg -s does NOT update the boot block, it fails!
the work around is:
	boot0cfg -s -t n dev
then
	gpart set -a active -i n dev

danny




More information about the freebsd-hackers mailing list