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

Da Xue da at lessconfused.com
Mon Jul 24 17:48:04 CEST 2023


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

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