首页

Linux系统启动过程介绍(1)

概述

对操作系统的启动过程一直是比较模糊,想想大概经历检查硬件,加载操作系统,加载

用户环境等几个过程,但实际上要复杂一些。毕竟我们只是了解和掌握启动过程,而不是去

对启动过程进行设计和编码,所以下面的介绍相对比较简单,也点到为止。如果有想深入学

习的同学,可以针对某个或某几个部分刨根问题,编码调试。

下面以Debian Linux的启动加载为例,简单介绍一下操作系统的启动。

经历的过程如下:

开机自检(POST)---->执行基本输入输出(BIOS)---->加载系统分区表数据(MBR开

始的512字节)---->加载引导程序(grub之类)---->加载Linux内核----->系统环境初始化-----

------->用户环境初始化

开机自检(POST)

这部分没有什么多余的东西,计算机连上电源用户按下启动按钮后,计算机自己检测CPU,

内存,硬盘等硬件设备是否处在可用状态。如果可以使用,继续下一步的工作,即将运行权

交给BIOS,否则利用峰鸣器报警。这也是修理电脑的专家根据蜂鸣器报警声判断系统那里有

问题的依据。

执行基本输入输出(BIOS)

BIOS(Basic Input Output System)基本输入输出程序。该程序完成最基本的硬件位置

处理,设置硬中断等。然后将MBR最开始的程序调入到CPU上运行,运行权进而交给MBR。

MBR加载

MBR(Master boot record),是启动磁盘最开始的512字节,这里包含了分区信息和一

个引导程序。分区信息记载了磁盘的分区情况,引导程序即是我们比较熟悉的Grub,LiLo等,

用来指引从什么位置加载内核程序。

引导程序加载Grub(GRand Unified Bootloader)

Grub在配置的时候指定在什么分区的什么位置加载内核,Grub2以前的版本中grub都是

有两个或者多个加载过程的,会去加载stage1,stage1_5,stage2文件,这些文件都在

/boot/grub目录下。之所以会有这些文件,是因为在加载的早期,一次只能加载512字节,太

多文件的话,只能分批加载。

现在,在Grub2中已经找不到这个文件了,加载和引导的过程会另外介绍。

内核加载过程

由于在Grub中记录了内核的具体位置,在Grub运行完毕后,就开始加载内核,运行权限随

之交给内核。

内核接过运行权限,开始探测系统的硬件,加载硬件对应的驱动(有些以模块运行的驱动,

是需要挂载文件系统才能加载),然后挂载文件系统,从文件系统中读取数据。

这个过程的如下:

内核探测硬件------>加载驱动(initrd)------>挂载根文件系统------>rootfs(/sbin/init)

系统初始化工作

最后运行权交给了/sbin/init程序,开始跑初始化的脚本内容。(待续)