Startup tasks
The startup code configures the hardware, detects system resources, and loads and starts the OS kernel.
In order to keep the QNX Neutrino RTOS as configurable as possible, the startup code can program components such as the base timers, interrupt controllers, and cache controllers, as well as provide kernel callouts (see the Kernel Callouts chapter).
The startup code's main tasks are, in sequence:
- Copy the IFS and (optionally) decompress it.
- Complete the hardware initialization.
- Configure the system software.
- Initialize and populate the system page area.
- Load the OS kernel and the process manager.
startup-* optionsand other startup-* entries in the Utilities Reference.
Copy the IFS and (optionally) decompress it
If the IFS isn't in its final location in RAM when the startup code begins execution, the startup code copies it there.
The startup code itself can never be compressed. However, if the rest of the OS image is compressed, the startup code is responsible for decompressing it to its final location.
Complete the hardware initialization
The startup code does the minimum needed to detect the hardware configuration, then completes any
further configuration as required. Sometimes, all that's required is setting up the memory management unit (MMU),
the timer hardware, and the interrupt controllers (see Hardware initialization
).
Configure the system software
Depending on the system, its software configuration can be either dynamically detected and set by the startup code, or pre-set (hardcoded).
Initialize and populate the system page area
When the startup code has initialized the system, it places the system information in the system page area, then transfers control to the OS kernel.
The system page is a dedicated area of memory. This area contains the data structures that the kernel examines to learn about the system configuration. This configuration information includes:
- timer parameters
- memory map and address space information
- cache configuration
- hardware device configuration
- processor type
- time of day
The system page also includes kernel callouts that provide board-specific code for:
- kernel debugging
- the system timer
- cache control
- interrupts
- system reboot
For more information, see the System Page chapter.
Load the OS kernel and the process manager
The startup code's final task is to load the QNX Neutrino kernel and process manager (procnto), which:
- initializes the MMU
- creates structures to handle paging, processes, and exceptions
- enables interrupts
When this phase is complete, the system is fully operational. The OS kernel can
proceed to load and run user processes, as specified in the build scripts (see
The script file
in the OS Image Buildfiles chapter).
