[U-Boot] [PATCH] WIP: Example changes to build EFI stub for x86

Nicolae Rosia nicolae.rosia at gmail.com
Wed Apr 6 17:50:51 CEST 2016


Hi,

On Wed, Apr 6, 2016 at 6:06 PM, Simon Glass <sjg at chromium.org> wrote:
> Currently it is not possible to build the 64-bit EFI stub due to changes in
> the build. To prevent future bit rot, we should add  target for building
> qemu-x86 as an EFI stub (with U-Boot as a 32-bit payload).
>
> This patch provides some hints.
>
> Reported-by: Nicolae Rosia <nicolae.rosia at gmail.com>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>  arch/x86/include/asm/types.h | 12 ++++++++----
>  configs/qemu-x86_defconfig   |  3 +++
>  include/efi.h                |  2 +-
>  lib/efi/efi_stub.c           |  6 +++---
>  4 files changed, 15 insertions(+), 8 deletions(-)
>
> diff --git a/arch/x86/include/asm/types.h b/arch/x86/include/asm/types.h
> index 766617f..998d70a 100644
> --- a/arch/x86/include/asm/types.h
> +++ b/arch/x86/include/asm/types.h
> @@ -44,11 +44,15 @@ typedef __INT64_TYPE__ s64;
>  typedef __UINT64_TYPE__ u64;
>  #endif
>
> -#ifdef CONFIG_EFI_STUB_64BIT
> -#define BITS_PER_LONG 64
> -#else
> +/*
> + * This should be defined only when compiling the stub - see the
> + * ecmd_u-boot_payload build rule
> + */
Are you saying that I should take a look at cmd_u-boot_payload in Makefile?
I've looked over it and I don't figure out what I should see.

> +// #ifdef CONFIG_EFI_STUB_64BIT
> +// #define BITS_PER_LONG 64
> +// #else
>  #define BITS_PER_LONG 32
> -#endif
> +// #endif
This fixes the compilation warnings

>  /* Dma addresses are 32-bits wide.  */
>
>  typedef u32 dma_addr_t;
> diff --git a/configs/qemu-x86_defconfig b/configs/qemu-x86_defconfig
> index bb9c6cd..2a7087f 100644
> --- a/configs/qemu-x86_defconfig
> +++ b/configs/qemu-x86_defconfig
> @@ -32,3 +32,6 @@ CONFIG_VIDEO_VESA=y
>  CONFIG_FRAMEBUFFER_SET_VESA_MODE=y
>  CONFIG_FRAMEBUFFER_VESA_MODE_111=y
>  CONFIG_USE_PRIVATE_LIBGCC=y
> +CONFIG_EFI=y
> +CONFIG_EFI_STUB=y
> +CONFIG_EFI_STUB_64BIT=y
Should we create an example defconfig for efi stub and not modify the
qemu defconfig?

> diff --git a/include/efi.h b/include/efi.h
> index 1dbc3b7..21921f1 100644
> --- a/include/efi.h
> +++ b/include/efi.h
> @@ -278,7 +278,7 @@ struct efi_priv {
>  extern char image_base[];
>
>  /* Start and end of U-Boot image (for payload) */
> -extern char _binary_u_boot_dtb_bin_start[], _binary_u_boot_dtb_bin_end[];
> +extern char _binary_u_boot_bin_start[], _binary_u_boot_bin_end[];
>
>  /**
>   * efi_get_sys_table() - Get access to the main EFI system table
> diff --git a/lib/efi/efi_stub.c b/lib/efi/efi_stub.c
> index 8b4bb4e..1814960 100644
> --- a/lib/efi/efi_stub.c
> +++ b/lib/efi/efi_stub.c
> @@ -354,9 +354,9 @@ efi_status_t efi_main(efi_handle_t image, struct efi_system_table *sys_table)
>         /* The EFI UART won't work now, switch to a debug one */
>         use_uart = true;
>
> -       memcpy((void *)CONFIG_SYS_TEXT_BASE, _binary_u_boot_dtb_bin_start,
> -              (ulong)_binary_u_boot_dtb_bin_end -
> -              (ulong)_binary_u_boot_dtb_bin_start);
> +       memcpy((void *)CONFIG_SYS_TEXT_BASE, _binary_u_boot_bin_start,
> +              (ulong)_binary_u_boot_bin_end -
> +              (ulong)_binary_u_boot_bin_start);
>
Thanks, these fixes the compilation errors.

>  #ifdef DEBUG
>         puts("EFI table at ");
> --
> 2.8.0.rc3.226.g39d4020
>

I'll try to boot test.

Best regards,
Nicolae


More information about the U-Boot mailing list