Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

内核引导过程

欢迎来到 Linux 内核的引导之旅。本章一步步讲述了从你开机那一刻起,到 Linux 内核加载到您机器的内存中时,完整的启动阶段。

阅读方法

本章假设你熟悉基础计算机架构,并对 C 语言和 x86_64 汇编语法略有了解。你不需要成为内核专家,但读懂短代码片段和识别硬件术语会对阅读本章很有帮助。

本章的每一部分都聚焦于一个启动阶段。第一次按顺序阅读,然后,在想将特定符号或寄存器映射到序列中的位置时,作为参考点,逐步回顾。在本地电脑上拥有 Linux 内核的源代码,有助于了解细节。您可以使用以下命令获取源代码:

git clone git@github.com:torvalds/linux.git

术语表

在阅读本章及其他章节时,你可能会遇到一些专业术语:

  • CS, DS, SS, CR0, CR3, CR4, EFER - 代表 x86 段寄存器和控制寄存器
  • 0x... - 表示十六进制值
  • entry_*startup_* - 是早期引导符号的常见前缀
  • setup code 指的是 Linux 内核的早期部分,用于执行将内核代码本身加载到内存的准备工作
  • decompressor 指的是将压缩后的内核映像解压到内存的 setup code 部分。

你将学到什么

  • 处理器从固件和引导加载程序到达内核入口点的方式
  • x86_64 处理器的不同模式
  • 内核本身之前的早期 setup code 会被加载到内存中并开始工作

阅读顺序

内核版本

本章对应 Linux kernel v6.19