Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Dec 2023 16:15:42 +0200
From:      Toomas Soome <tsoome@me.com>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        Mark Millard <marklmi@yahoo.com>, Tomoaki AOKI <junchoon@dec.sakura.ne.jp>, Current FreeBSD <freebsd-current@freebsd.org>
Subject:   Re: symlink to /boot/loader.efi
Message-ID:  <6276D9E8-D1D6-4ED5-96FB-BBF2875E079E@me.com>
In-Reply-To: <ZYWYMRNWKYhCslVc@kib.kiev.ua>
References:  <AF65AD57-5D93-4FC2-84E8-58E1D7C0C3BC.ref@yahoo.com> <AF65AD57-5D93-4FC2-84E8-58E1D7C0C3BC@yahoo.com> <94C108FE-3D2F-4116-B071-810F64DECEC4@me.com> <ZYWYMRNWKYhCslVc@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_5A2DCD88-A445-469A-B59B-FB51C305F959
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8



> On 22. Dec 2023, at 16:07, Konstantin Belousov <kostikbel@gmail.com> =
wrote:
>=20
> On Fri, Dec 22, 2023 at 11:36:24AM +0200, Toomas Soome wrote:
>>=20
>>=20
>>> On 22. Dec 2023, at 11:09, Mark Millard <marklmi@yahoo.com> wrote:
>>>=20
>>> Tomoaki AOKI <junchoon_at_dec.sakura.ne.jp> wrote on
>>> Date: Thu, 21 Dec 2023 23:21:00 UTC :
>>>=20
>>>> On Thu, 21 Dec 2023 14:22:14 +0100
>>>> Dimitry Andric <dim@FreeBSD.org> wrote:
>>>>=20
>>>>> Yeah, my procedure is the same as yours: I first copy =
/boot/efi/efi/freebsd/loader.efi to /boot/efi/efi/freebsd/loader.old, =
then copy the freshly built and installed /boot/loader.efi to =
/boot/efi/efi/freebsd/loader.efi. I don't see a technical reason why =
this could not be just another step in the installworld procedure.
>>>>>=20
>>>>> That said, I am unsure if the pathname /boot/efi/efi is always the =
same, at least for all UEFI systems. It is the default layout when you =
do a regular install with recent installer onto a UEFI system, but some =
users may use completely different mount points. So you should still =
have some way of configuring the default location for loader =
installation.
>>>>>=20
>>>>> Also, on default installations a fallback entry named =
/boot/efi/efi/boot/bootx64.efi is made, essentially another copy of =
loader.efi but with a different name. Namely, the default name that UEFI =
(on x86_64 at least) searches for, if it doesn't know anything else. =
I.e. if it isn't configured via efibootmgr(8), or the EFI variables have =
been junked for some reason. It might make sense to also update that =
file.
>>>>>=20
>>>>> -Dimitry
>>>>=20
>>>> Just an idea.
>>>>=20
>>>> It would be nice if loader.efi (hopefully, boot1.efi,too) could =
pass
>>>> "where am I placed?" info, maybe via kenv.
>>>>=20
>>>> Would need boot1.efi to pass something (ideally, "where am I booted
>>>> from?", but "boot1_used=3D1" is sufficient).
>>>>=20
>>>> To do so, loader.efi can confirm whether it was loaded via =
boot1.efi or
>>>> directly from UEFI firmware. If nothing is passed to it, it can =
probe
>>>> "where it is?" using UEFI call and set it, otherwise, it should
>>>> be /boot/loader.efi, so nothing is needed to do.
>>>=20
>>> To my knowledge aarch64 and armv7 never use the copy in
>>> /boot/loader.efi during a boot. It has to have been copied
>>> into the appropriate msdosfs such that it has an
>>> appropriate path and name there. That is what is found
>>> and used during the boot.
>>=20
>>=20
>> All UEFI systems start from ESP (EFI System Partition). The only good =
reason to install boot1.efi there is when you have very small ESP and =
need to save that space - and in that case the boot1.esp will search and =
execute /boot/loader.efi.
>>=20
> No, this is not the only good reason, or even the least important =
reason.
>=20
> boot1.efi is extremely convenient for the normal (*) configuration =
where
> machine is dedicated for a single FreeBSD system.  It finds and =
chain-load
> real loader.efi from the first UFS GPT partition which I always assign =
to
> the root.  This means that I do not need to care about updating =
loader.efi
> at all, it is done during normal installworld.
>=20
> * at least for me
>=20
> I use this setup for >5 years on all my disk-booting machines.

Yes, that one is also [good] reason, however, I personally do consider =
it missing feature of bectl/beadm activate;)

rgds,
toomas


>=20
>> The problem about boot1.efi (or any other UEFI chainload) is that =
loading file and executing it will not replace current program in =
memory, but will add new one, this may be problem with systems with =
minimal memory configurations. And yes, boot1.efi is not really platform =
specific - it is just another EFI application - one can build and use it =
on arm (or any other) systems and then it will load and start =
/boot/loader.efi.
>>=20
>> starting loader directly from ESP has few advantages =E2=80=94 you =
wont waste memory for boot1.efi, you save a bit of boot time, you can =
use auxiliary files from ESP to pass some information to loader.efi (for =
example to tell where your rootfs is in case of multiboot setups).
>>=20
>> the boot1.efi could be a bit more appealing if it would be able to =
load and start kernel directly, allowing to build very memory limited =
setups, but then again, it does sound like very specific corner case.
>>=20
>> rgds,
>> toomas
>>=20
>>=20
>>>=20
>>>> If no related kenv is set and freebsd-boot partition exists, it =
should
>>>> be booted with legacy (BIOS) boot.
>>>=20
>>> If there even is a "legacy (BIOS) boot" is a platform
>>> specific issue as far as I know.
>>>=20
>>>> The easiest to be set by loader.efi and/or boot1.efi would be raw =
UEFI
>>>> device path. So would need analyzing where actually is on booted
>>>> FreeBBSD environment.
>>>=20
>>> See the earlier point about aarch64 and armv7 not using
>>> /boot/* files while loading the FreeBSD loader: the
>>> FreeBSD loader variant used is the first stage able to
>>> look inside UFS or ZFS file systems. Loading and
>>> starting the FreeBSD loader happens before that stage
>>> in those types of contexts.
>>>=20
>>>> . . .
>>>=20
>>> Also, to my knowledge, powerpc (32-bit), powerpc64, and
>>> powerpc64le do not involve any variant of loader.efi or
>>> UEFI/ACPI or UEFI/DeviceTriee in their boot sequnces.
>>> Again: more platform specific rather than generic.
>>>=20
>>> =3D=3D=3D
>>> Mark Millard
>>> marklmi at yahoo.com


--Apple-Mail=_5A2DCD88-A445-469A-B59B-FB51C305F959
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"content-type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"overflow-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;"><br =
id=3D"lineBreakAtBeginningOfMessage"><div><br><blockquote =
type=3D"cite"><div>On 22. Dec 2023, at 16:07, Konstantin Belousov =
&lt;kostikbel@gmail.com&gt; wrote:</div><br =
class=3D"Apple-interchange-newline"><div><meta charset=3D"UTF-8"><span =
style=3D"caret-color: rgb(0, 0, 0); font-family: Hack-Regular; =
font-size: 12px; font-style: normal; font-variant-caps: normal; =
font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none; float: none; display: inline !important;">On Fri, Dec 22, 2023 at =
11:36:24AM +0200, Toomas Soome wrote:</span><br style=3D"caret-color: =
rgb(0, 0, 0); font-family: Hack-Regular; font-size: 12px; font-style: =
normal; font-variant-caps: normal; font-weight: 400; letter-spacing: =
normal; text-align: start; text-indent: 0px; text-transform: none; =
white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;"><blockquote type=3D"cite" style=3D"font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; orphans: auto; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;"><br><br><blockquote type=3D"cite">On 22. Dec =
2023, at 11:09, Mark Millard &lt;marklmi@yahoo.com&gt; =
wrote:<br><br>Tomoaki AOKI &lt;junchoon_at_dec.sakura.ne.jp&gt; wrote =
on<br>Date: Thu, 21 Dec 2023 23:21:00 UTC :<br><br><blockquote =
type=3D"cite">On Thu, 21 Dec 2023 14:22:14 +0100<br>Dimitry Andric =
&lt;dim@FreeBSD.org&gt; wrote:<br><br><blockquote type=3D"cite">Yeah, my =
procedure is the same as yours: I first copy =
/boot/efi/efi/freebsd/loader.efi to /boot/efi/efi/freebsd/loader.old, =
then copy the freshly built and installed /boot/loader.efi to =
/boot/efi/efi/freebsd/loader.efi. I don't see a technical reason why =
this could not be just another step in the installworld =
procedure.<br><br>That said, I am unsure if the pathname /boot/efi/efi =
is always the same, at least for all UEFI systems. It is the default =
layout when you do a regular install with recent installer onto a UEFI =
system, but some users may use completely different mount points. So you =
should still have some way of configuring the default location for =
loader installation.<br><br>Also, on default installations a fallback =
entry named /boot/efi/efi/boot/bootx64.efi is made, essentially another =
copy of loader.efi but with a different name. Namely, the default name =
that UEFI (on x86_64 at least) searches for, if it doesn't know anything =
else. I.e. if it isn't configured via efibootmgr(8), or the EFI =
variables have been junked for some reason. It might make sense to also =
update that file.<br><br>-Dimitry<br></blockquote><br>Just an =
idea.<br><br>It would be nice if loader.efi (hopefully, boot1.efi,too) =
could pass<br>"where am I placed?" info, maybe via kenv.<br><br>Would =
need boot1.efi to pass something (ideally, "where am I booted<br>from?", =
but "boot1_used=3D1" is sufficient).<br><br>To do so, loader.efi can =
confirm whether it was loaded via boot1.efi or<br>directly from UEFI =
firmware. If nothing is passed to it, it can probe<br>"where it is?" =
using UEFI call and set it, otherwise, it should<br>be /boot/loader.efi, =
so nothing is needed to do.<br></blockquote><br>To my knowledge aarch64 =
and armv7 never use the copy in<br>/boot/loader.efi during a boot. It =
has to have been copied<br>into the appropriate msdosfs such that it has =
an<br>appropriate path and name there. That is what is found<br>and used =
during the boot.<br></blockquote><br><br>All UEFI systems start from ESP =
(EFI System Partition). The only good reason to install boot1.efi there =
is when you have very small ESP and need to save that space - and in =
that case the boot1.esp will search and execute =
/boot/loader.efi.<br><br></blockquote><span style=3D"caret-color: rgb(0, =
0, 0); font-family: Hack-Regular; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none; float: none; display: inline !important;">No, =
this is not the only good reason, or even the least important =
reason.</span><br style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><br style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><span style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none; float: none; display: inline !important;">boot1.efi is extremely =
convenient for the normal (*) configuration where</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Hack-Regular; =
font-size: 12px; font-style: normal; font-variant-caps: normal; =
font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><span style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none; float: none; display: inline !important;">machine is dedicated for =
a single FreeBSD system. &nbsp;It finds and chain-load</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Hack-Regular; =
font-size: 12px; font-style: normal; font-variant-caps: normal; =
font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><span style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none; float: none; display: inline !important;">real loader.efi from the =
first UFS GPT partition which I always assign to</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Hack-Regular; =
font-size: 12px; font-style: normal; font-variant-caps: normal; =
font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><span style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none; float: none; display: inline !important;">the root. &nbsp;This =
means that I do not need to care about updating loader.efi</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Hack-Regular; =
font-size: 12px; font-style: normal; font-variant-caps: normal; =
font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><span style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none; float: none; display: inline !important;">at all, it is done =
during normal installworld.</span><br style=3D"caret-color: rgb(0, 0, =
0); font-family: Hack-Regular; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;"><br style=3D"caret-color: rgb(0, 0, 0); =
font-family: Hack-Regular; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;"><span style=3D"caret-color: rgb(0, 0, 0); =
font-family: Hack-Regular; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none; float: none; display: inline !important;">* at =
least for me</span><br style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><br style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><span style=3D"caret-color: rgb(0, 0, 0); font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none; float: none; display: inline !important;">I use this setup for =
&gt;5 years on all my disk-booting machines.</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Hack-Regular; =
font-size: 12px; font-style: normal; font-variant-caps: normal; =
font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"></div></blockquote><div><br></div><div>Yes, that one is also =
[good] reason, however, I personally do consider it missing feature of =
bectl/beadm =
activate;)</div><div><br></div><div>rgds,</div><div>toomas</div><div><br><=
/div><br><blockquote type=3D"cite"><div><br style=3D"caret-color: rgb(0, =
0, 0); font-family: Hack-Regular; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;"><blockquote type=3D"cite" style=3D"font-family: =
Hack-Regular; font-size: 12px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; orphans: auto; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;">The problem about boot1.efi (or any other UEFI =
chainload) is that loading file and executing it will not replace =
current program in memory, but will add new one, this may be problem =
with systems with minimal memory configurations. And yes, boot1.efi is =
not really platform specific - it is just another EFI application - one =
can build and use it on arm (or any other) systems and then it will load =
and start /boot/loader.efi.<br><br>starting loader directly from ESP has =
few advantages =E2=80=94 you wont waste memory for boot1.efi, you save a =
bit of boot time, you can use auxiliary files from ESP to pass some =
information to loader.efi (for example to tell where your rootfs is in =
case of multiboot setups).<br><br>the boot1.efi could be a bit more =
appealing if it would be able to load and start kernel directly, =
allowing to build very memory limited setups, but then again, it does =
sound like very specific corner =
case.<br><br>rgds,<br>toomas<br><br><br><blockquote =
type=3D"cite"><br><blockquote type=3D"cite">If no related kenv is set =
and freebsd-boot partition exists, it should<br>be booted with legacy =
(BIOS) boot.<br></blockquote><br>If there even is a "legacy (BIOS) boot" =
is a platform<br>specific issue as far as I know.<br><br><blockquote =
type=3D"cite">The easiest to be set by loader.efi and/or boot1.efi would =
be raw UEFI<br>device path. So would need analyzing where actually is on =
booted<br>FreeBBSD environment.<br></blockquote><br>See the earlier =
point about aarch64 and armv7 not using<br>/boot/* files while loading =
the FreeBSD loader: the<br>FreeBSD loader variant used is the first =
stage able to<br>look inside UFS or ZFS file systems. Loading =
and<br>starting the FreeBSD loader happens before that stage<br>in those =
types of contexts.<br><br><blockquote type=3D"cite">. . =
.<br></blockquote><br>Also, to my knowledge, powerpc (32-bit), =
powerpc64, and<br>powerpc64le do not involve any variant of loader.efi =
or<br>UEFI/ACPI or UEFI/DeviceTriee in their boot sequnces.<br>Again: =
more platform specific rather than generic.<br><br>=3D=3D=3D<br>Mark =
Millard<br>marklmi at =
yahoo.com</blockquote></blockquote></div></blockquote></div><br></body></h=
tml>=

--Apple-Mail=_5A2DCD88-A445-469A-B59B-FB51C305F959--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6276D9E8-D1D6-4ED5-96FB-BBF2875E079E>