启动与初始化

这页帮助你理解:Linux 内核不是一开机就“全部就绪”,而是按顺序把内存、CPU、调度、中断、设备等能力一点点搭起来。学这页的意义,不是背步骤,而是建立“系统是逐步成形的”这种感觉。

这块是什么

启动与初始化讲的是系统从上电、引导器把内核装入内存,到内核逐步建立自己的运行环境,并最终启动用户空间的整个过程。它像搭舞台:舞台没搭好,后面的演员都上不来。

你现在不用记住所有启动细节顺序,只要先知道:启动阶段的职责是把“系统能稳定运作的最基础条件”建立起来。

它负责什么

建立最初运行环境

  • 识别当前平台和启动信息
  • 准备最早期内存
  • 建立基础 CPU 运行环境
  • 让内核能先站起来,而不是立刻功能完整

拉起核心子系统

  • 初始化中断与定时器
  • 初始化调度和进程基础设施
  • 初始化内存管理框架
  • 让内核从“能跑”走向“能协调各类资源”

把系统交给正常流程

  • 挂起各类内核线程和后台机制
  • 初始化设备和驱动框架
  • 启动第一个用户空间流程
  • 把系统从内核自举阶段切换到常态运行阶段

大致可以分成哪几段

阶段你现在怎么理解为什么它重要
引导前半段固件和 bootloader 把内核镜像装进内存,并准备启动参数。没有这一步,内核甚至没机会开始自己的初始化。
早期内核阶段很多高级功能还不可用,只能先搭最核心的运行条件。它解释了为什么“早期内存”和“正常内存管理”不是同一回事。
子系统初始化调度、内存、中断、设备等基础能力逐个被拉起。后面你看到的很多子系统,都在这里找到各自的进入时机。
进入用户空间内核完成自举后,把系统交给第一个用户空间进程。这标志着系统真正从“搭台”进入“正常服务”状态。

核心概念

概念现在怎么理解
引导链从固件到引导器,再到内核自身启动的接力过程。
早期初始化在很多高级功能还没准备好之前,先把最基础能力搭起来。
init内核把系统拉起后,需要进入用户空间的第一个关键入口。
启动参数外部传给内核的配置和控制信息,影响启动行为。
平台相关初始化不同架构和硬件平台,会有自己特定的一部分早期启动逻辑。

为什么重要

常见误解

它不负责什么

它和其他模块的关系

相关模块关系
内存管理启动期必须先有最基础的内存能力,否则无法继续初始化别的模块。
调度器初始化后系统才真正具备多任务运行的能力。
中断/定时器很多外部事件处理能力必须在早期就建立。
驱动框架设备不可能在系统能力都没搭好前完整接入。

最容易在哪些地方开始混

容易混的点现在先怎么分开为什么这很重要
bootloader 和内核启动bootloader 负责把内核装进来并交棒,内核负责把系统自己搭起来。这样你以后看启动问题时,才知道是在“把内核叫起来”之前出错,还是在“内核自举”过程中出错。
早期初始化和正常运行期早期阶段很多常规能力还没齐,很多做法只是为了先活下来。这解释了为什么某些初始化代码风格和正常路径很不一样。
启动顺序和模块功能有些模块本身并不复杂,但必须在正确时机被拉起。学习内核时,先后关系常和功能本身一样重要。
进入用户空间和内核工作结束进入用户空间不是内核“退场”,而是系统开始进入长期协作状态。这能帮助你把“启动完毕”和“内核不再参与”这两个错误直觉分开。

读完这页后,你应该能回答

后面如果你想继续深问,适合问:内核和 bootloader 的边界是什么?第一个用户空间进程为什么重要?早期内存和正常内存管理有什么区别?