Linux启动流程一览图:
——》加载BIOS的硬件信息与进行自我测试POST(Power on Self Test),并依据设置取得第一个可启动的设备
——》读取并执行第一个启动设备内MBR的Boot Loader程序(eg. grub, spfdisk等等)
——》Boot Loader加载Kernel,Kernel会开始检测硬件与加载驱动程序
——》在硬件驱动加载成功后,Kernel会主动调用init进程(1#进程)
——》init进程根据其配置文件/etc/inittab来进行各种初始化的操作,其主要的操作有,
——》init取得run level信息
——》init执行shell scripts文件/etc/rc.d/rc.sysinit来准备好系统环境
——》init启动对应run level等级对应的各个服务,例如runlevel=3,那么启动/etc/rc.d/rc3.d目录下的各种服务了。值得注意的是,/etc/rc.d/rc*.d目录下有个S99local -> ../rc.local的东东(亦就是/etc/rc.d/rc.local),这个就是很重要的用来配置用户自定义开机启动的服务。注意这个rc.local是runlevel=2,3,4,5共用的
——》init执行终端机模拟程序mingetty来启动login进程(若runlevel=5,还会启动X Windows)
Remarks:
(1)要将配置文件与脚本文件区别开来
(2)linux系统中有一个/etc/rc.d/init.d及其软链/etc/init.d目录中,存放了系统中很多系统服务启停shell脚本,通过这个shell脚本,我们可以启动、停止等服务。在/etc/rc.d/rc*.d下面的软链文件都是关联到/etc/rc.d/init.d目录中的文件。
(3)上面的init步骤中,是使用sysvinit作为初始化init系统时的过程,如果使用systemd就不是这个过程了哦