[U-Boot] [BeagleBone Black] Possible bug in U-Boot efi loader for BeagleBone Black
Heinrich Schuchardt
xypron.glpk at gmx.de
Fri Dec 14 20:15:18 UTC 2018
On 12/14/18 3:58 PM, Dominik Adamski wrote:
> On 12/12/18 7:11 PM, Heinrich Schuchardt wrote:
>> On 12/12/18 3:02 PM, Dominik Adamski wrote:
>>> Hello,
>>> I think that I have found a bug in U-Boot UEFI implementation for
>>> BeagleBone Black board.
>>>
>>> I have tested U-Boot UEFI implementation for BeagleBone Black. I am able
>>> to load Linux successfully via GRUB bootloader with U-Boot v2018.09-rc2
>>> . U-Boot v2018.09-rc3 and above versions cause that the platform
>>> restarts over and over again. It starts booting, then it loads GRUB and
>>> when GRUB finishes its work an error occurs and the board restarts.
>>>
>>> I have looked through U-Boot repository and I have found the commit,
>>> which breaks booting. It's name is as follows: "efi_loader: update
>>> runtime services table crc32" (commit ID:
>>> a39f39cdd8be5cd3e7a8b696a463b621e3d827e0 ) . I have figured out, that
>>> when I comment out function call:
>>> efi_update_table_header_crc32(&efi_runtime_services.hdr); in function
>>> efi_runtime_detach then I am able to launch Linux successfully.
>>>
>>> My setup of U-Boot, GRUB and Linux was as follows:
>>> https://github.com/DominikAdamski/Beaglebone_GRUB_Manual . For U-Boot
>>> v2018.09 I get following log when booting:
>>>
>>> U-Boot 2018.09 (Dec 11 2018 - 11:11:16 +0100)
>>>
>>> CPU : AM335X-GP rev 2.1
>>> Model: TI AM335x BeagleBone Black
>>> DRAM: 512 MiB
>>> NAND: 0 MiB
>>> MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
>>> Loading Environment from FAT... *** Warning - bad CRC, using default
>>> environment
>>>
>>> No USB device found
>>> <ethaddr> not set. Validating first E-fuse MAC
>>> Net: eth0: ethernet at 4a100000
>>> Hit any key to stop autoboot: 2 ^H^H^H 1 ^H^H^H 0
>>> switch to partitions #0, OK
>>> mmc0 is current device
>>> SD/MMC found on device 0
>>> ** Unable to read file boot.scr **
>>> 85 bytes read in 1 ms (83 KiB/s)
>>> Loaded env from uEnv.txt
>>> Importing environment from mmc0 ...
>>> Running uenvcmd ...
>>> 403968 bytes read in 28 ms (13.8 MiB/s)
>>> ^[[18tScanning disks on usb...
>>> Disk usb0 not ready
>>> Disk usb1 not ready
>>> Disk usb2 not ready
>>> Disk usb3 not ready
>>> Scanning disks on mmc...
>>> MMC Device 2 not found
>>> MMC Device 3 not found
>>> Found 4 disks
>>> WARNING: booting without device tree
>>> ## Starting EFI application at 82000000 ...
>>> ^[[?25h^[[0;30;47mWelcome to GRUB!
>>> ^M
>>> ^M^[[0;37;40m^[[0;37;40m^[[0;37;40mEFI stub: Booting Linux Kernel...^M
>>> EFI stub: Using DTB from configuration table^M
>>> EFI stub: Exiting boot services and installing virtual address map...^M
>>> U-Boot EFI: Relocation at 9ff4a8a8 is out of range (2008214f)
>>> data abort
>>> pc : [<9ff4a7cc>] lr : [<9ff4a8b9>]
>>> reloc pc : [<808007cc>] lr : [<808008b9>]
>>> sp : 9df1ebac ip : 00000020 fp : 00000000
>>> r10: 00001000 r9 : 9df29eb8 r8 : 00000028
>>> r7 : 9ff4aa10 r6 : 9ff4aec4 r5 : 00000003 r4 : 9ff4aa70
>>> r3 : 2002aac0 r2 : 00000050 r1 : 9ff4aa70 r0 : ffffffff
>>> Flags: NzCv IRQs off FIQs on Mode SVC_32
>>> Code: 61204621 f876f000 bd106120 b5f04b36 (b31c681c)
>>> UEFI image [0x9ceb1000:0x9cf139ff] '/\grub.efi'
>>> UEFI image [0x94728000:0x9510bfff]
>>> Resetting CPU ...
>>>
>>> resetting ...
>>>
>>> Please let me know, if I should add more detailed logs.
>>>
>>> Dominik Adamski
>>>
>>>
>> Hello Dominik,
>>
>> you refer to an outdated release candidate v2018.09-rc2.
>>
>> The following patch is missing in the release candidate:
>>
>> commit 483dbab9f9318149e5ea97daacbfae320f53e35a
>> Author: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> Date: Sun Jul 29 09:49:03 2018 +0200
>>
>> lib: crc32: mark function crc32() as __efi_runtime
>>
>> It is contained in the v2018.09 release. Please, update your page
>> https://github.com/DominikAdamski/Beaglebone_GRUB_Manual accordingly.
>>
>> The latest release is v2018.11. Release v2018.11 will require a recent
>> GRUB (later than patch d0c070179d4d). Or apply the following patch
>> http://git.denx.de/?p=u-boot.git;a=commit;h=f31239acff61f7def88a06eef1f091fce74ecd61
>>
>> Revert "efi_loader: remove efi_exit_caches()"
>>
>> Best regards
>>
>> Heinrich
>
> Hello Heinrich,
>
> I am resending my mail, because I haven't noticed that I should answer
> below your response. I am also adding some more information just to be
> sure, that everything is clear.
>
> I have build the newest GRUB from master branch and I have checked out
> U-Boot with this patch:
>
> http://git.denx.de/?p=u-boot.git;a=commit;h=f31239acff61f7def88a06eef1f091fce74ecd61
>
> Revert "efi_loader: remove efi_exit_caches()"
>
> and I still get an error while Linux booting :
>
> EFI stub: Booting Linux Kernel...
> EFI stub: Using DTB from configuration table
> EFI stub: Exiting boot services and installing virtual address map...
> efi_runtime_relocate: Relocation at 9ff57a20 is out of range (20081092)
> data abort
> pc : [<9ff57944>] lr : [<9ff57a31>]
> reloc pc : [<80800944>] lr : [<80800a31>]
> sp : 9df2b594 ip : 1f757000 fp : 00000000
> r10: 00002000 r9 : 9df36eb8 r8 : 00000028
> r7 : 9ff57bc8 r6 : 9ff5807c r5 : 00000003 r4 : 9ff57c28
> r3 : 20027c78 r2 : 00000050 r1 : 9ff57c28 r0 : ffffffff
> Flags: NzCv IRQs off FIQs on Mode SVC_32
> Code: 46216120 f876f000 bd106120 4b36b5f0 (b31c681c)
> UEFI image [0x9cebf000:0x9cf21bff] '/\grub.efi'
> UEFI image [0x94732000:0x95115fff]
> Resetting CPU ...
>
> resetting ...
>
> I can boot Linux only when I remove line:
> efi_update_table_header_crc32(&efi_runtime_services.hdr); (file
> lib/efi_loader/efi_runtime.c line: 344 ) .
>
> In my manual I referred to version v2018.09-rc2 because it is the last
> tagged version which works fine on BeagleBone with GRUB. v2018.09
> version does not cooperate with GRUB for BB. It restarts BB over and
> over again. The problem is caused by this patch:
>
> commit a39f39cdd8be5cd3e7a8b696a463b621e3d827e0 (HEAD)
> Author: Heinrich Schuchardt <xypron.glpk at gmx.de>
> Date: Sun Jul 29 09:49:04 2018 +0200
>
> efi_loader: update runtime services table crc32
>
> This patch is a child of the patch, which you have mentioned:
>
> commit 483dbab9f9318149e5ea97daacbfae320f53e35a
> Author: Heinrich Schuchardt <xypron.glpk at gmx.de>
> Date: Sun Jul 29 09:49:03 2018 +0200
>
> lib: crc32: mark function crc32() as __efi_runtime
>
>
> The revert patch which you have mentioned:
> http://git.denx.de/?p=u-boot.git;a=commit;h=f31239acff61f7def88a06eef1f091fce74ecd61
> Revert "efi_loader: remove efi_exit_caches()" does not solve the
> problem. I can boot Linux only if I revert this patch:
>
> commit a39f39cdd8be5cd3e7a8b696a463b621e3d827e0 (HEAD)
> Author: Heinrich Schuchardt <xypron.glpk at gmx.de>
> Date: Sun Jul 29 09:49:04 2018 +0200
>
> efi_loader: update runtime services table crc32
>
> When I revert the wrong patch ( a39f39cdd8be5cd3e7a8b696a463b621e3d827e0
> ), then I can boot Linux with U-Boot sources younger than v2018.09-rc2 .
>
> Best regards,
> Dominik
>
>
Hello Dominik,
the message
efi_runtime_relocate: Relocation at 9ff57a20 is out of range (20081092)
looks like a runtime function trying to call a non-runtime function.
Actual addresses depend on compiler versions.
Please, supply the following files to Alex and me for further analysis:
.config
u-boot.map
u-boot
lib/crc32.o
lib/efi_loader/efi_runtime.o
which match the U-Boot version you use together with the matching error
output. Please, also provide the output of the U-Boot command line tool
bdinfo.
Do I understand you right in that the code you compiled is
commit f31239acff61f7def88a06eef1f091fce74ecd61 with no further patches
applied and the .config file is generated with am335x_evm_defconfig?
Best regards
Heinrich
More information about the U-Boot
mailing list