Table of Contents

Build targets

iPXE is built using a command-line something like this:

  make bin/ipxe.pxe

The first part, bin in this case indicates platform. ipxe indicates driver, and .pxe indicates boot type.

  make [platform]/[driver].[extension]

The bin directory is included in git repo, but all platforms will be created automatically as part of the build process.

There are some other special targets as well.

Platforms

Currently supported platforms are:

-efi platforms can also have an additional -sb at the end. Used when submitting binaries for Secure Boot signing.

Driver

As the subtitle suggests this is the kind of driver to include in the build

Some commonly used variants and why:

Identifier Protocol) provided by something else in EFI land, should only find and boot the specific NIC device it was chained from.

Boot type

Determines what kind of header should be added to the binary and how entrypoints should be handled.

extension Valid platforms Description
.pxe pcbios Headerless X86 assembly code, PXE- or NBP-booted, sometimes renamed to .0 to work on older DHCP/TFTP servers
.efi efi EFI executable
.kpxe pcbios Same as .pxe but will Keep the original UNDI stack/driver present. This is needed for undionly ref
.kkpxe pcbios Same as .kpxe but will not unload (Keep) the PXE base code. only use with buggy BIOSes
.lkrn pcbios Builds with kernel header similar to Linux so it can be started by many bootloaders
.iso pcbios Builds .lkrn and adds ISOLINUX to create CD-ROM image, can be started by many bootloaders
.hd pcbios Direct executable i386 code put on a harddisk image (32KB blocks)
.dsk pcbios Direct executable i386 code put on a floppy disk image (512 Byte blocks)
.pdsk pcbios Padded .dsk to work with loaders that requires exact size such as iLO
.usb pcbios, efi Same as .dsk for pcbios, in efi mode it's an 1440K image with partition and [driver].efi added as /efi/boot/boot[arch].efi, mostly used for making USB stick images
.vhd pcbios .usb image converted to vhd commit
.raw pcbios Generic raw, can be used with RPL commit
.rom pcbios File intended to be flashed into PCI-based NIC ROM
.mrom pcbios File intended to be flashed into PCI-based NIC ROM. See notes for ''.mrom''
.pcirom pcbios Same as .rom
.isarom pcbios File intended to be flashed into ISA-based NIC ROM, must be used with e.g. VirtualBox
.efidrv efi Driver for NIC which can be used by other EFI firmware
.efirom efi File intended to be flashed into NIC ROM for EFI
.linux linux Linux ELF executable, use for tests, slirp and tap drivers

Special targets

Cross Compile

For cross-compiling, you will need to specify an approriate CROSS=… parameter to specify your cross-toolchain prefix. For example: make CROSS=aarch64-linux-gnu- bin-arm64-efi/ipxe.efi

Note that you do not need to (and should not) specify ARCH explicitly: this will be calculated based on the platform portion of the build target. Details on GitHub issue