iPXE - How to Build

iPXE images can be built using the rom-o-matic site. rom-o-matic may not support all possible options and can be slow - downloading the source code from a git repository and building locally is an alternative option.

A Linux Live distro can be used to clone the git repository and build iPXE. The ipxe website lists some of the dependencies required (here) -

"...You will need to have at least the following packages installed in order to build iPXE:
  • gcc (version 3 or later)
  • binutils (version 2.18 or later)
  • make
  • perl
  • syslinux (for isolinux, only needed for building .iso images)
  • liblzma or xz header files..."

Page contents -

ubuntu 16.04 Dependencies

ubuntu 16.04 requires the following dependencies in order to build ipxe successfully -

Using an ubuntu 16.04 live system as a build environment (booted via PXE as per the instructions in the Ubuntu section of this guide), the dependencies listed above can be installed by starting a terminal (right-click on the Ubuntu desktop and select "Open Terminal") and running the following commands -

And to clone the iPXE git repository and prepare iPXE for local builds -

Bash script to automate the above commands -

An ubuntu Live USB with persistent storage can be used as an alternative to PXE booting ubuntu from a NFS share - allowing ipxe to be built on rebooting the device without having to re-run the above commands.

lubuntu 16.04 Dependencies

lubuntu is a lightweight variant of ubuntu. In addition to the dependencies listed in the ubuntu 16.04 Dependencies section, the following dependencies are also required -

Bash script to automate the installation of all dependencies and cloning the ipxe git tree -

Configuration File Basics

After running the commands in the preceding section, iPXE configuration files can be located in the following path -

Configuration files with *.h filenames (e.g. Home/ipxe/src/config/general.h) can be edited with a text editor to enable/disable features. The majority of options are contained in Home/ipxe/src/config/general.h (see here for a copy (cloned from the ipxe git repository on 16/2/2017)).

Any lines in a configuration file starting with a # (hash) will be processed - e.g.

Any lines in a configuration file starting with // (2 x Forwardslash) will NOT be processed - e.g.

Any lines in a configuration file starting with #define will enable a feature - e.g.

Enable DOWNLOAD_PROTO_HTTP

Any lines in a configuration file starting with #undef will disable a default feature - e.g.

Disable DOWNLOAD_PROTO_HTTPS

Enabling a Feature

The example below walks through the steps required to enable CONSOLE FRAMEBUFFER support - if CONSOLE FRAMEBUFFER support is enabled, PNG images can be used as menu backgrounds and higher resolutions are supported. There are a range of other CONSOLE options that may be of interest - see here.

Edit Home/ipxe/src/config/console.h and change the following line...

...to

Edit Home/ipxe/src/config/general.h and change the following line...

...to

Also ensure that IMAGE_PNG is enabled (in Home/ipxe/src/config/general.h) -

Build

Make any required changes to the configuration files (see above) and then start a terminal in the Home/ipxe/src/ directory.

Now run the required command to build an iPXE binary/executable/rom. To build an iPXE binary for use on Client systems with 64-bit UEFI firmware for example, run the following command -

The resulting binary will contain all native drivers for supported Network Cards.

And some example commands...

...the resulting files (which can be found in Home > ipxe > src > bin path) will now include support for any additional commands/protocols/features enabled in the configuration files.

And some more examples....

...the resulting files can be located in the Home > ipxe > src > bin-x86_64-efi path.

An iPXE binary containing just the driver for a specific Network Card can be created - the resulting binary will be significantly smaller in size. This is covered below and also in the Burning iPXE into ROM page on the iPXE site (here).

You will need to identify the Vendor and Device IDs for your Network Card. On Windows, open Device Manager > expand Network adapters > identify the adapter from the list > right-click and select Properties.

The screenshot below shows the Properties for an Intel(R) 82579LM Gigabit Network Connection. To locate the Vendor and Device IDs > Select the Details tab > select Hardware Ids from the Property list > identify the IDs from the Value field -

Based on the information displayed in the screenshot above, the Vendor ID is 8086 and the Device ID is 1502.

To build an iPXE binary for this Network Card, run one of the following commands in a terminal (depending on your Firmware type) -

Or

Or

Document date - 28th February 2017(DRAFT)