piPXE is a build of the iPXE network boot firmware for the Raspberry Pi.
-
Download sdcard.img and write it onto any blank micro SD card using a tool such as
dd
or Etcher. -
Insert the micro SD card into your Raspberry Pi.
-
Power on your Raspberry Pi.
Within a few seconds you should see iPXE appear and begin booting from the network:
To build from source, clone this repository and run make
. This will
build all of the required components and eventually generate the SD
card image sdcard.img.
You will need various build tools installed, including a
cross-compiling version of gcc
for building AArch64 binaries.
Fedora build tools:
sudo dnf install -y binutils gcc gcc-aarch64-linux-gnu \
git-core iasl libuuid-devel make \
mtools perl python subversion xz-devel
Ubuntu build tools:
sudo apt install -y build-essential gcc-aarch64-linux-gnu \
git iasl lzma-dev mtools perl python \
subversion uuid-dev
The SD card image contains:
- Broadcom VC4 boot firmware:
bootcode.bin
and related files - TianoCore EDK2 UEFI firmware built for the RPi4 platform:
RPI_EFI.fd
- iPXE built for the
arm64-efi
platform:/efi/boot/bootaa64.efi
The Raspberry Pi has a somewhat convoluted boot process in which the VC4 GPU is responsible for loading the initial executable ARM CPU code. The flow of execution is approximately:
- The GPU code in the onboard boot ROM loads
bootcode.bin
from the SD card. - The GPU executes
bootcode.bin
and loadsRPI_EFI.fd
from the SD card. - The GPU allows the CPU to start executing
RPI_EFI.fd
. - The CPU executes
RPI_EFI.fd
and loadsbootaa64.efi
from the SD card. - The CPU executes
bootaa64.efi
(i.e. iPXE) to boot from the network.
The build has some non-default options for edk2 configured. See EFI_FLAGS
in Makefile.
--pcd=PcdPlatformBootTimeOut=$(EFI_TIMEOUT)
sets the timeout for entering the menu--pcd=gRaspberryPiTokenSpaceGuid.PcdRamMoreThan3GB=1
enables more than 3GB RAM--pcd=gRaspberryPiTokenSpaceGuid.PcdRamLimitTo3GB=0
disables limit to 3GB RAM--pcd=gRaspberryPiTokenSpaceGuid.PcdSystemTableMode=1
enables ACPI+DT System Table
Every component is under an open source licence. See the individual subproject licensing terms for more details: