Overview of an image, boot process, and filesystem layout

The steps that occur when the system starts up are as follows:

  1. The processor begins executing at the reset vector.
  2. The Initial Program Loader (IPL) locates the image filesystem (IFS) and transfers control to the startup program in the image.
  3. The startup program configures the system and transfers control to the procnto module (combined microkernel and process manager).
  4. The procnto module loads additional drivers and any application programs.

The reset vector is the address at which the processor begins executing instructions after the processor's reset line has been activated. On the x86, for example, this is the address 0xFFFFFFF0.

The IPL minimally configures the hardware to create an environment that allows the startup program microkernel to run.

The IFS is a file that contains the OS, your executables, and any data files that might be related to your programs. The IFS contains a directory structure and some files.

To begin to create an image for your platform, you'll first need to understand the components of an image and the boot process. The following illustration shows the boot sequence.

Note: You can also use the QNX Momentics IDE to create a System Builder Project to generate an image from scratch or to import an existing buildfile. For more information see "Build Images" in the IDE User's Guide.

When the bootup process starts, the CPU executes code at the reset vector, which could be a BIOS, ROM monitor, or an IPL. If it's a BIOS, then it'll find and jump to a BIOS extension (for example, a network boot ROM or disk controller ROM), which will load and jump to the next step. If it's a ROM monitor, typically uboot, then the ROM monitor jumps to the IPL code.

The IPL code does chip selects and sets up RAM, then jumps to the startup code. In either case, the next thing that runs is some startup code that sets up some hardware and prepares the environment for procnto to run.

The procnto module sets up the kernel and runs a boot script that contains drivers and other processes (which may include those you specify), and any additional commands for running anything else. The files included will be those as specified by the mkifs buildfile.

A buildfile specifies any files and commands to include in the image, the startup order for the executables, the loading options for the files and executables, as well as the command-line arguments and environment variables for the executables.