[PATCH v2 31/41] bootstd: Add an implementation of EFI boot

Ilias Apalodimas ilias.apalodimas at linaro.org
Fri Oct 29 19:08:58 CEST 2021


Hi Mark,

On Fri, 29 Oct 2021 at 19:37, Mark Kettenis <mark.kettenis at xs4all.nl> wrote:
>
> > From: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> > Date: Fri, 29 Oct 2021 16:42:45 +0300
> >
> > Hi Tom,
> >
> > On Fri, 29 Oct 2021 at 15:39, Tom Rini <trini at konsulko.com> wrote:
> > >
> > > On Fri, Oct 29, 2021 at 08:45:06AM +0300, Ilias Apalodimas wrote:
> > > > On Wed, Oct 27, 2021 at 12:34:40PM -0600, Simon Glass wrote:
> > > > > Hi Ilias,
> > > > >
> > > > > On Wed, 27 Oct 2021 at 08:48, Ilias Apalodimas
> > > > > <ilias.apalodimas at linaro.org> wrote:
> > > > > >
> > > > > > Hi Simon,
> > > > > >
> > > > > > On Wed, Oct 27, 2021 at 08:09:04AM -0600, Simon Glass wrote:
> > > > > > > Hi Ilias,
> > > > > > >
> > > > > > > On Wed, 27 Oct 2021 at 02:36, Ilias Apalodimas
> > > > > > > <ilias.apalodimas at linaro.org> wrote:
> > > > > > > >
> > > > > > > > Hi Simon,
> > > > > > > >
> > > > > > > > On Sun, 24 Oct 2021 at 02:27, Simon Glass <sjg at chromium.org> wrote:
> > > > > > > > >
> > > > > > > > > Add a bootmeth driver which handles EFI boot, using EFI_LOADER.
> > > > > > > > >
> > > > > > > > > In effect, this provides the same functionality as the 'bootefi' command
> > > > > > > > > and shares the same code. But the interface into it is via a bootmeth,
> > > > > > > > > so it does not require any special scripts, etc.
> > > > > > > > >
> > > > > > > > > For now this requires the 'bootefi' command be enabled. Future work may
> > > > > > > > > tidy this up so that it can be used without CONFIG_CMDLINE being enabled.
> > > > > > > >
> > > > > > > > I'll leave this up to Heinrich, but personally I wouldn't include this
> > > > > > > > patch at all. EFI has it's bootmgr which can handle booting just fine.
> > > > > > > > I don't see why we should duplicate the functionality.  The new boot
> > > > > > > > method can just have an entry called 'EFI' and then let the existing
> > > > > > > > EFI code to decide.
> > > > > > >
> > > > > > > This is needed so that EFI boot is actually invoked. If bootmgr starts
> > > > > > > being used then it can still be invoked from standard boot. The point
> > > > > > > is that there is a standard way of booting that supports EFI and other
> > > > > > > things.
> > > > > >
> > > > > > This patch tries to reason about the default naming EFI imposes on it's
> > > > > > boot files. distro_efi_read_bootflow() will try to find files following the
> > > > > > EFI naming convention (e.g bootaarch64.efi, bootarm.efi etc).  If those are
> > > > > > found it will try to boot them right?  That's not the right thing to do though.
> > > > > > On the EFI spec these files are tried if no Boot#### variables are found.
> > > > > > So we can get rid of this entirely,  add a dummy entry on the bootflow that
> > > > > > says 'boot the efi manager' (which is what the next patch does).
> > > > > >
> > > > > > The efibootmgr then will check Boot#### variables and if none are found,
> > > > > > it's going to fallback into loading bootaarch64.efi, bootarm.efi etc
> > > > > > essentially offering identical functionality.
> > > > >
> > > > > Yes that's fine, and when EFI's boot manager is in use I have a driver
> > > > > for that too, as you can see in the other patch. We may need to adjust
> > > > > the order, by the sound of it, if it needs to run before EFI things.
> > > > > But that is easy enough.
> > > >
> > > > That's the point though.  I don't want to have 2 different ways of booting EFI
> > > > as I don't see any benefit.  Do you?
> > >
> > > Unless we're saying that "bootefi bootmgr" is ready to be used always
> > > and without further pre-req support (which I don't think is quite the
> > > case, since we don't have persistent EFI vars, so can't set Boot###
> > > persistently or via userspace) _something_ is likely needed to either
> > > set those, or scan a configurable list of where, to find the EFI
> > > payload.
> >
> > The efibootmgr will try to boot bootaa64.efi, bootarm.efi etc if
> > Boot### variables are not found.  The Boot#### themselves are
> > obviously configurable from U-Boot(at boot time).  Since this method
> > doesn't allow Linux to edit the boot options either, is it something
> > we need?  Since distros usually name their SHIM as bootaa64.efi, I am
> > afraid we are adding code that we will rarely (if at all) ever use.
>
> Hi Ilias,
>
> I'm still seeing:
>
>   Device 0: Vendor: Lexar    Rev: 1100 Prod: USB Flash Drive
>               Type: Removable Hard Disk
>               Capacity: 30526.0 MB = 29.8 GB (62517248 x 512)
>   ... is now current device
>   Scanning usb 0:1...
>   ** Unable to read file / **
>   Failed to load '/'
>   libfdt fdt_check_header(): FDT_ERR_BADMAGIC
>   BootOrder not defined
>   EFI boot manager: Cannot load any image
>   Found EFI removable media binary efi/boot/bootaa64.efi
>   170694 bytes read in 9 ms (18.1 MiB/s)
>   libfdt fdt_check_header(): FDT_ERR_BADMAGIC
>   Booting /efi\boot\bootaa64.efi
>
> So it doesn't seem that efibootmgr will try to bootaa64.efi just yet.

Yea Akashi-san already corrected me on this one.  I was somehow under
the impression we do that already, while it's the distro bootcmd doing
that.  In any case it would make much more sense for me to add the
missing pieces in the efibootmgr, instead of an extra app.  That way
we can either cleanup the distro bootmcd or skip this patch when
Simon's proposal gets resubmitted.

Thanks!
/Ilias
>
> Cheers,
>
> Mark


More information about the U-Boot mailing list