Linux系统从开机到登录之前的启动流程
1.开机BIOS自检
接通电源开机,计算机会先加载BIOS信息,因为BIOS中包含了CPU的相关信息,设备启动顺序信息 ,硬盘信息,内存信息,时钟信息,pnp特性等等。
2.MBR引导
MBR是磁盘上第0磁道第一个扇区,即主引导记录,它的大小是512字节,里面存放了预启动信息,分区表信息。
系统找到BIOS所指定的磁盘的MBR后,就会将其复制到0x7c00地址所在的物理内存中。被复制到物理内存就是Boot Loader,具体到我的电脑就是lilo或者grub
3.grub引导菜单
系统读取内存中的grub配置信息(一般为menu.lst或grub.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.d到rc6.d中相应的脚本程序,来完成相应的初始化工作和启动相应的服务
9.执行/etc/rc.d/rc.local
Rc.local就是在一切初始化工作后,linux留给用户进行个性化的地方。
10.执行/bin/login程序,进入登录状态
此时系统已经进入到了等待用户输入username和passwd的时候了,输入帐号就可以登录了。
本文全文手打,参考了如下文章:
http://blog.chinaunix.net/uid-26495963-id-3066282.html