Linux是如何启动的

概述

Linux启动过程主要分为以下几个阶段:

  • BIOS/UEFI启动
  • Boot Device引导
  • Boot Loader执行
  • 内核引导
  • 用户空间初始化,驱动程序加载、内核模块加载、启动1号进程,并由其启动其他用户空间进程

具体的启动过程如下图所示:
alt text

BIOS/UEFI启动

BIOS是一种固化在计算机主板上的固件,用于初始化硬件设备、加载引导程序并启动操作系统。UEFI是BIOS的替代品,提供了更多的功能和更好的兼容性。

BIOS/UEFI启动过程主要包括以下几个步骤:

  1. 加电自检(Power-On Self-Test,POST):计算机加电后,BIOS/UEFI会进行硬件自检,检查硬件设备是否正常。
  2. 加载引导程序:BIOS/UEFI会从硬盘、光盘、USB等设备中加载引导程序,将控制权交给引导程序。

BIOS/UEFI对比

对比维度 BIOS UEFI
架构与运行模式 基于16位实模式,仅支持32位处理器,代码以汇编语言编写 基于64位保护模式,支持32/64位处理器,模块化设计,代码以C语言编写
启动方式 依赖MBR分区表(最大支持2TB硬盘),需完整硬件自检(POST),速度较慢 支持GPT分区表(支持超2TB硬盘),并行加载驱动和内核,跳过硬件自检,启动更快
用户界面 仅支持文本界面,通过键盘操作 提供图形化界面,支持鼠标操作和高级交互
安全性 无安全启动功能,易受引导区病毒攻击 支持安全启动(Secure Boot),验证数字签名防止恶意软件加载
兼容性 仅兼容旧操作系统(如Windows 7及更早版本) 支持现代操作系统(Windows 8+/Linux等),提供CSM模式兼容Legacy BIOS
分区管理 最多4个主分区(或3主分区+1扩展分区) 支持GPT分区表,理论上无分区数量限制,支持更大容量存储
驱动支持 依赖操作系统加载驱动,启动后硬件功能才可用 固件级别加载驱动,操作系统启动前即可使用硬件功能(如网络启动PXE)
扩展性 存储空间有限(通常≤64KB),功能扩展困难 固件存储空间更大,支持模块化更新和扩展功能(如远程诊断)
典型应用场景 旧硬件设备、传统系统维护场景 现代计算机、大容量存储设备、安全敏感型系统

Boot Device引导

引导设备是存储引导程序的设备,可以是硬盘、光盘、USB等。BIOS/UEFI会从引导设备中加载引导程序,将控制权交给引导程序。

那么引导的位置在哪儿呢?这个问题涉及到硬盘的分区表格式:

  • MBR(Master Boot Record):MBR是硬盘的第一个扇区,大小为512字节,包含分区表和引导程序。
  • GPT(GUID Partition Table):GPT是一种新的分区表格式,支持更大的硬盘容量和更多的分区,引导程序通常存储在EFI系统分区中。

对于MBR格式的硬盘,引导程序通常存储在硬盘的第一个扇区(MBR区)中。对于GPT格式的硬盘,引导程序通常存储在EFI系统分区中。

Boot Loader执行

引导程序(Boot Loader)是一个小程序,用于加载操作系统内核并启动操作系统。最常见的引导程序是GRUB。

引导程序的主要功能包括:

  • 加载内核:引导程序会从硬盘中加载操作系统内核到内存中。
  • 启动内核:引导程序会将控制权交给内核,启动操作系统。

内核引导

内核引导是操作系统内核的启动过程,主要包括以下几个步骤:

  1. 内核初始化:内核会初始化硬件设备、建立内存映射等。
  2. 启动用户空间:内核会启动用户空间的初始化进程(1号进程)。

用户空间初始化

用户空间初始化是操作系统启动后的第一个用户空间进程,主要负责加载驱动程序、内核模块、初始化用户空间环境等。

用户空间初始化的主要工作包括:

  • 加载驱动程序:用户空间初始化会加载硬件驱动程序,使硬件设备可以正常工作。
  • 加载内核模块:用户空间初始化会加载内核模块,扩展内核功能。
  • 启动1号进程:用户空间初始化会启动1号进程(init进程),并由1号进程启动其他用户空间进程。

1号进程

1号进程是用户空间初始化的第一个进程,通常是init进程或systemd进程。1号进程负责启动其他用户空间进程,维护系统运行状态等。

systemd是目前主流的1号进程,它是一个系统和服务管理器,负责启动和管理系统服务、进程和资源。systemd提供了更多的功能和更好的性能,逐渐取代了传统的init进程。

总结

Linux启动过程主要分为BIOS/UEFI启动、Boot Device引导、Boot Loader执行、内核引导、用户空间初始化等阶段。在这些阶段中,BIOS/UEFI负责硬件初始化和引导程序加载,Boot Loader负责加载内核和启动操作系统,内核负责初始化硬件设备和启动用户空间,用户空间初始化负责加载驱动程序、内核模块和启动其他用户空间进程。整个启动过程是一个层层递进的过程,每个阶段都有其特定的功能和作用,最终实现了操作系统的启动和运行。

作者

deepwzh

发布于

2025-03-15

更新于

2025-03-17

许可协议

评论