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
edk2repository.Create a new directory inside
edk2\UefiPayloadPkgcalledNetBoot.Create a new directory inside
edk2\UefiPayloadPkg\NetBootcalledX64.Download the netboot.xyz binary from here and place it into the directory created above - i.e. inside
edk2\UefiPayloadPkg\NetBoot\X64Create a new file called
NetBoot.infinedk2\UefiPayloadPkg\NetBootand 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.decand add the following line in the[Guids]section -
gUefiPayloadNetBootAppGuid = { 0x4cdf2dae, 0xb4c7, 0x482c, { 0xb4, 0x68, 0x99, 0xc8, 0x12, 0x91, 0x1f, 0xf5 } }
Open
edk2\UefiPayloadPkg\UefiPayloadPkg.fdfand 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
Shellpart under the[FV.DXEFV]section.Open
edk2\UefiPayloadPkg\Library\PlatformBootManagerLib\PlatformBootManager.cand add the following line in thePlatformBootManagerAfterConsolefunction afterEfiBootManagerRefreshAllBootOption()call -
// Register Netboot
PlatformRegisterFvBootOption (&gUefiPayloadNetBootAppGuid, L"Netboot (iPXE)", LOAD_OPTION_ACTIVE);
Open
edk2\UefiPayloadPkg\Library\PlatformBootManagerLib\PlatformBootManagerLib.infand add the following line in the[Guids]section -
gUefiPayloadNetBootAppGuid
Build the UEFI Payload: UEFI Payload Build Instructions
Copy the generated
UEFIPAYLOAD.fdintoslimbootloader\PayloadPkg\PayloadBins\UefiNetBoot.fdBuild SBL for your platform
python BuildLoader.py build <platform> -p "OsLoader.efi:LLDR:Lz4;UefiNetBoot.fd:UEFI:Lzma"
Flash and boot