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

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Sep 18 03:48:03 UTC 2017


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:

=> 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.

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