📺 本课B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程

1. Jetson Bootloader 的整体脉络(表格总览)
Jetson Bootloader 是一条“固件链”,而不是一个 Bootloader 程序。与其他 SoC 完全不同。
1.1 启动链总览表
| 阶段 | 位置 | 可否修改 | 主要职责 | 错误表现 |
|---|
| BootROM | SoC 内部 | 不可修改 | 读取 BCT、加载 MB1、Secure Boot 验证 | 黑屏、只进入 RCM、串口无输出 |
| MB1 | QSPI/Boot 媒体 | 不可修改(可调 BCT) | PMIC、DDR、Pinmux、UPHY、时钟、安全环境 | 上电断电、DDRx 失败、外设不亮 |
| MB2 | QSPI/Boot 媒体 | 不可修改(可调 BCT) | 固件加载、GPIO 中断、Boot 参数准备 | UEFI 进入失败、摄像头/USB 功能异常 |
| UEFI/CBoot | QSPI/分区 | 可修改 | Boot Order、DTB 合并、A/B、Capsule、加载 Kernel | 启动目标异常、DTB 错误、无法 OTA |
2. Jetson 启动链(增强型流程图)
┌──────────────────────────────────┐
│ BootROM │
│ - 读取 FUSE │
│ - 加载 BR-BCT │
│ - 加载并验证 MB1 │
└──────────────┬──────────────────┘
│
┌──────────────▼──────────────────┐
│ MB1 │
│ - PMIC/上电rail │
│ - DDR 初始化+Training │
│ - Pinmux + Pad Voltage │
│ - UPHY Lane / 时钟树 │
│ - 安全环境 Secure Boot │
└──────────────┬──────────────────┘
│
┌──────────────▼──────────────────┐
│ MB2 │
│ - 加载 BPMP/RCE/XUSB FW │
│ - 中断映射 GPIO→IRQ │
│ - Carveout 参数传递 │
│ - Boot 参数准备 │
└──────────────┬──────────────────┘
│
┌──────────────▼──────────────────┐
│ UEFI / CBoot │
│ - Boot Order / Boot Mode │
│ - DTB 合并与 Overlay │
│ - 加载 Kernel + initrd │
│ - A/B Slot 管理 │
│ - Capsule Update │
└──────────────────────────────────┘
3. BCT(Boot Configuration Table)结构总览
3.1 BCT 分类表
| BCT 名称 | 由谁使用 | 作用范围 | 含关键字段 | 错误表现 |
|---|
| BR-BCT | BootROM | 启动设备、电气时序 | QSPI/UFS/SD 参数 | 无法加载 MB1 → 黑屏 |
| MB1-BCT | MB1 | Pinmux、PMIC、UPHY、时钟树 | Rail、Pad、电压、电源时序、Lane 配置 | 上电断电、PCIE 不亮、串口无输出 |
| Mem-BCT | MB1 | DDR 配置+ECC+Carveout | SDRAM、ECC、Carveout | DDR 错误、ISP 摄像头不可用 |
| MB2-BCT | MB2 | 中断映射、固件加载、安全控制 | GPIO→IRQ、FW 区布局 | USB、摄像头等初始化失败 |
4. 启动链各阶段详细解析(大量表格 + 图示)
4.1 BootROM
| 功能 | 说明 |
|---|
| Fuse 读取 | 根据 SoC 烧录决定启动模式 |
| 读取 BR-BCT | 决定启动介质、时序、访问参数 |
| 验证 MB1 | Secure Boot 的第一环 |
| 失败进入 RCM | 可通过 USB 重新刷机 |
流程图:
BootROM → 读取 Fuse → 读取 BR-BCT → 访问存储 → 加载 MB1 →(失败)→ 进入 RCM
4.2 MB1(Bootloader 中最关键、最复杂)
4.2.1 MB1 初始化内容表格
| 项目 | 在 MB1 中作用 | 风险 |
|---|
| PMIC Rail | 系统上电顺序、电压 | 配错=上电断电 |
| DDR Training | 内存初始化 | 配错=完全不启动 |
| Pinmux | 各 IO 功能定义 | 错误=系统无外设 |
| Pad Voltage | IO 电压域 | 错误可能损坏外设 |
| UPHY Lane | PCIE/USB/ SATA 方向 | 错误=PCIE 不亮 |
| Clock + PLL | 核心时钟树 | 错误造成外设失败 |
| Security 初始化 | TrustZone / Keyslot | 影响 Secure Boot |
4.2.2 DDR Training 流程图
DDR 参数加载
→ ZQ 校准
→ Read Leveling
→ Write Leveling
→ ECC 初始化(可选)
→ DRAM 频率切换
→ 成功 → 进入 MB2
→ 失败 → 重启/卡死
4.3 MB2
| 功能 | 说明 |
|---|
| 加载 BPMP FW | 管理时钟、电源的核心固件 |
| 加载 RCE FW | 摄像头 ISP 使用此固件 |
| 加载 XUSB FW | USB 控制器初始化 |
| GPIO → IRQ 映射 | 决定 GPIO 对应中断号 |
| Boot 参数准备 | 传递给 UEFI |
MB2 作用关系图
MB1(底层硬件)
→ MB2(固件加载 + 中断 + Boot 参数)
→ UEFI(系统 Boot 管理)
4.4 UEFI / CBoot
4.4.1 UEFI 功能总表
| 功能 | 内容 |
|---|
| Boot Order | NVMe → UFS → eMMC → SD → 网络 |
| Boot Mode | Normal / Recovery / Fastboot |
| UEFI Variables | OSIndications、BootNext |
| DTB 合并 | SoC DTB + Carrier Board DTB + overlay |
| A/B Slot 管理 | 自动切换失败 slot |
| Capsule Update | OTA Bootloader 更新 |
| Logo / Shell | 可定制 logo、禁用 shell、菜单密码 |
4.4.2 DTB 合并流程图
基础 SoC DTB
+ Carrier Board DTB
+ overlay(摄像头、扩展板)
→ UEFI 合并处理
→ 生成最终 DTB → 传给 Kernel
5. Jetson 与其他 SoC 的 Bootloader 差异(表格强化版)
5.1 架构差异表
| 功能项 | Jetson | i.MX / RK |
|---|
| DDR 初始化 | MB1 | TF-A / SPL |
| Pinmux | MB1 | DTS / U-Boot |
| PMIC | MB1 | Kernel/UBoot |
| UPHY Lane | MB1 | DTS |
| Bootloader | 多阶段(ROM→MB1→MB2→UEFI) | ROM→U-Boot |
| OTA | 官方 A/B + Capsule | 自研为主 |
5.2 开发复杂度对比
| 项目 | Jetson | i.MX | RK |
|---|
| Bootloader 可修改性 | ★★★ | ★★★★★ | ★★★★ |
| 启动链复杂度 | ★★★★★ | ★★★ | ★★ |
| OTA 难度 | ★★(官方完善) | ★★★★★ | ★★★★★ |
| 板级定制难度 | ★★★★★ | ★★★ | ★★ |
6. Bootloader 中最难的部分(表格 + 调试策略)
6.1 难点总表
| 难点 | 典型表现 | 根因 | 调试方式 |
|---|
| PMIC rail 配错 | 上电瞬断 | 电压/时序错误 | 示波器测波形,对照 devkit |
| DDR 配置错误 | 无串口 | 时序/频率错误 | 对照官方 BCT、降低频率测试 |
| UPHY Lane 配错 | PCIE link down | Lane 方向不一致 | 查看 UPHY 表,对照 SKU |
| Pinmux 错误 | 外设无反应 | 功能 or 电压域错误 | 查看 MB1 pinmux log |
| UEFI DTB 合并异常 | Kernel 看到的硬件不对 | overlay 冲突 | dtc -I fs 对比 |
| A/B 失败 | slot 切换异常 | metadata 错误 | nvbootctrl 查看 |
7. OTA:A/B Slot + BUP + Capsule(流程图强化)
7.1 A/B Slot 切换流程图
UEFI 启动 Slot A
│
├─ Kernel 正常启动 → 标记成功 → 保持 A
│
└─ Kernel 启动失败 → 增加失败计数
→ 达到阈值 → 切换 Slot B
7.2 BUP 更新流程图
构建 BUP
→ 分发到设备
→ 写入另一 Slot
→ 设置 BootNext
→ 重启
→ 验证新 Slot
→ 成功则激活
7.3 Capsule Update 流程图
生成 capsule
→ 复制到 ESP
→ 设置 OSIndications
→ 重启
→ UEFI 解析 capsule
→ 刷写 bootloader
→ 清理 capsule
8. 开发者实战工作流(表格 + 步骤)
8.1 工作流总表
| 阶段 | 工作重点 | 工具 |
|---|
| 分析 | 启动链/硬件特性 | NVIDIA 文档、DevKit BCT |
| 定制 | PMIC/Pinmux/Lane/DDR | MB1-BCT/Mem-BCT 调整 |
| 验证 | tegraflash 测试 | 串口 log、波形仪 |
| 系统集成 | UEFI Boot/DTB | extlinux.conf、overlay |
| OTA | BUP/Capsule/A/B | nvbootctrl、fwupdtool |
9. 总结(表格化精炼)
| 重点 | 说明 |
|---|
| Jetson Bootloader 是“固件链” | BootROM→MB1→MB2→UEFI |
| MB1 最关键 | DDR/Pinmux/PMIC/UPHY 全在此 |
| BCT 是核心 | 配置越精确,板子越稳定 |
| OTA 体系强大 | A/B + BUP + Capsule 完全企业级 |
| 调试难度高 | 必须依赖串口 log + 波形 + BCT 对照 |
📺 本课B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程