Initial Program Loader (IPL)

QNX provides IPLs for supported board architectures and variants. These IPLs complete the fewest steps needed to complete hardware intialization, 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 (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 Initial Program Loader (IPL), or, usually, a combination of the vendors BIOS or ROM monitor 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 initialization and configuration, 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 the board manufacturer.

For ARM boards, the boot ROM typically performs only a small part of the initialization and configuration required 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 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 will allow 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).

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

The IPL uses the startup header (startup.h) to pass information on to the startup program (see The startup header).

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