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