linux操作系统-系统启动流程

系统地梳理一下:

BIOS、Bootloader(如 GRUB)、Linux 内核之间的关系,以及它们在整个启动流程中是如何协同工作的。


🧱 一、基本概念与角色划分

模块全称/含义角色
BIOSBasic Input Output System主板固件程序,负责硬件初始化和引导操作系统
UEFIUnified Extensible Firmware InterfaceBIOS 的现代替代方案,功能更强大
Bootloader引导加载程序(如 GRUB2)负责加载操作系统内核到内存并运行
Linux KernelLinux 内核操作系统核心,管理硬件资源和进程等
initramfs / initrdInitial RAM Disk临时根文件系统,用于在挂载真正的根文件系统前加载驱动和模块

🔁 二、开机启动流程详解

下面是一个典型的 PC 启动流程(以 UEFI + GRUB2 + Linux 为例)

1️⃣ BIOS / UEFI 阶段

  • 当你按下电源键后,CPU 开始执行固化在主板 ROM 中的代码(即 BIOS 或 UEFI 固件)。
  • BIOS/UEFI 会进行:
    • 加电自检(POST):检测硬件是否正常;
    • 查找可启动设备(硬盘、U盘、光驱等)
    • 读取启动设备的第一个扇区(MBR)或 UEFI 分区中的 Bootloader 信息
    • 跳转到 Bootloader 执行入口地址

2️⃣ Bootloader 阶段(如 GRUB)

GRUB(Grand Unified Bootloader)是 Linux 系统中最常用的 Bootloader。它分为两个阶段(或三个阶段):

✅ GRUB Stage 1(boot.img)
  • 位于 MBR 或 EFI 分区;
  • 作用是加载 Stage 2。
✅ GRUB Stage 2(core.img)
  • 加载 /boot/grub 下的配置文件和模块;
  • 显示启动菜单(如果你有多个系统或内核版本);
  • 用户可以选择要启动的 Linux 内核(vmlinuz)和对应的 initramfs 文件。
✅ GRUB 加载的内容
  • vmlinuz:编译后的 Linux 内核镜像(通常是压缩过的);
  • initramfs:初始 RAM 磁盘,包含必要的驱动和脚本,用来挂载真正的根文件系统;
  • 传递内核参数(如 root=/dev/sda1roquiet 等);

3️⃣ Linux 内核启动阶段

GRUB 将控制权交给 Linux 内核(vmlinuz),内核开始执行:

🔹 解压内核
  • 如果是压缩内核(zImage / bzImage),先解压。
🔹 初始化硬件
  • 初始化 CPU、内存、中断控制器、时钟、PCI 总线等基础硬件。
🔹 挂载 initramfs
  • initramfs 是一个临时的根文件系统,用于加载必要的驱动(比如 SATA、RAID、LVM、加密磁盘等);
  • 一旦驱动加载完成,就会尝试挂载真正的根文件系统(rootfs)。
🔹 启动第一个进程:initsystemd
  • 内核启动完成后,会执行 /sbin/init(传统方式)或 /usr/lib/systemd/systemd(Systemd 系统);
  • 这个进程 PID=1,是所有后续进程的父进程。

4️⃣ 用户空间启动阶段(用户登录界面)

  • systemd 或 SysVinit 系统开始启动服务(网络、图形界面、日志、SSH 等);
  • 最终显示登录提示符或图形登录界面。

📦 三、结合内核编译过程来看

你在手动编译内核时,通常会执行以下命令:

make menuconfig    # 配置内核选项
make -j$(nproc)    # 编译整个内核
make modules       # 编译模块
make dtbs          # 编译设备树(嵌入式用)
make bzImage       # 编译内核镜像(即 vmlinuz)

这些步骤生成的关键文件包括:

文件路径说明
arch/x86/boot/bzImagevmlinuz内核镜像文件,会被 GRUB 加载
System.map核心符号表,调试用
.config当前使用的配置文件
Module.symvers模块版本信息
modules 目录下的 .ko 文件内核模块,需要安装到 /lib/modules/<version>/
initramfs通常由 dracut, mkinitcpio, update-initramfs 等工具生成

🔄 四、完整流程图(文字版)

[电源打开]
     ↓
[BIOS/UEFI 启动]
     ↓
[加载 Bootloader(GRUB)]
     ↓
[GRUB 加载 vmlinuz + initramfs]
     ↓
[vmlinuz 解压并启动 → 挂载 initramfs]
     ↓
[加载驱动 → 挂载真正的 rootfs]
     ↓
[启动 systemd 或 init → 初始化系统服务]
     ↓
[进入用户登录界面]

🎯 五、关键点总结

概念作用
BIOS/UEFI硬件初始化 + 调用 Bootloader
GRUB加载 Linux 内核镜像(bzImage)和 initramfs
Linux 内核(vmlinuz)真正的操作系统核心,负责硬件管理和进程调度
initramfs临时根文件系统,帮助挂载真实根文件系统
systemd / init第一个用户空间进程,启动服务和登录环境

💡 示例:手动添加新内核到 GRUB

当你自己编译了一个新的内核,你需要:

  1. 安装模块:

    sudo make modules_install dtbs_install
    
  2. 安装内核和设备树:

    sudo cp arch/x86/boot/bzImage /boot/vmlinuz-4.19.90-custom
    sudo cp arch/x86/boot/dts/*.dtb /boot/
    
  3. 更新 initramfs(例如使用 dracut 或 update-initramfs):

    sudo update-initramfs -c -k 4.19.90-custom
    
  4. 更新 GRUB 配置:

    sudo update-grub
    

这样重启后就能在 GRUB 菜单中看到你的新内核了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值