碍于作者水平有限,如有错误请发送邮件到3232336457@qq.com
Linux系统的启动流程涉及多个阶段,包括硬件初始化、引导加载、内核启动以及系统服务启动等过程。整个流程由固件、引导程序、内核以及用户空间初始化程序共同完成。
1 电源加电与 BIOS / UEFI 初始化
当计算机通电后,主板开始供电,CPU开始执行主板固件中的程序。
主板固件主要有两种类型:
- BIOS(Basic Input Output System) 传统的启动固件,存储在主板的 ROM/Flash 芯片中。
- UEFI(Unified Extensible Firmware Interface) 新一代固件接口,功能更加丰富,支持图形界面和更大的磁盘。
主要工作
- POST(Power On Self Test)硬件自检检测关键硬件是否正常,例如:
- CPU
- 内存
- 显卡
- 键盘
- 硬盘
- 初始化硬件设备包括:
- CPU
- 内存控制器
- 硬盘控制器
- 主板芯片组
- 查找可启动设备根据 BIOS/UEFI 设置的启动顺序,例如:
- 硬盘
- U盘
- 光驱
- 网络启动(PXE)
- 加载启动引导程序
- BIOS 模式:读取硬盘 MBR(前512字节)
- UEFI 模式:加载 EFI分区中的
.efi引导文件
2 Boot Loader(启动引导程序)
Boot Loader 是在固件之后执行的操作系统引导程序,负责加载 Linux 内核。
大多数 Linux 发行版使用:
GRUB(GRand Unified Bootloader)
Boot Loader 主要功能
- 提供启动菜单
- 选择操作系统或内核版本
- 传递内核启动参数
- 加载 Linux 内核
- 加载 initramfs
GRUB 工作流程
- GRUB 被加载到内存中执行
- 读取配置文件(
/boot/grub/grub.cfg) - 显示启动菜单
- 加载 Linux 内核(vmlinuz)
- 加载 initramfs
- 将控制权交给 Linux Kernel
3 Linux Kernel 启动
当 GRUB 将内核加载到内存后,控制权交给 Linux Kernel。
内核开始进行系统核心初始化。
主要工作包括:
1 解压内核
Linux 内核文件通常为:
/boot/vmlinuz
它是一个压缩的内核镜像,启动时会先解压到内存中运行。
2 初始化内存管理
包括:
- 建立页表
- 启用虚拟内存
- 初始化内存管理子系统
3 初始化进程调度
内核启动调度器,用于管理进程运行。
4 初始化设备驱动
包括:
- 磁盘驱动
- 文件系统驱动
- 网络驱动
- USB设备驱动
5 挂载临时根文件系统
内核会先挂载:
initramfs
initramfs 是一个 临时根文件系统,用于:
- 加载必要驱动
- 挂载真正的根文件系统
随后系统会切换到真正的根文件系统 /。
4 启动第一个用户空间进程
当内核完成初始化后,会启动第一个用户空间进程:
/sbin/init
在现代 Linux 系统中,该程序通常是:
systemd
其进程号为:
PID = 1
systemd 是所有用户空间进程的父进程。
5 systemd 初始化系统
systemd 负责完成用户空间的系统初始化。
主要任务
- 挂载必要的虚拟文件系统
例如:
/proc
/sys
/dev
- 根据目标(target)启动系统服务
systemd 可以并行启动服务,提高启动速度。
常见服务包括:
- 网络服务
- SSH 服务
- 日志服务
- 数据库服务
- 定时任务
6 进入登录界面
当 systemd 启动完成后,系统进入用户登录阶段。
根据系统类型不同:
服务器环境:
TTY 终端登录
桌面环境:
图形界面登录(GDM / LightDM 等)
总结
Linux 系统启动流程可以概括为以下步骤:
- 计算机加电
- BIOS / UEFI 执行硬件自检(POST)
- 加载 Boot Loader(GRUB)
- GRUB 加载 Linux Kernel 和 initramfs
- Kernel 初始化硬件并挂载根文件系统
- 启动第一个进程 systemd(PID=1)
- systemd 启动系统服务
- 系统进入用户登录界面
整体流程可以简化为:
BIOS/UEFI
↓
BootLoader (GRUB)
↓
Linux Kernel
↓
initramfs
↓
systemd (PID 1)
↓
系统服务
↓
用户登录