Linux系统的启动流程可以分为以下步骤:

  1. BIOS
  2. GRUB
  3. systemd

    引导

    BIOS

    BIOS是固件。开机后,固化在ROM中的BIOS程序就被加载到内存运行。BIOS使用POST程序完成非常基本的硬件检测和初始化,POST检测通过后,会产生一个**INT13H**的BIOS中断,指向某个接入的可引导设备的引导扇区,引导扇区是引导加载器真正的第一阶段。引导加载器在linux上一般是GRUB2(下文简称为GRUB)
    image.png
    BIOS按照设定的CMOS中设定的启动顺序,挨个查看储存设备的前512字节是不是以0x55``0xAA结尾。不是就跳过找下一个设备,是的话就表示这个磁盘可以启动。加载这512字节中的代码然后就完事儿了。
    这512字节中的代码,是各家系统的安装程序写进去的,安装的是linux系统的话,这个里边就是GRUB的代码。

    MBR

    主引导记录(Master Boot Record)存在于可启动磁盘的0磁道0扇区,占用512字节,它主要用来告诉计算机从选定的可启动设备的哪个分区来加载引导加载程序(Boot loader),MBR中存在如下内容:

  4. Boot Loader 占用446字节,存储有操作系统(OS)相关信息,如操作系统名称,操作系统内核位置等,它的主要功能是加载内核到内存中运行。

  5. Partition Table 分区表,占用64字节,每个主分区占用16字节
  6. 分区表有效性标记占用2字节,标记内容是:**0x55AA**。BIOS读到这个这个标志位,校验没有问题那就从你这个设备启动,没读到就按照启动顺序找下一个设备

    GPT

GRUB2

GRand Unified BootLoader,Version 2(第二版大一统引导装载程序,是linux上功能强大的bootloader。作用是查找操作系统内核并加载到内存的程序,一般都把GRUB2称作GRUB,GURB可以通过/boot/grub/grub.conf进行配置。
GRUB可以通过grub-cumtomizer等程序来定制颜色、背景等等。(但是我自己尝试的时候遇到了不生效的问题)

内核

内核文件以自解压的压缩格式存储,它与一个初始化的内存映像和存储设备映射表都存储与/boot目录下。
在grub界面选定的内核加载到内存后,在进行工作之前,内存文件首先必须从压缩格式解压自身。当内核自解压完成,则加载systemd进程(老式System V系统init进程的替代品)并转移控制权到systemd。
引导过程到这里结束,此时linux内核和systemd都处于运行状态。但是由于没有其他任何程序在执行,因此还不能执行用户有关的功能性任务,

启动过程

systemd

systemd是所有进程的父进程,负责将linux主机带到一个用户可操作状态(可以执行功能任务)。systemd的功能较init更加丰富,包括挂载文件系统,开启和管理Linux主机的系统服务。
关于systemd具体的功能开坑之后再学习
systemd挂载在 /etc/fstab中配置的文件系统,包括swap或分区

梳理

  1. 开始首先是BIOS先执行POST程序,POST通过之后会根据引导顺序挨个查找可启动设备找到可启动设备后从设备的一个扇区中查找MBR/GPT。
  2. MBR/GPT中前446字节是Boot Loader,Boot Loader程序一般是GRUB2。GRUB会加载内核到内存中。
  3. 内核自解压,拉起systemd

    参考