Linux系统从开机到登录之前的启动流程

1.开机BIOS自检

接通电源开机,计算机会先加载BIOS信息,因为BIOS中包含了CPU的相关信息,设备启动顺序信息 ,硬盘信息,内存信息,时钟信息,pnp特性等等。

 

2.MBR引导

MBR是磁盘上第0磁道第一个扇区,即主引导记录,它的大小是512字节,里面存放了预启动信息,分区表信息。

系统找到BIOS所指定的磁盘的MBR后,就会将其复制到0x7c00地址所在的物理内存中。被复制到物理内存就是Boot  Loader,具体到我的电脑就是lilo或者grub

 

3.grub引导菜单

系统读取内存中的grub配置信息(一般为menu.lstgrub.lst),并依照此配置信息来启动不同的操作系统

 

4.加载内核kernel

根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数和初始化各种设备,完成linux核心环境的建立。

 

5.启动init进程

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

其实/etc/inittab文件最主要的作业就是设定linux的运行级别

 

6.读取inittab文件,执行rc.sysinit,rc等脚本

在设定了运行级别后,linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinin脚本程序,它的工作非常多,包括设定PATH,设定网络配置(/etc/sysconfig/network),启动swap分区,设定/proc等等。(/etc/rc.d/rc.sysinit文件中的脚本非常多)

 

7.启动内核模块

具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块

 

8.执行不同运行级别的脚本程序

根据运行级别的不同,系统会运行rc0.drc6.d中相应的脚本程序,来完成相应的初始化工作和启动相应的服务

 

9.执行/etc/rc.d/rc.local

Rc.local就是在一切初始化工作后,linux留给用户进行个性化的地方。

 

10.执行/bin/login程序,进入登录状态

此时系统已经进入到了等待用户输入usernamepasswd的时候了,输入帐号就可以登录了。

 

 

本文全文手打,参考了如下文章:

http://blog.chinaunix.net/uid-26495963-id-3066282.html