Linux系统的开机过程是一个复杂而精密的流程,涉及硬件初始化、系统引导、内核加载、服务启动及用户空间构建等多个阶段,这一过程从按下电源按钮开始,直到最终呈现登录界面,每个环节都紧密衔接,共同确保系统能够稳定、高效地启动。

BIOS/UEFI初始化:硬件自检与引导设备选择
开机第一步是固件程序(BIOS或UEFI)的执行,BIOS(基本输入输出系统)是固化在主板ROM中的传统固件,而UEFI(统一可扩展固件接口)则是现代系统的升级版,支持更快的启动速度和更大的硬盘分区。
固件启动后,首先会进行POST(加电自检),检测CPU、内存、硬盘等核心硬件是否正常工作,若自检通过,固件会根据预设的启动顺序(如硬盘、U盘、网络等)寻找可引导设备,对于Linux系统,固件会读取引导设备(如硬盘的MBR分区或GPT分区的EFI系统分区)中的引导程序,并将控制权交予该程序。
引导程序加载:GRUB的核心作用
引导程序是Linux开机过程中的“指挥官”,最常用的是GRand Unified Bootloader(GRUB),当固件将控制权传递给GRUB后,GRUB会完成以下任务:
- 加载配置文件:读取
/boot/grub/grub.cfg文件,该文件定义了系统启动菜单项(如不同内核版本、其他操作系统等)。 - 选择启动项:用户可通过菜单选择要启动的内核版本(如Linux 5.15或6.2),若超时未操作,则默认启动首个选项。
- 加载内核模块:GRUB会将选中的内核文件(如
vmlinuz)和初始内存盘(initrd或initramfs)加载到内存中。initrd包含驱动模块和必要工具,用于挂载根文件系统,尤其对RAID、LVM或SATA硬盘等需要额外驱动的场景至关重要。
内核启动:初始化硬件与启动PID 1
内核被加载到内存后,会开始执行初始化流程,这是Linux开机的核心阶段:

- 解压与运行:内核首先进行自我解压(若压缩过),然后跳转到入口函数
start_kernel(),启动C语言环境。 - 硬件初始化:内核会检测并初始化CPU、内存、中断控制器、磁盘控制器等硬件,加载对应驱动程序(如通过
initrd中的驱动识别根文件系统)。 - 挂载根文件系统:内核通过
initrd中的工具临时挂载根文件系统(),此时根文件系统可能位于物理分区、LVM或LUKS加密卷上。 - 启动第一个进程:内核启动系统的第一个进程(PID 1),通常是
systemd或传统的init程序,现代Linux发行版普遍采用systemd,它负责后续所有服务的启动和管理。
系统初始化:systemd接管与服务并行启动
systemd作为系统的初始化系统,通过目标单元(.target)和服务单元(.service)管理开机流程,其核心优势在于并行启动服务,显著提升开机速度:
- 基本目标切换:
systemd首先切换到default.target(默认目标),该目标会触发一系列依赖服务。 - 关键服务启动:按依赖关系启动核心服务,如挂载文件系统(
local-fs.target)、启动网络(network.target)、加载设备(sysroot.mount)等。 - 多用户模式切换:完成后,系统进入多用户模式(
multi-user.target),提供命令行界面;若启用图形界面,则进一步启动graphical.target,加载显示管理器(如GDM、SDDM)和桌面环境(如GNOME、KDE)。 - 开机启动项管理:
systemd通过systemctl enable命令管理开机自启服务,对应服务文件位于/etc/systemd/system/或/usr/lib/systemd/system/目录下。
用户空间登录:完成启动流程
当所有核心服务启动完成后,系统会显示登录界面(图形界面或命令行提示符),用户输入用户名和密码后,登录程序(如bash、zsh或图形登录器)会启动用户shell,加载用户环境变量(如.bashrc),最终呈现完整的交互界面,Linux开机过程正式结束,用户可开始操作应用程序。
Linux开机的层次化设计
Linux开机过程体现了“硬件-引导-内核-用户空间”的层次化设计:BIOS/UEFI负责硬件基础,引导程序加载内核,内核初始化硬件并启动第一个进程,systemd通过并行服务管理提升效率,最终交付用户可用的系统环境,这一流程的模块化设计不仅保证了稳定性,也为系统定制和优化提供了灵活的接口,是Linux作为开源操作系统核心优势的体现。



















