Linux是如何启动的
概述
Linux启动过程主要分为以下几个阶段:
- BIOS/UEFI启动
- Boot Device引导
- Boot Loader执行
- 内核引导
- 用户空间初始化,驱动程序加载、内核模块加载、启动1号进程,并由其启动其他用户空间进程
具体的启动过程如下图所示:
BIOS/UEFI启动
BIOS是一种固化在计算机主板上的固件,用于初始化硬件设备、加载引导程序并启动操作系统。UEFI是BIOS的替代品,提供了更多的功能和更好的兼容性。
BIOS/UEFI启动过程主要包括以下几个步骤:
- 加电自检(Power-On Self-Test,POST):计算机加电后,BIOS/UEFI会进行硬件自检,检查硬件设备是否正常。
- 加载引导程序: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号进程)。
用户空间初始化
用户空间初始化是操作系统启动后的第一个用户空间进程,主要负责加载驱动程序、内核模块、初始化用户空间环境等。
用户空间初始化的主要工作包括:
- 加载驱动程序:用户空间初始化会加载硬件驱动程序,使硬件设备可以正常工作。
- 加载内核模块:用户空间初始化会加载内核模块,扩展内核功能。
- 启动1号进程:用户空间初始化会启动1号进程(init进程),并由1号进程启动其他用户空间进程。
1号进程
1号进程是用户空间初始化的第一个进程,通常是init进程或systemd进程。1号进程负责启动其他用户空间进程,维护系统运行状态等。
systemd是目前主流的1号进程,它是一个系统和服务管理器,负责启动和管理系统服务、进程和资源。systemd提供了更多的功能和更好的性能,逐渐取代了传统的init进程。
总结
Linux启动过程主要分为BIOS/UEFI启动、Boot Device引导、Boot Loader执行、内核引导、用户空间初始化等阶段。在这些阶段中,BIOS/UEFI负责硬件初始化和引导程序加载,Boot Loader负责加载内核和启动操作系统,内核负责初始化硬件设备和启动用户空间,用户空间初始化负责加载驱动程序、内核模块和启动其他用户空间进程。整个启动过程是一个层层递进的过程,每个阶段都有其特定的功能和作用,最终实现了操作系统的启动和运行。