On Tue, Feb 02, 2016 at 03:45:12AM +0100, Alexander Graf wrote: > UEFI defines a simple boot protocol for removable media. There we should look > at the EFI (first GPT FAT) partition and search for /efi/boot/bootXXX.efi with > XXX being different between different platforms (x86, x64, arm, aa64, ...).
One comment, one question. Comment: It's not really "the first GPT FAT" - it's the partition marked with the EFI System Partition type (containing a FAT filesystem). This is actually defined for MBR partition tables too, but I'd be quite happy for that bit of legacy to be left out. Question: Does U-Boot support El Torito for iso images? > > This patch implements a simple version of that protocol for the default distro > boot script. With this we can automatically boot from valid UEFI enabled > removable media. > > Because from all I could see U-Boot by default doesn't deliver device tree > blobs with its firmware, we also need to load the dtb from somewhere. Traverse > the same EFI partition for an fdt file that fits our current board so that > an OS receives a valid device tree when booted automatically. > > Signed-off-by: Alexander Graf <ag...@suse.de> > Reviewed-by: Simon Glass <s...@chromium.org> > --- > include/config_distro_bootcmd.h | 47 > ++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 46 insertions(+), 1 deletion(-) > > diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h > index 37c6b43..c19f1b0 100644 > --- a/include/config_distro_bootcmd.h > +++ b/include/config_distro_bootcmd.h > @@ -90,6 +90,48 @@ > BOOT_TARGET_DEVICES_references_UBIFS_without_CONFIG_CMD_UBIFS > #endif > > +#ifdef CONFIG_EFI_LOADER > +#if defined(CONFIG_ARM64) > +#define BOOTEFI_NAME "bootaa64.efi" > +#elif defined(CONFIG_ARM) > +#define BOOTEFI_NAME "bootarm.efi" > +#endif > +#endif > + > +#ifdef BOOTEFI_NAME > +#define BOOTENV_SHARED_EFI \ > + "boot_efi_binary=" \ > + "load ${devtype} ${devnum}:${distro_bootpart} " \ > + "${kernel_addr_r} efi/boot/"BOOTEFI_NAME"; " \ > + "bootefi ${kernel_addr_r}\0" \ > + \ > + "load_efi_dtb=" \ > + "load ${devtype} ${devnum}:${distro_bootpart} " \ > + "${fdt_addr_r} ${prefix}${fdt_name}; " \ > + "fdt addr ${fdt_addr_r}\0" \ > + \ > + "efi_dtb_prefixes=/ /dtb/ /dtb/current/\0" \ > + "scan_dev_for_efi=" \ > + "for prefix in ${efi_dtb_prefixes}; do " \ > + "if test -e ${devtype} " \ > + "${devnum}:${distro_bootpart} " \ > + "${prefix}${fdt_name}; then " \ > + "run load_efi_dtb; " \ > + "fi;" \ > + "done;" \ > + "if test -e ${devtype} ${devnum}:${distro_bootpart} " \ > + "efi/boot/"BOOTEFI_NAME"; then " \ > + "echo Found EFI removable media binary " \ > + "efi/boot/"BOOTEFI_NAME"; " \ > + "run boot_efi_binary; " \ > + "echo EFI LOAD FAILED: continuing...; " \ > + "fi; " > +#define SCAN_DEV_FOR_EFI "run scan_dev_for_efi;" > +#else > +#define BOOTENV_SHARED_EFI > +#define SCAN_DEV_FOR_EFI > +#endif > + > #ifdef CONFIG_CMD_SATA > #define BOOTENV_SHARED_SATA BOOTENV_SHARED_BLKDEV(sata) > #define BOOTENV_DEV_SATA BOOTENV_DEV_BLKDEV > @@ -217,6 +259,7 @@ > BOOTENV_SHARED_SCSI \ > BOOTENV_SHARED_IDE \ > BOOTENV_SHARED_UBIFS \ > + BOOTENV_SHARED_EFI \ > "boot_prefixes=/ /boot/\0" \ > "boot_scripts=boot.scr.uimg boot.scr\0" \ > "boot_script_dhcp=boot.scr.uimg\0" \ > @@ -258,7 +301,9 @@ > "for prefix in ${boot_prefixes}; do " \ > "run scan_dev_for_extlinux; " \ > "run scan_dev_for_scripts; " \ > - "done\0" \ > + "done;" \ > + SCAN_DEV_FOR_EFI \ > + "\0" \ > \ > "scan_dev_for_boot_part=" \ > "part list ${devtype} ${devnum} -bootable devplist; " \ > -- > 2.6.2 > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot