The structure of the startup code is set by the startup main() function, which follows the start() function in the startup code.
The entry point to the startup program is _start() (e.g., hardware/startup/lib/arm/cstart.S). The _start() function sets up an environment in which the startup main() function can execute. It:
When it completes its work, _start() calls _main(), which:
The pseudo code below shows the structure of the main() function, with links to the entries for each function in the Startup Library chapter:
Global variables main() { // Initialize hardware Call add_callout_array() // Parse commandline arguments (Call handle_common_option()) // Remove ram used by modules in the image Call init_raminfo() // Initialize the MMU if (virtual) Call init_mmu() Call init_intrinfo() Call init_qtime() Call init_cacheattr() Call init_cpuinfo() // Set hardware machine name Call init_system_private() // Print debugging output Call print_syspage() }