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

Simon Glass sjg at chromium.org
Wed Apr 6 17:06:02 CEST 2016


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
+ */
+// #ifdef CONFIG_EFI_STUB_64BIT
+// #define BITS_PER_LONG 64
+// #else
 #define BITS_PER_LONG 32
-#endif
+// #endif
 /* 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
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);
 
 #ifdef DEBUG
 	puts("EFI table at ");
-- 
2.8.0.rc3.226.g39d4020



More information about the U-Boot mailing list