Linux内核源码分析--内核启动之zImage自解压过程

Linux内核编译流程分析

linux2.6内核启动分析--李枝果(不看是你的损失^_^)

文档下载地址:

https://files.cnblogs.com/pengdonglin137/Linux%E5%86%85%E6%A0%B8%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90--%E5%86%85%E6%A0%B8%E5%90%AF%E5%8A%A8%E4%B9%8BzImage%E8%87%AA%E8%A7%A3%E5%8E%8B%E8%BF%87%E7%A8%8B.rar

关于内核自解压完毕后,执行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

可以看到,Image的大小是6806148B,十六进制值就是67DA84,接下来看看piggy.gz的结尾:

image

image

可以看到,确实是将0x67DA84以小端的格式存放在了piggy.gz的结尾四字节中了。

vmlinux.lds

1: /*

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjxxg.html