1. 载入BIOS的硬件信息与自我检测,找到第一个可开机设备;

  2. 读取并执行第一个开机设备中MBR的boot Loader;

    ​ 执行Boot loader主程序

    ​ 主程序载入配置文件(包括文件系统定义与主要配置文件grub.cfg)

  3. 根据boot loader载入Kernel,kernel会开始侦测硬件并载入驱动;

    在这一步Kernel(核心文件为/boot/vmlinuz)接管开机流程,以自己的功能重新侦测一边硬件,不一定使用BIOS侦测到的。之后挂载虚拟文件系统(/boot/initramfs),加载开机过程中所需的重要模块。

  4. 硬件驱动成功后,kennel主动调用systemd程序,并以default.target启动。

    systemd负责准备软件执行的环境,包含系统的主机名称,网络设置,语系处理、文件系统格式等。default.target位于/etc/systemd/system/,其中包含启动的目标态(对应老版本的runlevel)与默认启动服务单元集合。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    cat /etc/systemd/system/default.target
    # This file is part of systemd.
    #
    # systemd is free software; you can redistribute it and/or modify it
    # under the terms of the GNU Lesser General Public License as published by
    # the Free Software Foundation; either version 2.1 of the License, or
    # (at your option) any later version.

    [Unit]
    Description=Multi-User System
    Documentation=man:systemd.special(7)
    Requires=basic.target
    Conflicts=rescue.service rescue.target
    After=basic.target rescue.service rescue.target
    AllowIsolate=yes

    可以使用systemctl list-dependencies查看服务启动的服务,实验机结果如下:

    1
    2
    3
    4
    5
    6
    7
    systemctl list-dependencies
    default.target
    ● ├─auditd.service
    ● ├─chronyd.service
    ● ├─crond.service
    ● ├─dbus.service
    ...
  5. 执行sysinit.target,初始化系统,加载基本的核心驱动,文件系统和驱动等。

  6. 执行basic.target加载更多功能,执行完之后,系统就已经启动完毕。

  7. 执行mutli-user.target载入用户服务,如果目标态为图形界面,则继续加载graphical.target。