Linux系统启动流程
碍于作者水平有限,如有错误请发送邮件到3232336457@qq.com

Linux系统的启动流程涉及多个阶段,包括硬件初始化、引导加载、内核启动以及系统服务启动等过程。整个流程由固件、引导程序、内核以及用户空间初始化程序共同完成。


1 电源加电与 BIOS / UEFI 初始化

当计算机通电后,主板开始供电,CPU开始执行主板固件中的程序。

主板固件主要有两种类型:

  • BIOS(Basic Input Output System) 传统的启动固件,存储在主板的 ROM/Flash 芯片中。
  • UEFI(Unified Extensible Firmware Interface) 新一代固件接口,功能更加丰富,支持图形界面和更大的磁盘。

主要工作

  1. POST(Power On Self Test)硬件自检检测关键硬件是否正常,例如:
    • CPU
    • 内存
    • 显卡
    • 键盘
    • 硬盘
  2. 初始化硬件设备包括:
    • CPU
    • 内存控制器
    • 硬盘控制器
    • 主板芯片组
  3. 查找可启动设备根据 BIOS/UEFI 设置的启动顺序,例如:
    • 硬盘
    • U盘
    • 光驱
    • 网络启动(PXE)
  4. 加载启动引导程序
    • BIOS 模式:读取硬盘 MBR(前512字节)
    • UEFI 模式:加载 EFI分区中的 .efi 引导文件

2 Boot Loader(启动引导程序)

Boot Loader 是在固件之后执行的操作系统引导程序,负责加载 Linux 内核。

大多数 Linux 发行版使用:

GRUB(GRand Unified Bootloader)

Boot Loader 主要功能

  • 提供启动菜单
  • 选择操作系统或内核版本
  • 传递内核启动参数
  • 加载 Linux 内核
  • 加载 initramfs

GRUB 工作流程

  1. GRUB 被加载到内存中执行
  2. 读取配置文件(/boot/grub/grub.cfg
  3. 显示启动菜单
  4. 加载 Linux 内核(vmlinuz)
  5. 加载 initramfs
  6. 将控制权交给 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 负责完成用户空间的系统初始化。

主要任务

  1. 挂载必要的虚拟文件系统

例如:

 /proc
 /sys
 /dev
  1. 根据目标(target)启动系统服务

    systemd 可以并行启动服务,提高启动速度。

    常见服务包括:

    • 网络服务
    • SSH 服务
    • 日志服务
    • 数据库服务
    • 定时任务

    6 进入登录界面

    当 systemd 启动完成后,系统进入用户登录阶段。

    根据系统类型不同:

    服务器环境:

     TTY 终端登录

    桌面环境:

     图形界面登录(GDM / LightDM 等)

    总结

    Linux 系统启动流程可以概括为以下步骤:

    1. 计算机加电
    2. BIOS / UEFI 执行硬件自检(POST)
    3. 加载 Boot Loader(GRUB)
    4. GRUB 加载 Linux Kernel 和 initramfs
    5. Kernel 初始化硬件并挂载根文件系统
    6. 启动第一个进程 systemd(PID=1)
    7. systemd 启动系统服务
    8. 系统进入用户登录界面

    整体流程可以简化为:

    BIOS/UEFI
          ↓
    BootLoader (GRUB)
          ↓
    Linux Kernel
          ↓
    initramfs
          ↓
    systemd (PID 1)
          ↓
    系统服务
          ↓
    用户登录

    感谢你的阅读,朋友
    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇
    下一篇