Cold-start IPL

One of the benefits of QNX Neutrino, especially in a cost-reduced embedded system, is that you don't require a BIOS or ROM monitor program. This discussion is primarily for developers who must write their own IPL program or who (for whatever reason) don't wish to use the default IPL supplied by their BIOS/monitor.

Let's take a look at what the IPL does in this case.

When power is first applied to the processor (or whenever the processor is reset), some of its registers are set to a known state, and it begins executing from a known memory location (i.e. the reset vector).

Your IPL software must be located at the reset vector and must be able to:

  1. Set up the processor.
  2. Locate the OS image.
  3. Copy the startup program into RAM.
  4. Transfer control to the startup program.

For example, on an x86 system, the reset vector is located at address 0xFFFFFFF0. The device that contains the IPL must be installed within that address range. In a typical x86 PC BIOS, the reset vector code contains a JMP instruction that then branches to the code that performs diagnostics, setup, and IPL functionality.