Linux启动流程
2021年3月15日
载入BIOS的硬件信息与自我检测,找到第一个可开机设备;
读取并执行第一个开机设备中MBR的boot Loader;
执行Boot loader主程序
主程序载入配置文件(包括文件系统定义与主要配置文件grub.cfg)
根据boot loader载入Kernel,kernel会开始侦测硬件并载入驱动;
在这一步Kernel(核心文件为/boot/vmlinuz)接管开机流程,以自己的功能重新侦测一边硬件,不一定使用BIOS侦测到的。之后挂载虚拟文件系统(/boot/initramfs),加载开机过程中所需的重要模块。
硬件驱动成功后,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
15cat /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
7systemctl list-dependencies
default.target
● ├─auditd.service
● ├─chronyd.service
● ├─crond.service
● ├─dbus.service
...执行sysinit.target,初始化系统,加载基本的核心驱动,文件系统和驱动等。
执行basic.target加载更多功能,执行完之后,系统就已经启动完毕。
执行mutli-user.target载入用户服务,如果目标态为图形界面,则继续加载graphical.target。