[U-Boot] [BUG] U-Boot hangs on fatload, commit ee88eacbdd840199a3dec707234579fb15ddd46a
Heinrich Schuchardt
xypron.glpk at gmx.de
Sat Nov 9 18:40:42 UTC 2019
On 11/9/19 6:08 PM, Heinrich Schuchardt wrote:
> On 11/9/19 4:11 PM, Gray Remlin wrote:
>> On Fri, 8 Nov 2019 at 20:08, Heinrich Schuchardt <xypron.glpk at gmx.de
>> <mailto:xypron.glpk at gmx.de>> wrote:
>>
>> On 11/8/19 7:32 PM, Gray Remlin wrote:
>> > Please excuse the noise. I would like to file a bug report
>> against the
>> > above commit, a quick search of www.denx.de <http://www.denx.de>
>> <http://www.denx.de> did not
>> > reveal how I should proceed. Please point me in the right
>> direction.
>> >
>> >
>> > Issue:
>> > U-Boot hangs (i.e. during boot) whenever the command 'fatload' is
>> used.
>> >
>> > Details:
>> > U-Boot 2019.10 compiled with either dreamplug_defconfig or
>> > guruplug_defconfig.
>> >
>> > After the commit do_load() now additionally calls
>> efi_set_bootdev()
>> > which was moved out of do_load_wrapper() which is only called
>> by the
>> > 'load' command.
>> >
>> > Reverting the commit fixes this issue for me.
>> >
>>
>> Dear Gray,
>>
>> thanks for reporting the issue with commit
>> fs: do_load: pass device path for efi payload
>> ee88eacbdd840199a3dec707234579fb15ddd46a
>>
>> Is it only the fatload command that fails on your device or also the
>> load command?
>>
>> There is no bug tracker for U-Boot. So sending a mail to the U-Boot
>> mailing list, the patch author, and the maintainer is the best way to
>> inform the developers about bugs.
>>
>> Best regards
>>
>> Heinrich
>>
>>
>> Additional information:
>> cross-compiler gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi
>>
>> The U-Boot environment being used is the default obtained by
>> compiling U-Boot 2020.01-rc1-00100-gee93ef0c4b as dreamplug_defconfig
>>
>> => printenv
>> baudrate=115200
>> bootcmd=setenv ethact egiga0; ${x_bootcmd_ethernet}; setenv ethact
>> egiga1; ${x_bootcmd_ethernet}; ${x_bootcmd_usb}; ${x_bootcmd_kernel};
>> setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000;
>> bootdelay=3
>> ethact=egiga0
>> fdtcontroladdr=1fb8e7c8
>> stderr=serial
>> stdin=serial
>> stdout=serial
>> x_bootargs=console=ttyS0,115200
>> x_bootargs_root=root=/dev/sda2 rootdelay=10
>> x_bootcmd_ethernet=ping 192.168.2.1
>> x_bootcmd_kernel=fatload usb 0 0x6400000 uImage
>> x_bootcmd_usb=usb start
>>
>> U-Boot hangs for other syntactically correct invocations of either
>> 'fatload' or 'load'
>> Other commands such as 'fatls' function as expected.
>>
>> Program flow is as follows:
>>
>> command 'fatload' (or 'load')
>> efi_set_bootdev()
>> ...
>> efi_dp_split_file_path()
>> ...
>> efi_dp_dup()
>> ....
>> efi_dp_size()
>> *while exit condition never met*
>> *infinite loop*
>>
>>
>> This is not an attempted EFI boot, why is EFI code being invoked ?
>
> Thanks for debugging.
>
> When booting from EFI we need to know from which device the EFI binary
> was loaded. We use this information to install the loaded image
> protocol. At the time of the load command we do no know if you will
> invoke bootz or bootefi.
>
> It might be that we have a problem with creating device paths for USB. I
> will try to reproduce this.
>
> You could add
>
> printf("efi_dp_split_file_path(%pD)\n", full_path);
>
> at the beginning of efi_dp_split_file_path() to identify what device
> path is passed to the function. This should produce an output like
>
> => load scsi 0:2 $kernel_addr_r description.txt
> efi_dp_split_file_path(/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/Scsi(0,0)/HD(2,MBR,0x6fe3a999,0x400,0x400)/description.txt)
>
>
> Best regards
>
> Heinrich
I just tested on an OrangePi PC with v2019.10 and got this:
=> fatload usb 0:1 $kernel_addr_r test.txt
efi_dp_split_file_path(/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/UsbClass(0x0,0x0,0x9,0x0,0x1)/UsbClass(0x781,0x5571,0x0,0x0,0x0)/HD(1,MBR,0xfae8c6af,0x800,0x3b9f800)/test.txt)
device path =
/VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/UsbClass(0x0,0x0,0x9,0x0,0x1)/UsbClass(0x781,0x5571,0x0,0x0,0x0)/HD(1,MBR,0xfae8c6af,0x800,0x3b9f800)
file path = /test.txt
12 bytes read in 26 ms (0 Bytes/s)
=> md.b $kernel_addr_r 0c
42000000: 4a 75 73 74 20 61 20 74 65 73 74 0a Just a test.
So debugging on your specific device is needed.
> x_bootcmd_kernel=fatload usb 0 0x6400000 uImage
You do not specify a partition number. Do you have a partition table?
Than the partition defaults to 1. Or does the file system sit directly
on the device?
Best regards
Heinrich
>
>> Whilst the proposition 'EFI boot = FAT filesystem' is True
>> the converse 'FAT filesystem = EFI boot' is Not True
>>
>> I am willing to help, but that may require some EFI hand-holding.
>> Gray
>>
>> PS. If anyone knows how to set '>' on reply content in GMail, please
>> email me off list.
>>
>
>
More information about the U-Boot
mailing list