[U-Boot] [PATCH 00/16] efi: Enable basic sandbox support for EFI loader

Rob Clark robdclark at gmail.com
Mon Sep 18 13:18:46 UTC 2017


On Sun, Sep 17, 2017 at 11:48 PM, Heinrich Schuchardt
<xypron.glpk at gmx.de> wrote:
> On 09/18/2017 12:59 AM, Simon Glass wrote:
>> A limitation of the EFI loader at present is that it does not build with
>> sandbox. This makes it hard to write tests, since sandbox is used for most
>> testing in U-Boot.
>>
>> This series enables the EFI loader feature. It allows sandbox to build and
>> run a trivial function which calls the EFI API to output a message.
>>
>> Much work remains but this should serve as a basis for adding tests more
>> easily for EFI loader.
>>
>> This series sits on top of Heinrich's recent EFI test series. It is
>> available at u-boot-dm/efi-working
>>
>>
>> Simon Glass (16):
>>   efi: Update efi_smbios_register() to return error code
>>   efi: Move the init check inside efi_init_obj_list()
>>   efi: Add error checking for efi_init_obj_list()
>>   efi: Add a TODO to efi_init_obj_list()
>>   efi: Correct header order in efi_memory
>>   efi: sandbox: Adjust memory setup for sandbox
>>   sandbox: smbios: Update to support sandbox
>>   sandbox: Add a setjmp() implementation
>>   efi: sandbox: Add required linker sections
>>   efi: sandbox: Add distroboot support
>>   Define board_quiesce_devices() in a shared location
>>   Add a comment for board_quiesce_devices()
>>   efi: sandbox: Add relocation constants
>>   efi: Add a comment about duplicated ELF constants
>>   efi: sandbox: Enable EFI loader builder for sandbox
>>   efi: sandbox: Add a simple 'bootefi test' command
>>
>>  arch/arm/include/asm/u-boot-arm.h |  1 -
>>  arch/sandbox/cpu/cpu.c            | 13 ++++++++++
>>  arch/sandbox/cpu/os.c             | 17 ++++++++++++
>>  arch/sandbox/cpu/u-boot.lds       | 29 +++++++++++++++++++++
>>  arch/sandbox/include/asm/setjmp.h | 21 +++++++++++++++
>>  arch/sandbox/lib/Makefile         |  2 +-
>>  arch/sandbox/lib/sections.c       | 12 +++++++++
>>  arch/x86/include/asm/u-boot-x86.h |  1 -
>>  arch/x86/lib/bootm.c              |  4 ---
>>  cmd/bootefi.c                     | 54 ++++++++++++++++++++++++++++++++++-----
>>  common/bootm.c                    |  4 +++
>>  configs/sandbox_defconfig         |  1 +
>>  include/bootm.h                   |  8 ++++++
>>  include/config_distro_bootcmd.h   |  2 +-
>>  include/efi_loader.h              | 13 ++++++++--
>>  include/os.h                      | 21 +++++++++++++++
>>  lib/efi_loader/Kconfig            | 12 ++++++++-
>>  lib/efi_loader/Makefile           |  1 +
>>  lib/efi_loader/efi_boottime.c     |  4 +++
>>  lib/efi_loader/efi_memory.c       | 33 +++++++++++++-----------
>>  lib/efi_loader/efi_runtime.c      |  7 +++++
>>  lib/efi_loader/efi_smbios.c       |  6 +++--
>>  lib/efi_loader/efi_test.c         | 17 ++++++++++++
>>  lib/smbios.c                      | 38 ++++++++++++++++++++-------
>>  24 files changed, 277 insertions(+), 44 deletions(-)
>>  create mode 100644 arch/sandbox/include/asm/setjmp.h
>>  create mode 100644 arch/sandbox/lib/sections.c
>>  create mode 100644 lib/efi_loader/efi_test.c
>>
> Thanks for enabling efi_loader on sandbox. That will make many things
> easier.
>
> Unfortunately
> efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
>                                  struct efi_system_table *systab)
> {
> ...
>         boottime = systable->boottime;
> ...
>         ret = boottime->allocate_pool(EFI_BOOT_SERVICES_DATA, map_size,
>                                       (void **)&memory_map);
> leads to a segmentation fault:

I'm seeing something similar, because:

(gdb) print gd->bd->bi_dram[0]
$2 = {start = 0, size = 134217728}

u-boot expects 1:1 phys:virt mapping, so that probably won't work.

> => bootefi selftest
>
> Testing EFI API implementation
>
> Number of tests to execute: 3
> <snip>
> Setting up 'ExitBootServices'
> Setting up 'ExitBootServices' succeeded
> Segmentation fault
> user at workstation:~/workspace/u-boot-odroid-c2/denx$
>
> The problem does not exist with qemu-x86_defconfig without your patches.

fwiw, qemu-x86 still works for me (I can still load Shell.efi) with
these patches..

BR,
-R

> qemu-x86_defconfig cannot be built with you patches:
>
>   UPD     include/generated/asm-offsets.h
> sh: echo: I/O error
> Kbuild:47: recipe for target 'include/generated/generic-asm-offsets.h'
> failed
> make[1]: *** [include/generated/generic-asm-offsets.h] Error 1
> make[1]: *** Waiting for unfinished jobs....
> Makefile:1332: recipe for target 'prepare0' failed
> make: *** [prepare0] Error 2
>
> Best regards
>
> Heinrich


More information about the U-Boot mailing list