Linux引导过程的九个步骤
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux引导过程的九个步骤
【1】硬件和固件以及读入MBR
BIOS 或其它固件系统读取硬盘或者其它引导设备(例如,光盘、软盘、网络引导等等)上的
主引导记录。
计算器在接通电源之后,首先由BIOS 进行自检,即进行所谓的POST(Power On Self Test),
然依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。例如,通常BIOS中设置
的引导顺序为第一个IDE硬盘的C分区在最前面,那就是说,计算机开机启动时会把C盘的第0柱面,第0头的第1个扇区读入内存,然跳到那里开始执行。这个扇区有一个大家很熟悉的名字,它就
是: MBR(Main Boot Record)。换句话说,MBR里面存放的是一小段程序以及分区表的数据。
在使用WIN9X和DOS 时,这里面存放的代码就会把分区表里标记为Active 的分区的第一个
扇区(一般存放着操作系统的引导代码)读入内存并跳转到那里开始执行.
【2】引导装载程序运行
x86 系统上的Linux 系统通常使用LILO 或者GRUB。某些老式系统可能使用loadlin 通过
一个中间DOS 分区进行引导。在Power PC® 系统上,这可能是BootX或者yaboot。一般来说,引导装载程序是一种简单的程序,它知道到哪里寻找Linux 内核,可能在几个版本之间
进行选择,甚至可以选择同一计算机上的其它操作系统。
在用LILO 来引导LINUX 时,有两种选择:
(a) BIOS->LILO(直接安装在MBR中)->KERNEL
把LILO直接安装在MBR,这时就由BIOS直接把LILO代码调入内存,然跳转执行LILO即可.
(b) BIOS->MBR->LILO(安装在活动分区的第一个扇区)->KERNEL
把LILO安装在LINUX分区,必须把LINUX分区设为Active. 这时BIOS调入的是WIN9X/DOS 下的MBR代码,然由这段代码来调入LILO的代码(位于活动分区的第一个扇区).
在过去,对于能够设置可引导分区的最高柱面,最大硬盘大小, 在大硬盘上主分区的位置等等
有许多限制。因为在读入及执行MBR 时,操作系统还没有起来, 所以只能用BIOS 提供的
INT13 来进行磁盘操作,而INT13 只能读写硬盘1024 柱面之前的数据,由此可知任何操作
系统的引导代码都必须在1024 柱面之前。对于LINUX的引导装载程序来说,不管你是使用
方式(a)还是方式(b)来启动,都要保证KERNEL放在1024柱面之前。但因为LINUX不使用INT13
来进行硬盘操作, 所以在KERNEL启动以后, 就有读写1024 柱面以后数据的能力了。
不过, 现在几乎所有硬件系统的BIOS 都得到了改进, 能够处理实际上无限大的硬盘, 因此
现代的引导装载程序(至少是Linux的引导装载程序),对于分区大小或位置已经没什么限制了.
【3】内核装载并进入保护模式
当启动电源之际,计算机的BIOS 就会找寻有无系统开机磁盘,有可能使用软盘、硬盘或者是随身碟开机,BIOS会将boot loader载入RAM中,接者boot Loader 会载入Linux Kernel,而Kernel 一旦起动后,第一件事就是切入保护模式(protected mode),此时,所有的硬件
交由Kernel 来控制,也意味挣脱BIOS 的羁绊。
【4】初始化硬件并安装根文件系统
当Kernel 加载完毕后,便开始初始化系统所有硬设备。而当所有的硬件初始化的动作也
告完成之际,系统将尝试挂载root partition(根分区). 所谓Root partition 也就是将被
挂上后当作"/"的根目录,如果无法正确挂载root partition,系统将无法运作。
在某些情况下,可能需要先装载一个临时ramdisk 映像, 以便加载启用真实根文件系统所需的特殊驱动程序或模块, 例如SCSI驱动模块, 然后再安装真正的根文件系统。安装好根檔
系统之后,就可以开始系统初始化了。
【5】启动进程init来初始化Linux系统
当root file system 成功的挂载后,就会去执行init这个程序。init会检查/etc/inittab
文檔, 找出该文檔中标明sysinit 的这一行, 并执行该行指定的script. 在Redhat Linux
系统上此脚本名为/etc/rc.d/rc.sysinit,它是一个比较复杂和冗长的Shell脚本(有几百行),
也就是说rc.sysinit 将开始肩负接下来的系统初始化大任; 而在Debian 系统上此脚本则
名为/etc/init.d/rcS, 它其实是只包含一行调用命令的脚本(exec /etc/init.d/rc S);
在内核起来之后所生成第一个进程init(/sbin/init),是所有其它Linux进程的父进程(PID为1). 它(init)的工作就是根据/etc/inittab配置文文件来执行相应的脚本进行系统初始化,例如设置
键盘,字体,装载模块,设置网络等等(下面6,7,8步骤都是相关的详细介绍).
【6】读取/etc/inittab 的内容,对余下的引导步骤进行配置
此步骤中特别重要的内容是: 如何利用/etc/inittab 中的命令行控制语法, 来将系统引导到
指定的运行级别, 从而决定初始化期间还要执行哪些步骤. 实际上此后的所有引导过程, 完全是由檔/etc/inittab 的内容来控制的.具体来说,脚本和工具一般是按照某些约定来运行的,
这些所谓约定, 其实就是定义了几个运行级别, 并指定各个运行级别所需要运行的脚本, 因此在理论上完全可以通过修改/etc/inittab 来运行不同的脚本.
【7】与运行级别无关的系统初始化(sysinit)
一般情况下,无论运行级别如何,都要执行某些系统初始化操作。指定运行系统初始化脚本的