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.
Currently supported platforms are:
-efi
platforms can also have an additional -sb at the end. Used when submitting binaries for Secure Boot signing.
As the subtitle suggests this is the kind of driver to include in the build
ipxe
builds one binary with (almost) all PCI based NIC drivers that iPXE has (for now not working on arm since some interfaces have not yet been implemented there, build specific drivers instead such as snp)intel
or other driver file found in the sources builds for that driver808610de
binary with driver for specific PCI device with given pci-id. See list of hardware expected to work.ecm--ncm
double dash (--
) adds multiple drivers to one file, in this case we pull in most USB based drivers (you can add double dash multiple times for more than two drivers)Some commonly used variants and why:
ipxe
all native drivers, commonly used for usb based boot media or where iPXE is not used in a chainloaded manner.undionly
driver used for building chainable iPXE for pcbios
platforms (not included in ipxe
since UNDI stack can't be reliably kept and still having device available for possible native iPXE driver) use with .kpxe
extensionsnponly
similar to undionly
but for efi
uses snp
(Simple Network Protocol) or nii
(Network InterfaceIdentifier Protocol) provided by something else in EFI land, should only find and boot the specific NIC device it was chained from.
snp
same as snponly
but tries to boot all devices and not just the one it was chained via, this is also included in ipxe
buildsefidrv.cab
efi platform build cab for signing committests
the Linux test suite example: make bin-x86_64-linux/tests.linux && ./bin-x86_64-linux/tests.linux
post on mailinglist with more examplestap
the Linux tap driver, use with .linux
boot type, ex: bin-x86_64-linux/tap.linux –net tap,if=tap0,mac=00:0c:29:c5:39:a1
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 |
make
Same as make all
make all
Predefined list of most common targets and prints some helpfully suggestive messagemake everything
tries to build targets for multiple platformsmake vmware
ROMs for VMwaremake doc
Same as make bin/doc
make [platform]/doc
Builds doxygen documentationmake docview
Tries to open doxygen documentation in browser
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