payloads/edk2: Add iPXE EFI support for EDK2 payload
Add support for building iPXE as an EFI target and including it in the EDK2 payload as a boot option. This allows network booting directly from the UEFI boot menu without requiring a separate iPXE ROM file, as it is integrated into the payload. As the required payload-side changes are not yet upstream, guard the option on !EDK2_REPO_OFFICIAL. Adjust PXE Kconfig defaults so that PXE is built from source as ipxe.efi when EDK2_ENABLE_IPXE is selected. TEST=build/boot iPXE from edk2 boot menu on google/fizz. Change-Id: Ied61c7b8aa7a34261d6c6f7fd089b1affdc7d3f6 Signed-off-by: Michał Kopeć <michal.kopec@3mdeb.com> Signed-off-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/82721 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Sean Rhodes <sean@starlabs.systems> Reviewed-by: Walter Sonius <walterav1984@gmail.com>
This commit is contained in:
parent
f40de4e162
commit
567470cbb3
4 changed files with 51 additions and 5 deletions
21
payloads/external/Makefile.mk
vendored
21
payloads/external/Makefile.mk
vendored
|
|
@ -156,7 +156,11 @@ payloads/external/depthcharge/depthcharge/build/depthcharge.elf depthcharge: $(D
|
|||
|
||||
# edk2
|
||||
|
||||
$(obj)/UEFIPAYLOAD.fd: $(DOTCONFIG)
|
||||
ifeq ($(CONFIG_EDK2_ENABLE_IPXE),y)
|
||||
IPXE_EFI := payloads/external/iPXE/ipxe/ipxe.rom
|
||||
endif
|
||||
|
||||
$(obj)/UEFIPAYLOAD.fd: $(DOTCONFIG) $(IPXE_EFI)
|
||||
$(MAKE) -C payloads/external/edk2 UefiPayloadPkg \
|
||||
HOSTCC="$(HOSTCC)" \
|
||||
CC="$(HOSTCC)" \
|
||||
|
|
@ -208,7 +212,9 @@ $(obj)/UEFIPAYLOAD.fd: $(DOTCONFIG)
|
|||
OBJCOPY_x86_64=$(OBJCOPY_x86_64) \
|
||||
OBJCOPY_arm=$(OBJCOPY_arm) \
|
||||
OBJCOPY_arm64=$(OBJCOPY_arm64) \
|
||||
MFLAGS= MAKEFLAGS=
|
||||
MFLAGS= MAKEFLAGS= \
|
||||
CONFIG_EDK2_IPXE=$(CONFIG_EDK2_ENABLE_IPXE) \
|
||||
CONFIG_EDK2_IPXE_OPTION_NAME=$(CONFIG_EDK2_IPXE_OPTION_NAME)
|
||||
|
||||
$(obj)/ShimmedUniversalPayload.elf: $(DOTCONFIG)
|
||||
$(MAKE) -C payloads/external/edk2 UniversalPayload \
|
||||
|
|
@ -367,13 +373,18 @@ else
|
|||
IPXE_SERIAL_CONSOLE = n
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_EDK2_ENABLE_IPXE),y)
|
||||
cbfs-files-$(CONFIG_PXE_ROM)$(CONFIG_BUILD_IPXE) += pci$(CONFIG_PXE_ROM_ID).rom
|
||||
pci$(CONFIG_PXE_ROM_ID).rom-file := $(PXE_ROM_FILE)
|
||||
pci$(CONFIG_PXE_ROM_ID).rom-type := raw
|
||||
IPXE_CROSS_COMPILE:="$(CROSS_COMPILE_$(ARCH-ramstage-y))"
|
||||
else
|
||||
IPXE_CROSS_COMPILE:=$(CROSS_COMPILE_x86_64)
|
||||
endif
|
||||
|
||||
payloads/external/iPXE/ipxe/ipxe.rom ipxe: $(DOTCONFIG) $(IPXE_CONFIG_SCRIPT)
|
||||
$(MAKE) -C payloads/external/iPXE all \
|
||||
CROSS_COMPILE="$(CROSS_COMPILE_$(ARCH-ramstage-y))" \
|
||||
CROSS_COMPILE=$(IPXE_CROSS_COMPILE) \
|
||||
PXE_ROM_PCI_ID=$(PXE_ROM_PCI_ID) \
|
||||
CONFIG_IPXE_MASTER=$(CONFIG_IPXE_MASTER) \
|
||||
CONFIG_IPXE_STABLE=$(CONFIG_IPXE_STABLE) \
|
||||
|
|
@ -384,7 +395,9 @@ payloads/external/iPXE/ipxe/ipxe.rom ipxe: $(DOTCONFIG) $(IPXE_CONFIG_SCRIPT)
|
|||
CONFIG_HAS_SCRIPT=$(CONFIG_IPXE_ADD_SCRIPT) \
|
||||
CONFIG_IPXE_NO_PROMPT=$(CONFIG_IPXE_NO_PROMPT) \
|
||||
CONFIG_IPXE_HAS_HTTPS=$(CONFIG_IPXE_HAS_HTTPS) \
|
||||
CONFIG_IPXE_TRUST_CMD=$(CONFIG_IPXE_TRUST_CMD)
|
||||
CONFIG_IPXE_TRUST_CMD=$(CONFIG_IPXE_TRUST_CMD) \
|
||||
CFLAGS_x86_64="$(CFLAGS_x86_64)" \
|
||||
CONFIG_IPXE_BUILD_EFI=$(CONFIG_EDK2_ENABLE_IPXE) \
|
||||
|
||||
# LinuxBoot
|
||||
LINUXBOOT_CROSS_COMPILE_ARCH-$(CONFIG_LINUXBOOT_X86) = x86_32
|
||||
|
|
|
|||
18
payloads/external/edk2/Kconfig
vendored
18
payloads/external/edk2/Kconfig
vendored
|
|
@ -317,4 +317,22 @@ config EDK2_CUSTOM_BUILD_PARAMS
|
|||
|
||||
This option can support both macros `-D` and Pcds `--pcd`.
|
||||
|
||||
config EDK2_ENABLE_IPXE
|
||||
bool "Include iPXE in edk2 payload"
|
||||
depends on !EDK2_REPO_OFFICIAL
|
||||
default n
|
||||
select PXE
|
||||
help
|
||||
Instructs coreboot build system to build iPXE EFI target and include
|
||||
it in the EDK2 payload.
|
||||
|
||||
config EDK2_IPXE_OPTION_NAME
|
||||
string "iPXE option name"
|
||||
depends on EDK2_ENABLE_IPXE
|
||||
default "iPXE Network Boot"
|
||||
help
|
||||
Configures how the iPXE boot option should be displayed in boot menu
|
||||
of EDK2 Payload. This name will be passed as PCD to the EDK2 build
|
||||
system.
|
||||
|
||||
endif
|
||||
|
|
|
|||
15
payloads/external/edk2/Makefile
vendored
15
payloads/external/edk2/Makefile
vendored
|
|
@ -158,6 +158,11 @@ endif
|
|||
ifeq ($(CONFIG_EDK2_LOAD_OPTION_ROMS),y)
|
||||
BUILD_STR += -D LOAD_OPTION_ROMS=TRUE
|
||||
endif
|
||||
# NETWORK_IPXE = FALSE
|
||||
ifeq ($(CONFIG_EDK2_IPXE),y)
|
||||
BUILD_STR += -D NETWORK_IPXE=TRUE
|
||||
BUILD_STR += --pcd gUefiPayloadPkgTokenSpaceGuid.PcdiPXEOptionName=L"$(CONFIG_EDK2_IPXE_OPTION_NAME)"
|
||||
endif
|
||||
|
||||
endif # !CONFIG_EDK2_REPO_OFFICIAL
|
||||
|
||||
|
|
@ -248,6 +253,14 @@ gop_driver: $(EDK2_PATH)
|
|||
cp $(top)/$(CONFIG_INTEL_GMA_VBT_FILE) $(EDK2_PATH)/UefiPayloadPkg/vbt.bin; \
|
||||
fi; \
|
||||
|
||||
ipxe_rom: $(EDK2_PATH)
|
||||
if [ "$(CONFIG_EDK2_IPXE)" == "y" ]; then \
|
||||
echo " Including externally built iPXE"; \
|
||||
mkdir -p $(EDK2_PATH)/UefiPayloadPkg/NetworkDrivers/; \
|
||||
cp $(top)/payloads/external/iPXE/ipxe/ipxe.rom \
|
||||
$(EDK2_PATH)/UefiPayloadPkg/NetworkDrivers/ipxe.efi; \
|
||||
fi \
|
||||
|
||||
checktools:
|
||||
echo -n "EDK2: Checking uuid-dev:"
|
||||
echo "#include <uuid/uuid.h>" > libtest.c
|
||||
|
|
@ -285,7 +298,7 @@ print:
|
|||
-e 's/s /Build: Silent/' \
|
||||
-e 's/t /Toolchain: /'
|
||||
|
||||
prep: $(EDK2_PATH) $(EDK2_PLATFORMS_PATH) clean checktools logo gop_driver
|
||||
prep: $(EDK2_PATH) $(EDK2_PLATFORMS_PATH) clean checktools logo gop_driver ipxe_rom
|
||||
cd $(WORKSPACE); \
|
||||
source $(EDK2_PATH)/edksetup.sh; \
|
||||
unset CC; $(MAKE) -C $(EDK2_PATH)/BaseTools 2>&1; \
|
||||
|
|
|
|||
2
payloads/external/iPXE/Kconfig
vendored
2
payloads/external/iPXE/Kconfig
vendored
|
|
@ -10,6 +10,7 @@ menu "PXE Options"
|
|||
|
||||
choice
|
||||
prompt "PXE ROM to use"
|
||||
default BUILD_IPXE if EDK2_ENABLE_IPXE
|
||||
default PXE_ROM
|
||||
|
||||
config PXE_ROM
|
||||
|
|
@ -120,6 +121,7 @@ config IPXE_TRUST_CMD
|
|||
config IPXE_BUILD_EFI
|
||||
bool "Build iPXE for EFI target"
|
||||
depends on PAYLOAD_EDK2
|
||||
default y if EDK2_ENABLE_IPXE
|
||||
default n
|
||||
help
|
||||
Build iPXE for EFI target, enabling it to be executed from EDK2. If not
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue