вс, 6 июн. 2021 г. в 19:21, Heinrich Schuchardt <xypron.g...@gmx.de>: > > On 6/6/21 5:42 PM, Matwey V. Kornilov wrote: > > вс, 6 июн. 2021 г. в 18:20, Heinrich Schuchardt <xypron.g...@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 m...@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 m...@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 m...@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 m...@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 m...@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 m...@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