The Linux boot sequence is more complicated than your average
embedded operating system, and there are many more options for
configuring things. In general, the boot sequence goes like this:
- Processor comes out of reset and branches to the ROM startup code.
- The ROM startup code initializes the CPU and memory controller,
performing only minimal initialization of on-chip devices, such as
the console serial port (typically SMC1 on 8xx devices) to provide
boot diagnostic messages. It also sets up the memory map for the kernel
to use in a format that is consistent across platforms, and then jumps
to the boot loader.
- The boot loader decompresses the kernel into RAM, and jumps to it.
- The kernel sets up the caches, initializes each of the hardware devices
via the init function in each driver, mounts the root filesystem and execs
the init process, which is the ultimate parent of all user mode processes,
typically /sbin/initd.
- Executing the first program linked against the shared C runtime library
(often init) causes the shared runtime library to be loaded.
- In a typical Linux system, init reads /etc/inittab to execute the
appropriate run control script from /etc/rc.d, which execute the start
scripts to initialize networking and other system services.
In minimal embedded systems, is commonly replaced with a simple
C program or shell script to start the appropriate services and
applicationprograms, since the conventional
rc scripts are often overkill.