收集了几篇
https://blog.csdn.net/qq_34834193/article/details/53236855
https://www.cnblogs.com/codecc/p/boot.html
https://www.linuxidc.com/Linux/2017-08/146494.htm
BIOS芯片
步骤1:上电自检POST(Power-on self test),主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。例如,最常见的是内存松动的情况,BIOS自检阶段会报错,系统就无法启动起来;
步骤2:步骤1成功后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节),然后执行里面的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行。
控制权移交到MBR部分
MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。
在512字节的MBR中,主引导程序占用了其中的446个字节(boot loader(如grub或lilo)),另外的64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
通过boot loader grub,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
将硬盘0头0道2扇区读入内存。
initrd加载到内存里,执行initrd中的init脚本,同时运行/sbin/init程序,执行系统的1号进程。此后将系统的控制权全部交给/sbin/init进程。
/etc/inittab文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等。
当/etc/rc.d/rc.sysinit执行完后,系统就可以顺利工作了,只是还需要启动系统所需要的各种服务,这样主机才可以提供相关的网络和主机功能,因此便会执行/etc/rc.d/rc脚本。执行用户自定义引导程序/etc/rc.d/rc.local。
linux会启动终端或X-Window来等待用户登录。tty1,tty2,tty3…这表示在运行等级1,2,3,4的时候,都会执行”/usr/sbin/getty”,而且执行了6个,所以linux会有6个纯文本终端。
图1-1:系统启动流程