内核加载到ram(内存)后,bootloader的任务就完成了,内核映像并不能直接运行,它一个压缩的zImage(小内核)。zImage映像中的并非一切被压缩,映像中包含未被压缩部分,这部分中包含解压缩程序,解压缩程序会解压缩映像中被压缩的部分。zImage使用gzip压缩的,它不仅仅是一个压缩文件,而且在这个文件的开头部分内嵌有gzip解压缩代码。当zImage被调用时它从arch/arm/boot/compressed/head.S的start汇编例程开始执行。这个例程进行一些基本的硬件设置,并调用arch/arm/boot/compressed/misc.c中的decompress_kernel()解压缩内核。
arch/arm/kernel/head.S文件是内核真正的启动入口点,一般是由解压缩内核的程序调用。首先看下对于运行这个文件的要求:
MMU = off; D-cache = off; I-cache = 无所谓,开也可以,关也可以; r0 = 0;r1 = 机器号;r2 = atags 指针。
这段代码是位置无关的,所以,如果以地址0xC0008