惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog RSS Feed
宝玉的分享
宝玉的分享
腾讯CDC
博客园_首页
T
Tailwind CSS Blog
月光博客
月光博客
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
V
Visual Studio Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
SecWiki News
SecWiki News
美团技术团队
P
Privacy International News Feed
H
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
Know Your Adversary
Know Your Adversary
Y
Y Combinator Blog
D
DataBreaches.Net
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
S
Schneier on Security
G
GRAHAM CLULEY
博客园 - 三生石上(FineUI控件)
Cisco Talos Blog
Cisco Talos Blog
小众软件
小众软件
Forbes - Security
Forbes - Security
D
Docker
T
Tenable Blog
S
Secure Thoughts
雷峰网
雷峰网
S
Security @ Cisco Blogs
T
The Exploit Database - CXSecurity.com
The Cloudflare Blog
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
阮一峰的网络日志
阮一峰的网络日志

博客园 - 于光远

泛型编程 SPI协议及驱动开发框架 I2C协议及驱动开发框架 使用qemu 加载linux-6.18.1内核 linux 内核 策略模式 单例模式 Linux性能分析:从监控到优化的完整工具链 C++模板元编程实现序列化与反序列化 引用 bootchart linux 脚本打印时间 接口编程 不定参数解析,结合tuple 独立于main运行的程序 类模板继承 std::ostream & operator<< Flash HIDL --HelloWorld
分区理论知识整理
于光远 · 2026-01-12 · via 博客园 - 于光远

系统启动过程

image

 阶段

核心职责 关键细节

Power on

硬件复位,触发 CPU 从固定地址执行第一条指令

硬件初始化(如电源、时钟),无软件逻辑

BootROM

芯片出厂固化的只读代码

  1. 做硬件完整性校验(如 BL1 签名验证);
  2. 初始化片内 SRAM(无 DDR);
  3. 从 eMMC/SPINOR 加载 BL1 到 SRAM 并执行
BL1

第一阶段引导加载器

  1. 初始化核心外设(如时钟、UART);
  2. 验证 BL2 完整性,加载 BL2 到 SRAM

BL2

精简引导程序

  1. 核心:初始化 DDR(关键!无 DDR 则无法加载大体积的 BL31/BL33 / 内核);
  2. 分区表:仅预识别 MBR/GPT 的引导分区(如 eMMC 的 boot0/boot1 分区),不解析全量分区;
  3. 加载:验证并加载 BL31(EL3)、BL33(U-Boot)到 DDR 指定地址
BL31

EL3 安全监视器

  1. 运行在最高权限等级 EL3,隔离安全 / 非安全世界;
  2. 提供 PSCI(电源管理)、SMC(安全调用)等核心服务;
  3. 完成权限切换,将控制权交给 BL33(U-Boot)

BL33 (U-Boot)

主引导程序

  1. 分区表:完整解析 MBR/GPT 全量分区表(主分区 / 扩展分区 / 逻辑分区);
  2. 设备节点:仅创建 “内核加载必需” 的极简节点(如mmc 0:1),而非系统级/dev节点
  3. 核心动作:加载内核(Image)、设备树(dtb)、initramfs 到 DDR,拼接启动参数(如root=/dev/mmcblk0p1),启动内核 

Kernel

内核初始化

  1. 分区表:重新扫描分区表(独立于 U-Boot,内核不依赖 U-Boot 的分区信息);
  2. 设备文件:先创建rootfs(虚拟根),再创建核心设备节点(如/dev/root、/dev/mmcblk0p1);
  3. 挂载:通过核心节点挂载真实根文件系统,切换根;
  4. 补全节点:udev/mdev 扫描/sys,创建全量/dev节点

RootFS

根文件系统

  1. 提供用户空间基础目录结构(/bin /etc /usr );
  2. 承载 udev/mdev 工具,完成设备节点补全;
  3. 作为内核切换根后的 “真实根”,是用户空间的载体

User Space

用户空间初始化

  1. 启动 init 进程(systemd/initd/mdev);
  2. 挂载 /etc/fstab 中配置的其他分区(如/data /mnt );
  3. 启动系统服务(网络、日志、应用),完成启动

1. 内核与 U-Boot 分区表的独立性:内核会重新扫描分区表,不依赖 U-Boot 的分区识别结果 —— 即使 U-Boot 识别了分区,内核仍会独立解析,确保根分区识别的可靠性(避免 U-Boot 分区表错误导致系统启动失败)。

2. RootFS 与 “切换根” 的逻辑:内核先挂载rootfs(虚拟内存文件系统)作为临时根,创建核心节点后,再挂载真实根文件系统(如 eMMC 的/dev/mmcblk0p1)

最后通过pivot_root切到真实的根,这个 “临时根→真实根” 的切换是内核启动的核心步骤

3. 分区表识别的递进:BL2(引导分区预识别)→ U-Boot(全量分区识别)→ 内核(独立重新识别),三层校验确保根分区定位可靠