一、系统启动流程 1、POST加电自检
ROM:CMOS(Complementary Metal Oxide Semiconductor),互补金属氧化物半导体,是组成CMOS数字集成电路的基本单元。 通过BIOS程序检测硬件设备是否正常工作。2、BOOT sequence 引导加载次序
按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到的设备。3、BootLoader 引导加载器 (1)作用
提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权转交给kernel。(2)组成
|-- MBR 446bits BootLoader|--分区表 64bits |--标识符(55AA) 2bits(3)grub (a)组成结构 (2)stage2功能: (a)提供菜单、并提交互式接口
e:编辑模式,用于编辑菜单 c:命令模式,交互式接口(b)加载用户选择的内核或操作系统
允许传递参数给内核,可隐藏菜单(c)为菜单提供了保护机制
为编辑菜单进行认证,为启用内核或操作系统进行认证4、Kernel (1)操作系统第一加载根时只读方式挂载,而不是可读可写挂载,避免内核启动时被修改。 (2)自身初始化:探测可识别的硬件设备; (3)加载硬件驱动程序:这里就利用到了我们之间说的initramdisk文件,起到一个桥梁作用。 (4)运行用户空间中的第一个应用程序/sbin/init (5)运行/etc/inittab文件
(a)每一行定义一种action以及与之对应的process
格式:id:runlevel:action:process runlevel运行级别: 0:关闭 1:单用户模式 2:多用户模式,会启动网络功能,不会启动网络文件系统,维护模式 3:多用户模式,正常模式,文本界面 4:预留级别 5:多用户模式,正常模式,图形界面 action类别: wait:切换此级别运行一次 respawn:此process终止,重新启动 initdefault:设定默认运行级别; sysinit:完成系统初始化,此处一般为/etc/rc.d/rc.sysinit文件 默认级别为3或5级别。(6)运行系统初始化脚本
(1)设置主机名 (2)设置欢迎信息 (3)激活udev和selinux (4)挂载/etc/fstab文件中定义的文件系统 (5)检测根文件系统,并以读写方式重新挂载根文件系统 (6)设置系统时钟 (7)激活swap设备 (8)根据/etc/sysctl.conf文件设置内核参数 (9)激活lvm及sofaware raid 设备 (10)加载额外设备的驱动程序 (11)清理操作(7)启动或关闭服务 (a)在/etc/rc.d目录下有指定运行级别启用或关闭的文件。rc0目录下的文件意味着读取/etc/rc.d/rc0.d下面的文件
K*: stop运行次序,数字越小,越先运行;数字越小的服务,通常为依赖到别的服务; S*: start运行次序,数字越小,越先运行;数字越小的服务,通常为被依赖到别的服务; 文件中三个 “-” 分别为 “默认级别,对S开头的文件有效” “S开头文件的运行次序” “K开头的运行次序”。(b)在运行级别/etc/rc.d/rc{2,3,4,5}.d目录下有一个特殊文件S99local,这个文件是脚本。此文件是一个连接文件
/etc/rc.d/rc3.d/S99.local-->/etc/rc.d/rc.local-->/etc/rc.local正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个脚本,而是指向了/etc/rc.d/rc.local脚本中;因此,如果不便或不需要写为服务脚本防止/etc/rc.d/init.d/目录下,且又想开机自动运行的命令,可直接防止与/etc/rc.d/rc.local文件中。
(8)运行/usr/sbin/mingetty启动终端
小结 POST–>boot sequence(BIOS)–>bootloader(MBR)–>Kernel(initramdisk)–>rootfs–>/sbin/init(运行第一个服务进程)–>/etc/init(定义系统初始化文件,并定义系统启动级别)–>/etc/rc.d/sysint (系统初始化脚本,完成系统初始化)–>/etc/rc.d/rc#.d/(开启或关闭需要的服务)–>/etc/mingetty(设置终端)–>完成