详细讲解Linux启动流程及启动用到的配置文件及脚本
《一》:详解Linux启动流程及需要使用到的配置文件
POST加电自检-->BIOS(Boot Sequence)->MBR(bootloader)->Kernel->initrd->rootfs(/sbin/init)
下面对每个启动流程做详细解释:
POST(加电自检)
计算机本身不执行任何程序,所以系统必须要完成自举的过程,在CPU的控制下,将RAM芯片中的某个程序映射到ROM地址空间,并执其中的指令完成系统硬件健康状况检查,例如存储设备、网卡、CPU、声卡等其他硬件设备是否完好。当检查完成后,所有硬件或基本硬件、核心硬件没有问题,则下一个启动流程->BIOS
BIOS(Boot Sequence)
按照BIOS所设定的系统启动流程,根据引导次序(Boot Sequence)自上而下的寻找对应存储设备上操作系统的MBR,如果MBR存在,则会读取MBR中的bootloader
MBR(bootloader)
会根据MBR所指引的活动分区上寻找系统分区中的 bootloader,bootloader称为是一段程序,占据446字节。在bootloader当中配置了所要引导操作系统的内核所在的位置,因此BIOS被载入内存以后,当它实现将控制权限转交给bootloader以后,bootloader接收整个系统的控制权限,而后根据用户的选择去读取相应操作系统中的内核,并将内核装载入内存的某个空间位置,解压缩,这时kernel就可以在内存中活动,并根据kernel本身功能在内存当中探索硬件并加载硬件驱动程序并完成内核初始化,bootloader会将控制权限转交给内核。
Kernel(初始化)
我们知道kernel是完成探索硬件及加载硬件驱动程序,并以读写的方式挂载根文件系统。那么这里就出现一个比较诡异的问题,是什么问题呢?
我们又知道,要想访问真正的根文件系统(rootfs)的话,就必须加载根文件系统中的设备,这时根文件系统又没有挂载,要挂载根文件系统又得加载根文件系统中的驱动程序,哪怎么办呢?这是就用到了initrd文件了。
在来说下kernel初始化所要工作的内容做下简单总结:
探测硬件->加载驱动(initrd)->挂载根文件系统->rootfs(/sbin/init)
initrd功能介绍
其实说白了initrd就是一个虚拟的文件系统,里面有/、lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目录,其实你会发现里面的目录有点像真的/对吧,所以我们称之为虚拟的根文件系统,作用就是将kernel和真的根文件系统建立关联关系,让kernel去initrd中加载根文件系统所需要的驱动程序,并以读写的方式挂载根文件系统,并让执行用户当中第一个进程init。
/sbin/init(/etc/inittab)
/sbin/init启动会用到/etc/inittab所定义的条目,如:默认登陆级别id:3:initdefault:(这里就是默认启动3级别)