linux2.6内核启动分析--李枝果(不看是你的损失^_^)
文档下载地址:
关于内核自解压完毕后,执行start_kernel的分析,参见:
内核版本:3.0.8
相关文件:
arch/arm/boot/compressed/head.S
arch/arm/boot/compressed/vmlinux.lds
arch/arm/boot/compressed/piggy.gzip
这里仅对内核自解压进行简要分析,详细的分析可以阅读参考博客文档。
zImage来历顶层vmlinux ---->
arch/arm/boot/Image --->
arch/arm/boot/compressed/piggy.gz --->
arch/arm/boot/compressed/vmlinux --->
arch/arm/boot/zImage
如果要分析zImage的反汇编反汇编文件,可将arch/arm/boot/compressed/vmlinux进行反汇编,
arm-linux-xxx-objdump –d vmlinux > vmlinux.dis
对顶层的vmlinux反汇编得到的是未压缩的内核的反汇编文件,这个vmlinux才是真正的Linux内核。
piggy.gz压缩文件的特点gzip -f -9 < Image > piggy.gz
在piggy.gz的结尾四个字节表示的是 Image 镜像的大小,并且是以小端格式存放的。下面我们验证一下:
可以看到,Image的大小是6806148B,十六进制值就是67DA84,接下来看看piggy.gz的结尾:
可以看到,确实是将0x67DA84以小端的格式存放在了piggy.gz的结尾四字节中了。
vmlinux.lds1: /*