BISECTED f3866909e350 ("distro_bootcmd: call EFI bootmgr even without having /EFI/boot")

Matwey V. Kornilov matwey.kornilov at gmail.com
Mon Jun 7 19:36:06 CEST 2021


вс, 6 июн. 2021 г. в 19:21, Heinrich Schuchardt <xypron.glpk at gmx.de>:
>
> On 6/6/21 5:42 PM, Matwey V. Kornilov wrote:
> > вс, 6 июн. 2021 г. в 18:20, Heinrich Schuchardt <xypron.glpk at gmx.de>:
> >>
> >> On 6/6/21 4:37 PM, Matwey V. Kornilov wrote:
> >>> Hi,
> >>>
> >>> I've found that
> >>>
> >>> f3866909e350 ("distro_bootcmd: call EFI bootmgr even without having /EFI/boot")
> >>>
> >>> breaks running EFI application from USB device on BeagleBone Black
> >>> (am335x) device.
> >>>
> >>> With this patch I see the following:
> >>>
> >>> Booting /efi\boot\bootarm.efi
> >>> Welcome to GRUB!
> >>>
> >>> data abort
> >>> pc : [<9ce0b6d0>]          lr : [<9ffab7c7>]
> >>> reloc pc : [<7d69d6d0>]    lr : [<8083d7c7>]
> >>> sp : 9df44e28  ip : 9ffdfe90     fp : 00000003
> >>> r10: 9ffe3300  r9 : 00000000     r8 : 9df6fe88
> >>> r7 : 00000000  r6 : 9ce5da08     r5 : 9ce571f8  r4 : 9ce2c040
> >>> r3 : 00000000  r2 : 00000001     r1 : 9ce56598  r0 : 00000000
> >>> Flags: NzCv  IRQs off  FIQs on  Mode SVC_32
> >>> Code: e3500000 0a000015 e590000c eb00f96e (e5d03000)
> >>   > UEFI image [0x9ce46000:0x9cf28fff] '/efi\boot\bootarm.efi'
> >>   > Resetting CPU ...
> >>
> >> Hello Matwey,
> >>
> >> thank you for reporting the issue.
> >>
> >> $ echo 'Code: e3500000 0a000015 e590000c eb00f96e (e5d03000)' |
> >> CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm scripts/decodecode
> >>
> >> Code: e3500000 0a000015 e590000c eb00f96e (e5d03000)
> >> All code
> >> ========
> >>      0:   e3500000        cmp     r0, #0
> >>      4:   0a000015        beq     0x60
> >>      8:   e590000c        ldr     r0, [r0, #12]
> >>      c:   eb00f96e        bl      0x3e5cc
> >>     10:*  e5d03000        ldrb    r3, [r0]                <-- trapping
> >> instruction
> >>
> >> Code starting with the faulting instruction
> >> ===========================================
> >>      0:   e5d03000        ldrb    r3, [r0]
> >>
> >> Looking at the disassembly above we see that reading memory location
> >> NULL fails.
> >>
> >> We need to find out where the exception occurs. The code position is
> >> neither in bootarm.efi nor in U-Boot (9ce0b6d0 is lower than the load
> >> position of bootarm.efi, so it is below the relocated U-Boot code).
> >>
> >> Please, add the following line at the start of grub.cfg to get more
> >> output from GRUB:
> >>
> >>          debug=all
> >
> > This doesn't provide any additional output from GRUB :(
> >
> >>
> >> When building U-Boot, please, add
> >>
> >>          #define DEBUG 1
> >>
> >> in lib/efi_loader/efi_disk.c and lib/efi_loader_file.c a line before
> >> #include <common.h>.
> >
> >
> > This doesn't provide much output as well:
> >
> > Scanning disk mmc at 48060000.blk...
> > EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
> > &efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
> > NULL)
> > EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
> > &efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
> > NULL)
> > ** Unrecognized filesystem type **
> > Scanning disk mmc at 481d8000.blk...
> > EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
> > &efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
> > NULL)
> > EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
> > &efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
> > NULL)
> > EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
> > &efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
> > NULL)
> > EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
> > &efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
> > NULL)
> > Found 3 disks
>
> This implies that GRUB is crashing before even accessing the file system
> (including grub.cfg).
>
> On an OrangePi PC I deleted /boot.scr and moved grubarm.efi to
> /EFI/boot/bootarm.efi. It boots without problem.
>
> What version of GRUB are you using?

Grub 2.04

> How were you booting before updating U-Boot?

The same path: u-boot was running EFI Grub which booted the kernel

> What version of U-Boot are you using where the error occurs?

The error firstly occurs in f3866909e350 and present in master.

> Why do you have grub in /EFI/boot/bootarm.efi and not in a distro
> specific path, e.g. /EFI/debian/grubarm.efi? /EFI/boot is typically only
> used by installers.

This is default boot loader path for openSUSE JeOS images.

>
> If the boot manager is started by distroboot it may not have an
> appropriate device path. It tries to load the file given by environment
> variable $fdtfile from the boot device.
>
>  From the U-Boot console could you, please, try:
>
> 1)
> load usb 0:1 $kernel_addr_r EFI/boot/bootarm.efi
> bootefi bootmgr
>


=> load usb 0:1 $kernel_addr_r EFI/boot/bootarm.efi
929792 bytes read in 92 ms (9.6 MiB/s)
=> bootefi bootmgr
Scanning disk mmc at 48060000.blk...
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
** Unrecognized filesystem type **
Scanning disk mmc at 481d8000.blk...
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
Scanning disk usb_mass_storage.lun0...
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: EFI system partition: usb 0:1
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
** Unrecognized filesystem type **
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
Found 7 disks
** Unable to read file ubootefi.var **
Failed to load EFI variables
BootOrder not defined
EFI boot manager: Cannot load any image


>
> 2)
> load usb 0:1 $kernel_addr_r EFI/boot/bootarm.efi
> load usb 0:2 $fdt_addr_r dtb
> bootefi bootmgr $fdt_addr_r


=> load usb 0:1 $kernel_addr_r EFI/boot/bootarm.efi
929792 bytes read in 95 ms (9.3 MiB/s)
=> load usb 0:3 $fdt_addr_r /boot/dtb/am335x-boneblack.dtb
96415 bytes read in 13 ms (7.1 MiB/s)
=> bootefi bootmgr $fdt_addr_r
Scanning disk mmc at 48060000.blk...
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
** Unrecognized filesystem type **
Scanning disk mmc at 481d8000.blk...
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
Scanning disk usb_mass_storage.lun0...
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: EFI system partition: usb 0:1
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
** Unrecognized filesystem type **
EFI: Call: efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
EFI: 0 returned by efi_install_multiple_protocol_interfaces( &handle,
&efi_guid_device_path, diskobj->dp, &efi_block_io_guid, &diskobj->ops,
NULL)
Found 7 disks
** Unable to read file ubootefi.var **
Failed to load EFI variables
BootOrder not defined
EFI boot manager: Cannot load any image


>
> where you need to replace dtb by the correct device tree file and adjust
> the partition numbers.
>
> Best regards
>
> Heinrich



-- 
With best regards,
Matwey V. Kornilov


More information about the U-Boot mailing list