Linux 引导过程内幕
上一篇 / 下一篇 2009-03-23 16:18:49 / 个人分类:Linux
我的栏目
- 栏目:Linux
.@W
^Z
DM9E
~0概述51Testing软件测试网!Uc7f_i$g;XPtp
当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码。在个人计算机(PC)中,这个位置在基本输入/输出系统(BIOS)中,它保存在主板上的闪存中。嵌入式系统中的中央处理单元(CPU)会调用这个重置向量来启动一个位于闪存/ROM中的已知地址处的程序。在这两种情况下,结果都是相同的。因为PC提供了很多灵活性,BIOS必须确定要使用哪个设备来引导系统。稍后我们将详细介绍这个过程。
%~(O\XU Ey)J0当找到一个引导设备之后,第一阶段的引导加载程序就被装入RAM并执行。这个引导加载程序在大小上小于512字节(一个扇区),其作用是加载第二阶段的引导加载程序。51Testing软件测试网P3hw7^D
当第二阶段的引导加载程序被装入RAM并执行时,通常会显示一个动画屏幕,并将Linux和一个可选的初始RAM磁盘(临时根文件系统)加载到内存中。在加载映像时,第二阶段的引导加载程序就会将控制权交给内核映像,然后内核就可以进行解压和初始化了。在这个阶段中,第二阶段的引导加载程序会检测系统硬件、枚举系统链接的硬件设备、挂载根设备,然后加载必要的内核模块。完成这些操作之后启动第一个用户空间程序(init),并执行高级系统初始化工作。
'XA0m3b(`\&W0这就是Linux引导的整个过程。现在让我们深入挖掘一下这个过程,并深入研究一下Linux引导过程的一些详细信息。
ku&Htb-C
}-X0系统启动51Testing软件测试网"T/nb\LCtQ(z8x:j
系统启动阶段依赖于引导Linux系统上的硬件。在嵌入式平台中,当系统加电或重置时,会使用一个启动环境。这方面的例子包括U-Boot、RedBoot和Lucent的MicroMonitor。嵌入式平台通常都是与引导监视器搭配销售的。这些程序位于目标硬件上的闪存中的某一段特殊区域,它们提供了将Linux内核映像下载到闪存并继续执行的方法。除了可以存储并引导Linux映像之外,这些引导监视器还执行一定级别的系统测试和硬件初始化过程。在嵌入式平台中,这些引导监视器通常会涉及第一阶段和第二阶段的引导加载程序。
在PC中,引导Linux是从BIOS中的地址0xFFFF0处开始的。BIOS的第一个步骤是加电自检(POST)。POST的工作是对硬件进行检测。BIOS的第二个步骤是进行本地设备的枚举和初始化。51Testing软件测试网b"CcL-i'G*g
给定BIOS功能的不同用法之后,BIOS由两部分组成:POST代码和运行时服务。当POST完成之后,它被从内存中清理了出来,但是BIOS运行时服务依然保留在内存中,目标操作系统可以使用这些服务。
^i)`X6OG-c:\g:Q0要引导一个操作系统,BIOS运行时会按照CMOS的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备,甚至是USB闪存。
%k&N-Ro\p0通常,Linux都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区中(0道0柱面1扇区)。当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。51Testing软件测试网+Ut
A/[+gb
第一阶段引导加载程序51Testing软件测试网 e:_)F^/}:t8s
MBR中的主引导加载程序是一个512字节大小的映像,其中包含程序代码和一个小分区表(参见图2)。前446个字节是主引导加载程序,其中包含可执行代码和错误消息文本。接下来的64个字节是分区表,其中包含4个分区的记录(每个记录的大小是16个字节)。MBR以两个特殊数字的字节(0xAA55)结束。这个数字会用来进行MBR的有效性检查。51Testing软件测试网Wb-]1^a
主引导加载程序的工作是查找并加载次引导加载程序(第二阶段)。它是通过在分区表中查找一个活动分区来实现这种功能的。当找到一个活动分区时,它会扫描分区表中的其他分区,以确保它们都不是活动的。当这个过程验证完成之后,就将活动分区的引导记录从这个设备中读入RAM中并执行它。51Testing软件测试网2M:y,e7RFh
第二阶段引导加载程序51Testing软件测试网@0P&r