当前位置: 首页 > news >正文

Linux 系统启动过程详解

概述

Linux 的启动过程就像一辆老式汽车从熄火到轰鸣前进:从“钥匙转动”(开机)到“引擎点火”(内核加载),再到“油门踩下”(系统就绪)。整个过程高效、有序,通常只需几秒到几十秒。
Linux的启动不是魔法,而是模块化的设计:每个环节独立、可调试。理解这个过程,能帮助我们更好地诊断启动问题、优化系统性能,甚至在定制系统时游刃有余。这意味着如果遇到“开机黑屏”或“引导失败”,我们能快速定位问题。比如,优化 GRUB 可以加速 20% 的启动时间;精简 systemd 服务,能让服务器停止运行不必要的服务。

Linux 的启动过程通常分为几个关键阶段,从硬件初始化到用户空间的运行。需要注意的是,不同的 Linux 发行版(如 Ubuntu、CentOS)可能在细节上略有差异,但核心流程是相似的,尤其是现代系统多采用 systemd 作为初始化系统。
linux启动过程图1 linux系统启动过程 来自bytebytego.com

  1. 当我们打开电源时,BIOS(基本输入/输出系统)或 UEFI(统一可扩展固件接口)固件会从非易失性存储器加载并执行POST(开机自检)。
  2. BIOS/UEFI 检测连接到系统的设备,包括 CPU、RAM 和存储。
  3. 选择要从中启动作系统的启动设备。这可以是硬盘驱动器、网络服务器或 CD ROM。
  4. BIOS/UEFI 运行引导加载程序(GRUB),它提供了一个菜单来选择作系统或内核功能。
  5. 内核准备就绪后,我们现在切换到用户空间。内核启动 systemd作为第一个用户空间进程,它管理进程和服务,探测所有剩余硬件,挂载文件系统,并运行桌面环境。
  6. systemd激活默认值。默认情况下,系统启动时目标单元。其他分析单元也会执行。
  7. 系统运行一组启动脚本并配置环境。
  8. 用户将看到一个登录窗口。系统现已准备就绪。

1. BIOS/UEFI 阶段:硬件初始化

包含图1中的阶段①、阶段②和阶段③
一切从按下电源按钮**(Power On)开始。当计算机通电后,主板上的固件(Firmware)**会首先运行,固件会从非易失性存储器加载并执行 POST(Power On Self Test,开机自检 )。这取决于你的系统是使用传统的 BIOS(Basic Input/Output System)还是现代的 UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)。

  • BIOS 的作用:BIOS 加载自非易失性内存(如 ROM),它会执行 POST(Power-On Self-Test)自检,检查硬件是否正常,包括 CPU、内存、硬盘等。然后,它会搜索可引导设备(如硬盘、USB),并加载第一个扇区(通常是 MBR - Master Boot Record)。
  • UEFI 的优势:UEFI 是 BIOS 的升级版,支持更大的硬盘(超过 2TB)、更快的启动速度和图形界面。它使用 EFI 系统分区(ESP)来存储引导程序,而不是 MBR。UEFI 还会验证引导文件的签名,以增强安全性。

图1中阶段1和阶段2h是硬件层面的,Linux 系统本身还未介入。如果这里出问题,你可能看到黑屏或硬件错误提示。

2. Bootloader 阶段:引导加载器

包含图1中的阶段④
一旦 BIOS/UEFI 找到引导设备,它会将控制权交给 Bootloader。常见的 Bootloader 是 GRUB(Grand Unified Bootloader),尤其是 GRUB2。
GRUB 会读取配置文件(如 /etc/grub2.cfg 或 /boot/grub/grub.cfg),显示引导菜单,让用户选择内核版本或恢复模式。
然后,GRUB 加载 Linux 内核(通常是 /boot/vmlinuz-*)和初始 RAM 磁盘(initrd 或 initramfs),这是一个临时文件系统,用于加载必要的驱动(如磁盘驱动),以便内核能访问根文件系统。

Bootloader 是连接硬件和操作系统的桥梁。如果 GRUB 配置错误,系统可能无法启动。

3. Kernel 阶段:内核加载与初始化

包含图1中的阶段④
内核是 Linux 的核心,它被加载到内存中后开始执行。

内核首先解压自己,初始化硬件(如 CPU、内存管理)、加载模块,并挂载 initramfs。
然后,它会切换到根文件系统(rootfs),挂载 /sys、/proc 等虚拟文件系统,并启动第一个用户空间进程(PID 1)。

在这个阶段,你可能会看到内核消息滚动在屏幕上(如 dmesg 输出)。内核版本可以通过 uname -r 查看。

4. Init 阶段:系统初始化

包含图1中的阶段⑤⑥
现代 Linux 发行版多使用 systemd 作为 init 系统(传统的是 SysVinit 或 Upstart)。
Init 进程(/sbin/init 或 /lib/systemd/systemd)读取配置文件(如 /etc/inittab 或 systemd 的 unit 文件),并根据 runlevel(运行级别)或 target(目标)启动服务。
Runlevel 是 SysVinit 的概念,从 0(关机)到 6(重启),但在 systemd 中被 targets 取代,如 multi-user.target(多用户模式)或 graphical.target(图形界面)。
Systemd 会并行启动服务,如网络、文件系统检查、用户登录等,提高启动效率。它还会运行启动脚本,如 /etc/rc.d/* 或 systemd 的服务文件。

如果使用图形界面,这里会启动显示管理器(如 GDM、LightDM),引导到登录界面。

5. 用户空间:系统就绪

包含图1中的阶段⑦⑧
最后,系统进入用户空间,用户可以登录。Shell(如 bash)会加载配置文件(如 /etc/profile、~/.bashrc),设置环境变量。此时,系统完全可用,你可以运行命令、启动应用等。

http://www.dtcms.com/a/465967.html

相关文章:

  • 死信队列vs延迟队列
  • 给实体店老板做的网站怎么网站排名seo
  • 商务网站建设毕业设计成都网站建设公司排行
  • 基于体素密度的几何重要性剔除(Voxel Density Culling)
  • 卷积神经网络详解
  • Redission
  • 前端框架深度解析:Vue 从入门到实战,掌握渐进式开发核心
  • 从暴力到滑动窗口全解析——力扣8. 字符串转换整数 (atoi)
  • 迅为RK3562开发板Android 系统动态替换开机logo的实现-替换logo
  • 基于Springboot + vue3实现的校园闲置物品交易平台
  • 学校网站 制作wordpress图片时间
  • MySQL分区分表实现方法详解
  • 缠论工具czsc快速使用入门(二)
  • Android 14 Input 事件派发机制深度剖析
  • 苏州做网站外包的公司有哪些许昌做网站团队
  • android 屏幕适配
  • ESP32开发:从Wi-Fi连接到MQTT通信
  • Linux工作队列workqueue的实现
  • 模板建站和开发网站区别wordpress 页面瀑布流
  • [C# starter-kit] 身份验证与授权 Identity JWT
  • C#通讯关键类的API
  • 网站开发说明书天元建设集团有限公司申请破产了吗
  • 分布式单例模式在微服务架构中的关键作用与实践
  • 网站footer模板建设银行甘肃省行网站
  • 网站建设和电商区别wordpress创建角色
  • 网站开发软件公司网站建设运营公司
  • Java开发环境搭建及基础练习
  • 【三维重建】即插即用的3DGS的PDE优化:高质量渲染和重建
  • TDS:连接器漫谈之可信空间中的沉默契约与隐秘通道
  • AI Compass前沿速览:DeepSeek-V3.2、Sora 2、Imagine v0.9、LONGLIVE–英伟达、xLLM、OpenAgents