现在的位置: 首页 > 综合 > 正文

linux内核学习(9)启动全过程概述之内核映像结构

2013年09月10日 ⁄ 综合 ⁄ 共 1253字 ⁄ 字号 评论关闭

启动过程这块内容还蛮多的,因此得慢慢来分析,在此之前我也收集到了很多资料,这里将这些整理加上自己的一些理解。好不容易啊,总算开始内核源代码之旅了,我们要珍惜这来之不易的这个时刻。

要得到内核结构,我们有很多种方法,比如查看kbuild Makefile、Documentation,但是我选择了在网络上找,因为我们关注的重点是在于怎么分析源代码,特别是后面要分析设备驱动那块。


们以bzImage大内核映像为例,它由setup.elf和vmlinux组成,而vmlinux又由二进制文件setup.bin和
vmlinux.bin组成,而vmlinux.bin会进行压缩存储,变成vmlinux.bin.gz。因此bzImage有三部分组成
setup.elf、setup.bin、vmlinux.bin.gz。

在来看看它们的分布图,这里用文字描述:

0x00007c00  --  BootLoader     加载程序,位于硬盘的MBR中
0x00090000  --  0x00090000  --  setup.elf的启动扇区512B
                          0x00090200  --  setup.elf的setup部分
0x00100000  --  vmlinux


(这是大内核)

现在在来简单介绍一下各个部分:
1、BootLoader:
PC机的Boot Loader遵从linux引导协议2.03,PC 机中的引导加载程序由 BIOS(位于主板flash
rom中的固化程序)和位于硬盘 MBR 中的操作系统Boot Loader(如LILO 和 GRUB 等)组成。BIOS
在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给操作系统Boot
Loader。Boot Loader将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
2、setup.elf:
分为启动扇区和setup扇区,第一部分启动扇区(bootsect)为bzImage前512字节,以前的版本用于从软盘启动引导Linux部分。当前版本不支持将它用于从软盘引导,
否则,将打印错误信息"Direct booting from floppy is no longer
supported.",这将在代码中看到。第二部分为setup扇区,是从512个字节开始的程序,它运行在实模式下,为保护模式的Linux内核启动准备环境。这个部分最后会切换进入保护模式,跳转到保护模式的内核执行,也就是0x10000的vmlinux处。
3、vmlinux:
这部分是进入保护模式后的代码部分,由解压程序和内核映像压缩包组成。


了,内核映像的结构和被加载入内存的结构有一个感性认识后,对我们讨论后面的内容会有很大的帮助,后面就是源代码分析来了解启动全过程,这样的认识会更加
的深刻。希望我们能克服困难走到最后。我会加快分析的步伐,你也一样,最好将一些重要的东西和我分享,我们共同进步,这样的学习才是最和谐和快乐的。

抱歉!评论已关闭.