Initial Program Loader (IPL)

Updated: April 19, 2023

QNX provides Initial Program Loaders (IPLs) for supported board architectures and variants. These IPLs perform the fewest steps needed to initial the hardware, set up an environment in which the startup code can run, and load the OS image.

When a processor starts or restarts, it must be able to execute instructions. These instructions are stored on some kind of non-volatile media at the processor's reset vector, which is the memory address where the processor looks for its first instruction.

For a QNX Neutrino system, these instructions can be supplied by either a BIOS or UEFI (x86) or a ROM monitor (ARM) supplied by the hardware vendor, a QNX IPL, or usually, a combination of the vendor's component and the QNX IPL.

When the hardware and firmware look after some of the initializations and configurations, the boot is known as a “warm boot”. When the IPL looks after all initializations and configurations, the boot is known as a “cold boot”.

For x86 boards, the BIOS or UEFI typically looks after most initializations. These firmware components can be changed by the board manufacturer.

For ARM boards, the boot ROM typically performs only a small part of the initialization and configuration and the IPL completes the rest. Although the boot ROM is board-specific, it can often be reprogrammed. Alternatively, you can use U-Boot to perform most of the work that the boot ROM and IPL do. U-Boot is re-writable on most boards.

Typically, the IPL's responsibilities are:

  1. Configure the hardware to create an environment that allows the startup program and the QNX Neutrino kernel to run.
  2. Set up a stack to allow the IPL library to perform OS verification and setup.
  3. Load the image filesystem (IFS), including the startup code.
  4. Jump to the startup code.

Depending on the hardware, the IPL may load the IFS from a variety of non-volatile media, such as a MultiMedia Card (MMC), SD or micro SD card, NAND or NOR flash, or through a serial connection.

Note:

Since IPLs are board-specific, they are usually delivered in a BSP (see Working with QNX BSPs). The IPL uses the startup header (startup.h) to pass information on to the startup program (see The startup header).

Some boards come with a bootloader, such as U-Boot, which you can use instead of the IPL.

For more information about IPLs, see the chapter Initial Program Loaders (IPLs).