bootstd regression from distro_bootcmd for removable EFI boot and weird return codes for fs

Simon Glass sjg at chromium.org
Fri Jul 28 03:52:07 CEST 2023


Hi Da,

On Mon, 24 Jul 2023 at 10:49, Da Xue <da at libre.computer> wrote:
>
> On Mon, Jul 24, 2023 at 11:48 AM Da Xue <da at lessconfused.com> wrote:
> >
> > I forgot to attach some additional details:
> >
> > ```
> > sudo fdisk -l /dev/sda
> > Disk /dev/sda: 58.24 GiB, 62534975488 bytes, 122138624 sectors
> > Disk model: STORAGE DEVICE
> > Units: sectors of 1 * 512 = 512 bytes
> > Sector size (logical/physical): 512 bytes / 512 bytes
> > I/O size (minimum/optimal): 512 bytes / 512 bytes
> > Disklabel type: dos
> > Disk identifier: 0x00000000
> >
> > Device     Boot Start    End Sectors  Size Id Type
> > /dev/sda1  *     2048 524287  522240  255M ef EFI (FAT-12/16/32)
> > ```
> >
> > The image was generated via buildroot using genimage:
> >
> > ```
> > image boot.vfat {
> >         vfat {
> >                 file EFI/BOOT/BOOTAA64.EFI {
> >                         image = "Image"
> >                 }
> >                 extraargs = "-F32" # tried with and without this flag,
> > same issue.
> >         }
> >         size = 255M
> > }
> >
> > image sdcard.img {
> >         hdimage {
> >         }
> >         partition bootloader {
> >                 in-partition-table = false
> >                 offset = 512
> >                 image = "u-boot.bin"
> >         }
> >         partition rootfs {
> >                 partition-type = 0xEF
> >                 bootable = "true"
> >                 image = "boot.vfat"
> >                 offset = 1M
> >         }
> > }
> > ```
> >
> > bootflow -la without the debug messages:
> >
> > ```
> > => bootflow scan -la
> > Scanning for bootflows in all bootdevs
> > Seq  Method       State   Uclass    Part  Name                      Filename
> > ---  -----------  ------  --------  ----  ------------------------
> > ----------------
> > Scanning global bootmeth 'efi_mgr':
> >   0  efi_mgr      base    (none)       0  <NULL>                    <NULL>
> > Scanning bootdev 'mmc at 74000.bootdev':
> >   1  efi          media   mmc          0  mmc at 74000.bootdev.whole   <NULL>
> >   2  extlinux     media   mmc          0  mmc at 74000.bootdev.whole   <NULL>
> >   3  script       media   mmc          0  mmc at 74000.bootdev.whole   <NULL>
> > Scanning bootdev 'mmc at 72000.bootdev':
> >   4  efi          media   mmc          0  mmc at 72000.bootdev.whole   <NULL>
> >   5  extlinux     media   mmc          0  mmc at 72000.bootdev.whole   <NULL>
> >   6  script       media   mmc          0  mmc at 72000.bootdev.whole   <NULL>
> >   7  efi          file    mmc          1  mmc at 72000.bootdev.part_1
> > efi/boot/bootaa64.efi
> >   8  extlinux     fs      mmc          1  mmc at 72000.bootdev.part_1
> > /boot/extlinux/extlinux.conf
> >   9  script       fs      mmc          1  mmc at 72000.bootdev.part_1
> > /boot/boot.scr
> >   a  efi          media   mmc          2  mmc at 72000.bootdev.part_2  <NULL>
> >   b  extlinux     media   mmc          2  mmc at 72000.bootdev.part_2  <NULL>
> >   c  script       media   mmc          2  mmc at 72000.bootdev.part_2  <NULL>
> >   d  efi          media   mmc          3  mmc at 72000.bootdev.part_3  <NULL>
> >   e  extlinux     media   mmc          3  mmc at 72000.bootdev.part_3  <NULL>
> >   f  script       media   mmc          3  mmc at 72000.bootdev.part_3  <NULL>
> >  10  efi          media   mmc          4  mmc at 72000.bootdev.part_4  <NULL>
> >  11  extlinux     media   mmc          4  mmc at 72000.bootdev.part_4  <NULL>
> >  12  script       media   mmc          4  mmc at 72000.bootdev.part_4  <NULL>
> >  13  efi          media   mmc          5  mmc at 72000.bootdev.part_5  <NULL>
> >  14  extlinux     media   mmc          5  mmc at 72000.bootdev.part_5  <NULL>
> >  15  script       media   mmc          5  mmc at 72000.bootdev.part_5  <NULL>
> >  16  efi          media   mmc          6  mmc at 72000.bootdev.part_6  <NULL>
> >  17  extlinux     media   mmc          6  mmc at 72000.bootdev.part_6  <NULL>
> >  18  script       media   mmc          6  mmc at 72000.bootdev.part_6  <NULL>
> >  19  efi          media   mmc          7  mmc at 72000.bootdev.part_7  <NULL>
> >  1a  extlinux     media   mmc          7  mmc at 72000.bootdev.part_7  <NULL>
> >  1b  script       media   mmc          7  mmc at 72000.bootdev.part_7  <NULL>
> >  1c  efi          media   mmc          8  mmc at 72000.bootdev.part_8  <NULL>
> >  1d  extlinux     media   mmc          8  mmc at 72000.bootdev.part_8  <NULL>
> >  1e  script       media   mmc          8  mmc at 72000.bootdev.part_8  <NULL>
> >  1f  efi          media   mmc          9  mmc at 72000.bootdev.part_9  <NULL>
> >  20  extlinux     media   mmc          9  mmc at 72000.bootdev.part_9  <NULL>
> >  21  script       media   mmc          9  mmc at 72000.bootdev.part_9  <NULL>
> >  22  efi          media   mmc          a  mmc at 72000.bootdev.part_a  <NULL>
> >  23  extlinux     media   mmc          a  mmc at 72000.bootdev.part_a  <NULL>
> >  24  script       media   mmc          a  mmc at 72000.bootdev.part_a  <NULL>
> >  25  efi          media   mmc          b  mmc at 72000.bootdev.part_b  <NULL>
> >  26  extlinux     media   mmc          b  mmc at 72000.bootdev.part_b  <NULL>
> >  27  script       media   mmc          b  mmc at 72000.bootdev.part_b  <NULL>
> >  28  efi          media   mmc          c  mmc at 72000.bootdev.part_c  <NULL>
> >  29  extlinux     media   mmc          c  mmc at 72000.bootdev.part_c  <NULL>
> >  2a  script       media   mmc          c  mmc at 72000.bootdev.part_c  <NULL>
> >  2b  efi          media   mmc          d  mmc at 72000.bootdev.part_d  <NULL>
> >  2c  extlinux     media   mmc          d  mmc at 72000.bootdev.part_d  <NULL>
> >  2d  script       media   mmc          d  mmc at 72000.bootdev.part_d  <NULL>
> >  2e  efi          media   mmc          e  mmc at 72000.bootdev.part_e  <NULL>
> >  2f  extlinux     media   mmc          e  mmc at 72000.bootdev.part_e  <NULL>
> >  30  script       media   mmc          e  mmc at 72000.bootdev.part_e  <NULL>
> >  31  efi          media   mmc          f  mmc at 72000.bootdev.part_f  <NULL>
> >  32  extlinux     media   mmc          f  mmc at 72000.bootdev.part_f  <NULL>
> >  33  script       media   mmc          f  mmc at 72000.bootdev.part_f  <NULL>
> >  34  efi          media   mmc         10  mmc at 72000.bootdev.part_10 <NULL>
> >  35  extlinux     media   mmc         10  mmc at 72000.bootdev.part_10 <NULL>
> >  36  script       media   mmc         10  mmc at 72000.bootdev.part_10 <NULL>
> >  37  efi          media   mmc         11  mmc at 72000.bootdev.part_11 <NULL>
> >  38  extlinux     media   mmc         11  mmc at 72000.bootdev.part_11 <NULL>
> >  39  script       media   mmc         11  mmc at 72000.bootdev.part_11 <NULL>
> >  3a  efi          media   mmc         12  mmc at 72000.bootdev.part_12 <NULL>
> >  3b  extlinux     media   mmc         12  mmc at 72000.bootdev.part_12 <NULL>
> >  3c  script       media   mmc         12  mmc at 72000.bootdev.part_12 <NULL>
> >  3d  efi          media   mmc         13  mmc at 72000.bootdev.part_13 <NULL>
> >  3e  extlinux     media   mmc         13  mmc at 72000.bootdev.part_13 <NULL>
> >  3f  script       media   mmc         13  mmc at 72000.bootdev.part_13 <NULL>
> >  40  efi          media   mmc         14  mmc at 72000.bootdev.part_14 <NULL>
> >  41  extlinux     media   mmc         14  mmc at 72000.bootdev.part_14 <NULL>
> >  42  script       media   mmc         14  mmc at 72000.bootdev.part_14 <NULL>
> >  43  efi          media   mmc         15  mmc at 72000.bootdev.part_15 <NULL>
> >  44  extlinux     media   mmc         15  mmc at 72000.bootdev.part_15 <NULL>
> >  45  script       media   mmc         15  mmc at 72000.bootdev.part_15 <NULL>
> >  46  efi          media   mmc         16  mmc at 72000.bootdev.part_16 <NULL>
> >  47  extlinux     media   mmc         16  mmc at 72000.bootdev.part_16 <NULL>
> >  48  script       media   mmc         16  mmc at 72000.bootdev.part_16 <NULL>
> >  49  efi          media   mmc         17  mmc at 72000.bootdev.part_17 <NULL>
> >  4a  extlinux     media   mmc         17  mmc at 72000.bootdev.part_17 <NULL>
> >  4b  script       media   mmc         17  mmc at 72000.bootdev.part_17 <NULL>
> >  4c  efi          media   mmc         18  mmc at 72000.bootdev.part_18 <NULL>
> >  4d  extlinux     media   mmc         18  mmc at 72000.bootdev.part_18 <NULL>
> >  4e  script       media   mmc         18  mmc at 72000.bootdev.part_18 <NULL>
> >  4f  efi          media   mmc         19  mmc at 72000.bootdev.part_19 <NULL>
> >  50  extlinux     media   mmc         19  mmc at 72000.bootdev.part_19 <NULL>
> >  51  script       media   mmc         19  mmc at 72000.bootdev.part_19 <NULL>
> >  52  efi          media   mmc         1a  mmc at 72000.bootdev.part_1a <NULL>
> >  53  extlinux     media   mmc         1a  mmc at 72000.bootdev.part_1a <NULL>
> >  54  script       media   mmc         1a  mmc at 72000.bootdev.part_1a <NULL>
> >  55  efi          media   mmc         1b  mmc at 72000.bootdev.part_1b <NULL>
> >  56  extlinux     media   mmc         1b  mmc at 72000.bootdev.part_1b <NULL>
> >  57  script       media   mmc         1b  mmc at 72000.bootdev.part_1b <NULL>
> >  58  efi          media   mmc         1c  mmc at 72000.bootdev.part_1c <NULL>
> >  59  extlinux     media   mmc         1c  mmc at 72000.bootdev.part_1c <NULL>
> >  5a  script       media   mmc         1c  mmc at 72000.bootdev.part_1c <NULL>
> >  5b  efi          media   mmc         1d  mmc at 72000.bootdev.part_1d <NULL>
> >  5c  extlinux     media   mmc         1d  mmc at 72000.bootdev.part_1d <NULL>
> >  5d  script       media   mmc         1d  mmc at 72000.bootdev.part_1d <NULL>
> > No more bootdevs
> > ---  -----------  ------  --------  ----  ------------------------
> > ----------------
> > (94 bootflows, 0 valid)
> > ```
> >
> > ls return 1
> >
> > ```
> > => ls mmc 1 /efi/boot
> >             ./
> >             ../
> >  51806720   BOOTAA64.EFI
> >
> > 1 file(s), 2 dir(s)
> >
> > => echo $?
> > 0
> > => ls mmc 1 /efi/boot/bootaa64.efi
> > => echo $?
> > 1
> > => ls mmc 1 /EFI/boot/BOOTAA64.EFI
> > => echo $?
> > 1
> > => ls mmc 1 /
> >             EFI/
> >
> > 0 file(s), 1 dir(s)
> >
> > => ls mmc 1 /EFI/
> >             ./
> >             ../
> >             BOOT/
> >
> > 0 file(s), 3 dir(s)
> >
> > => ls mmc 1 /EFI/BOOT/BOOTAA64.EFI
> > => echo $?
> > 1
> > => ls mmc 1 /EFI/BOOT
> >             ./
> >             ../
> >  51806720   BOOTAA64.EFI
>
> The issue ended up being the memory allocation. The file was too big
> (50MB). `bootflow scan -lae mmc1`
>
> In boot/bootmeth_efi.c, bootmeth_alloc_file is set to a pre-defined
> 32MB so bootefi cannot boot anything larger than that even if you have
> CONFIG_SYS_MALLOC_LEN set to something larger.
>
> Hope this helps someone.

Thank you for this. I sent a series[1] to drop the memory allocation,
which should resolve this. If you have time to test it, please do!

Regards,
Simon

[1] https://patchwork.ozlabs.org/project/uboot/list/?series=365943


>
> >
> > 1 file(s), 2 dir(s)
> >
> > => ls mmc 1 /EFI/BOOT/nonexist
> > => echo $?
> > 1
> > ```
> >
> > On Mon, Jul 24, 2023 at 11:35 AM Da Xue <da at libre.computer> wrote:
> > >
> > > Hi,
> > >
> > > I switch to bootstd and I am experiencing an issue with bootstd not
> > > detected EFI bootable file in /EFI/BOOT/BOOTAA64.EFI in certain image,
> > > buildroot specifically. The same setup works fine with distro_bootcmd.
> > > I have attached the logs. I have tried the following:
> > >
> > > 1) Directory and filename case upper and lower
> > > 2) FAT32 and FAT16 filesystem
> > > 3) Changing the size of the filesystem
> > >
> > > I noticed some particular weirdness with u-boot's return code for
> > > functions dealing with fs_exists that might be related.
> > >
> > > 1) FAT/FAT32 driver uses fs_ls_generic. When you do `ls mmc 1
> > > /filename`, it returns 1 if the file exists and returns 1 when the
> > > file doesn't exist.
> > > 2) This issue follows fs_exists. Is this a bug or intended behavior?
> > >
> > > Best,
> > > Da


More information about the U-Boot mailing list