日期:2014-05-16  浏览次数:20711 次

Linux系统初始化——引导过程

 

Linux的引导过程包括很多阶段。加电之后,硬件首先完成CPU自身的初始化,如果有多个CPU,即多处理器系统,则每个CPU都要进行

自身初始化。

比如一个双处理器系统,一个CPU总是为主,另外一个总是为辅,主CPU执行引导过程的剩余工作,随后内核才会激活辅CPU。

在辅CPU被激活之前,我们可以认为该系统只有一个CPU可用,而不考虑另外一个CPU。

接下来。淳朴从每个固定位置取得指令并执行。该指令为跳转指令,跳转到BIOS代码的首部。注意,CPU并关心BIOS是否存在,它只是执行该地址中

保存的任何指令。

BIOS被固化在主板上的一个容量相对较小的ROM中,它有两个工作,加电自检和加载内核引导程序。

加电自检阶段完成系统硬件的检测,包括内存、系统总线、辅助硬件设备的检测。通常我们打开电脑耨,都会看到这么个检测画面一闪而过。

检测结束后,CPU按照BIOS剩下的程序会读取启动设备(相对于挂载硬盘而言。)的第一个扇区,即首512字节的信息。就是读取的他的第一个扇区。

该扇区叫做“主引导记录(Master Boot Record,MBR)”MBR中保存了内核引导的开始部分。这一部分将会被加载到内存中,然后BIOS 基本完成了它

的使命,关于BIOS 的代码会被清出去。下面会执行被加载到内存中的内核引导程序。

内核引导程序分为两个阶段:MBR中的主引导程序,和活动分区引导记录中的次引导程序。

MBR中的主主引导程序是一个512字节的映像。它包含了446字节的程序代码和64字节的分区表(分区表是我们的逻辑分区表,原来存在这里啊。有时候我们的

计算机会出现分区表丢失的错误。),最后两个字节为校验的作用。

446字节的主引导程序会扫描64字节的分区表。寻找活动分区(手动格式化硬盘时。我们会把c盘设为active状态,就是把它设为了活动分区),

将位于活动分区引导记录中的次引导程序(存储在C盘中)加载到内存中并执行。

次引导程序负责加载Linux内核映像,并将控制权交给内核。

PC环境下通常使用LILO(linuxloader)和GRUB(grand unified bootloader),在嵌入式环境中,用U-boot和RedBoot