ARM Kernel Start Process

What runs first depends on what type of kernel you start running.
If you're using a compressed kernel (aka zImage), the startup code
in arch/arm/boot/compressed/head.S runs (and maybe some other architecture
specific code in other head-*.S files in that directory). We then move
on to the decompressor proper (via decompress_kernel) in
arch/arm/boot/compressed/misc.c which gunzips the kernel. We then
relocate the kernel if required, and call it.

This is where we join the uncompressed kernel (aka Image) startup.
arch/arm/kernel/head-armv.S describes this, and includes such things
as page table initialisation and processor cache initialisation
(via support stuff in arch/arm/mm/proc-*.S).

We then proceed to start_kernel in init/main.c, and everything follows
from that point on. The only other thing to note is that the various
drivers are initialised via a table built by the linker from the
__initcall() and module_init() statements scattered throughout the
kernel source. The code which calls them can be found in init/main.c:
do_initcalls().

你可能感兴趣的:(ARM Kernel Start Process)