Skip to content

Linux 启动过程

Linux 启动并不复杂,可以分为几个主要步骤。以 Ubuntu 为例。

1. BIOS / UEFI 启动

计算机开机后,BIOS 或 UEFI 会进行硬件自检,检查并加载系统。在这之后,操作系统接管控制权,继续加载内核。

2. 内核引导

在 Ubuntu 系统中,内核存储在 /boot 目录下。启动时,内核从引导分区加载到内存,接管硬件控制。此时,操作系统准备开始启动。

3. init 进程

内核加载完成后,控制权转交给 init 进程,它是系统中所有其他进程的起点。Ubuntu 使用 systemd 作为初始化系统,因此 init 进程由 systemd 替代,成为 PID 1 进程。systemd 会启动所有需要的服务和守护进程。

4. 系统初始化

systemd 负责读取 /etc/systemd/system//lib/systemd/system/ 目录下的单元文件(.service 文件),并根据这些文件并行启动系统服务。常见的初始化任务包括:

  • 激活交换分区(swap)。
  • 检查文件系统。
  • 启动硬件驱动程序。
  • 启动网络服务、日志服务等。

5. 运行级别(Targets)

Ubuntu 使用 systemd 的目标(targets)来替代传统的运行级别。常见的目标包括:

bash
# 在 Ubuntu 中,init 0-6 传统运行级别被 systemd targets取代。
systemctl isolate multi-user.target 进入多用户模式。
systemctl isolate graphical.target 进入图形界面模式。
systemctl reboot 重启系统。
systemctl poweroff 关闭系统。

6. 登录终端

当系统初始化完成后,Ubuntu 会启动一个或多个终端。对于图形界面模式,用户会看到图形化登录界面;对于命令行模式,用户会看到一个文本登录界面。

在命令行模式下,mingetty 程序会提供 6 个终端,允许用户登录:

  • tty1tty6
  • 用户可以使用 Ctrl + Alt + F1~F6 切换到不同的终端。
+------------------+
|   Power On      |
|  BIOS/UEFI      |
|  Check Hardware |
+--------+---------+
         |
         v
+------------------+
| Boot Loader     |
|    GRUB         |
| Load Kernel     |
+--------+---------+
         |
         v
+------------------+
|    Kernel       |
|   Ubuntu Kernel |
| Start Kernel    |
+--------+---------+
         |
         v
+------------------+
|     Init        |
|    systemd      |
| Manage Services |
+--------+---------+
         |
         v
+------------------+
|  Runlevel       |
| multi-user      |
| graphical       |
| Load Services   |
+--------+---------+
         |
         v
+------------------+
|    Login        |
| User Login      |
| Get User Input  |
+------------------+