Netboot / PXE boot with UEFI Payload
Some users may choose to boot their operating system over a network. This guide shows how to use Netboot to enable booting over a network.
netboot.xyz lets you PXE boot various operating system installers or utilities over the network. iPXE is an open source network boot firmware. It provides a full PXE implementation.
netboot.xyz can be built as an UEFI Application and can be included in the UEFI Payload. The UEFI Payload can be customized to launch the netboot.xyz application as a boot target.
The steps below provide instruction on how to build UEFI Payload with netboot.xyz application -
Steps:
Clone the
edk2
repository.Create a new directory inside
edk2\UefiPayloadPkg
calledNetBoot
.Create a new directory inside
edk2\UefiPayloadPkg\NetBoot
calledX64
.Download the netboot.xyz binary from here and place it into the directory created above - i.e. inside
edk2\UefiPayloadPkg\NetBoot\X64
Create a new file called
NetBoot.inf
inedk2\UefiPayloadPkg\NetBoot
and paste the following contents in it -
1## @file
2# This is the Netboot binary file.
3#
4# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
5#
6# This program and the accompanying materials
7# are licensed and made available under the terms and conditions of the BSD License
8# which accompanies this distribution. The full text of the license may be found at
9# http://opensource.org/licenses/bsd-license.php
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12#
13#
14##
15##
16
17[Defines]
18 INF_VERSION = 0x00010006
19 BASE_NAME = NetBoot
20 FILE_GUID = 4CDF2DAE-B4C7-482C-B468-99C812911FF5
21 MODULE_TYPE = UEFI_APPLICATION
22 VERSION_STRING = 1.0
23
24[Binaries.X64]
25 PE32|X64/NetBoot.efi|*
Open
edk2\UefiPayloadPkg\UefiPayloadPkg.dec
and add the following line in the[Guids]
section -
gUefiPayloadNetBootAppGuid = { 0x4cdf2dae, 0xb4c7, 0x482c, { 0xb4, 0x68, 0x99, 0xc8, 0x12, 0x91, 0x1f, 0xf5 } }
Open
edk2\UefiPayloadPkg\UefiPayloadPkg.fdf
and add the following line at the end of the[FV.DXEFV]
section.
# NetBoot
INF RuleOverride = BINARY USE = X64 UefiPayloadPkg/NetBoot/NetBoot.inf
In the same file, comment out the line in the
Shell
part under the[FV.DXEFV]
section.Open
edk2\UefiPayloadPkg\Library\PlatformBootManagerLib\PlatformBootManager.c
and add the following line in thePlatformBootManagerAfterConsole
function afterEfiBootManagerRefreshAllBootOption()
call -
// Register Netboot
PlatformRegisterFvBootOption (&gUefiPayloadNetBootAppGuid, L"Netboot (iPXE)", LOAD_OPTION_ACTIVE);
Open
edk2\UefiPayloadPkg\Library\PlatformBootManagerLib\PlatformBootManagerLib.inf
and add the following line in the[Guids]
section -
gUefiPayloadNetBootAppGuid
Build the UEFI Payload: UEFI Payload Build Instructions
Copy the generated
UEFIPAYLOAD.fd
intoslimbootloader\PayloadPkg\PayloadBins\UefiNetBoot.fd
Build SBL for your platform
python BuildLoader.py build <platform> -p "OsLoader.efi:LLDR:Lz4;UefiNetBoot.fd:UEFI:Lzma"
Flash and boot