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

Mark Kettenis mark.kettenis at xs4all.nl
Fri Oct 29 18:37:51 CEST 2021


> 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.

Cheers,

Mark


More information about the U-Boot mailing list