开机启动流程

1 开机启动电源(加点自检 POST)

POST:硬件检测,读取ROM(例如:CMOS)芯片中的BIOS程序(basic input and output system)。其实,能够被CPU寻址的物理储存空间由两个部分组成:ROM(只读内存) + RAM(随机内存)。那么BIOS程序就能够识别磁盘设备,去读取MBR中的BootLoader

检查电脑硬件的问题,对于严重的问题则停机,对于故障则给出提示。

2 完成这个阶段之后,然后进入下一个阶段BIOS( 首先BIOS下面有ROM芯片(,是用于计算机开机过程中各种硬件设备的初始化和检测的芯片)BIOS会对计算机的硬件进行检查,并且设置一个启动顺序,这里以启动流程为例,第一个启动的设备是硬盘设备)

3 启动硬盘 (BIOS程序会读取硬盘中的MBR中的grub1阶段的程序,这个程序就是bootloader程序,并且读取MBR之后的第一个扇区   512字节  读取前446bit   如果是说明这个引导有效 (grub1.5阶段程序),让grub1阶段能够识别grub2阶段所在的分区上的文件系统

注释:BOOT Sequence:既然可以识别磁盘设备、网卡设备、光驱设备,然后在选择的引导次序,可以是光盘启动、硬盘启动、网卡启动、U盘启动等。选择一个有引导程序的设备,而这个引导设备就是BootLoader,叫做引导加载器。这个BootLoader会给用户提供一个图形化窗口,让用户选择不同的系统的内核。只要用户选择了内核,就会将内核加载到RAM中,然后解压、展开,此时内核就运行在内存了。而对于有MBR分区表的硬盘来说,这个BootLoader程序就在MBR。MBR位于磁盘的0扇区,因为每一个扇区是512字节,那么前446个字节是BootLoader,后64个字节是分区表,最后两个字节是55AA,表示MBR有效。因为MBR表中的存储空间非常小,因此grub引导程序将其分为了两段,第一段是就在BootLoader中,而第二段程序在磁盘上,因此,对于grub而言,BootLoader中的程序是grub程序的第一阶段,grub的第一阶段是用来加载grub的第二阶段,grub的第二阶段位于/boot/grub目录下,由第二阶段的程序再去加载内核。

4 grub2在硬盘的/boot/grub目录下,在读取到grub2阶段时,grub2就能够加载kernel文件(以vmlinuz开头的文件)到内存,并且展开。由于内核中没有驱动根文件系统所在分区的驱动,需要借助于initramfs.XXX.img文件(虚拟文件系统),让这个虚拟文件系统挂载到内核成为根文件系统,虚拟文件系统中有真正的根文件系统所在分区的驱动,能够识别根文件系统所在的分区,这样就使得内核可以通过只读方式挂载真正的根文件系统,并且卸载虚拟文件系统。那么现在就完成了内核空间的初始化工作(因为内存无法识别到根分区,没有驱动,但是可以驱动boot分区,initramfs虚拟文件系统下面有很多像根分区的文件,可以当做根文件系统,微型的linux操作系统,下面有一个真正的驱动可以找到真正的根分区。)

5 chroot 根切换 无法启动,内存太小,这个时候我们要卸载虚拟的文件系统,因为在boot下面的initramfs虚拟文件系统里面有一个真正的根文件系统驱动,识别到真正的根分区,这时候卸载虚拟文件根分区,挂载真正的根。

6 当真正的根文件系统挂载到内核上面的时候,有用户空间和内核空间,然后内核会呼叫 /sbin/init初始化程序首先会读取其配置文件/etc/inittab,将系统在默认运行级别下启动,并且读取/etc/rc.d/rc#.d/目录下的文件,以K开头的脚本文件停止对应的服务,以S开头的脚本文件开启对应的服务。

7 在所有的自启动服务启动运行之后,会执行/etc/rc.d/rc.sysinit程序对系统空间进行一次初始化,启动一个登入终端让用户登入。

对于发的内容,请大神指点。
原文地址:https://www.cnblogs.com/gongll/p/7478048.html