Jetson Orin 启动链(QSPI + UEFI)
一、核心架构总览
Jetson Orin采用 「片内固化ROM + QSPI NOR Flash多级Bootloader + UEFI标准引导」 的分层启动架构,核心规则:
- 第一启动介质唯一:所有Bootloader级固件必须存放在板载QSPI Flash中,芯片上电后必须从QSPI启动第一阶段,无法直接从eMMC/NVMe/SD卡启动Bootloader。
- UEFI替代传统U-Boot/CBoot:从JetPack 5.x(L4T 35.x)开始,Orin全面使用UEFI作为主引导程序,提供标准化的启动管理、安全启动、多设备引导与固件升级能力。
- 系统与引导分离:内核、设备树、根文件系统存放在外部存储(eMMC / NVMe SSD / SD卡 / USB),由UEFI加载执行,QSPI仅负责引导链路本身。
完整启动链路总览:
片内BootROM → PSCROM安全校验 → MB1 → MB2 → UEFI → Linux内核 → 根文件系统
二、冷启动全流程分步拆解(从上电到进入系统)
阶段0:片内ROM启动(BootROM + PSCROM)
执行主体 :Orin芯片内部固化的ROM代码,不可修改、不可刷写
运行处理器 :BPMP(电源管理处理器,Orin内置的微控制器)
核心作用:建立最基础的硬件环境,完成第一级安全校验,加载QSPI中的第一级Bootloader。
步骤0.1 上电复位与BootROM执行
芯片上电或硬复位后,BPMP处理器立即执行片内BootROM代码:
- 初始化最小系统时钟、QSPI控制器、片内SRAM(静态内存)
- 读取硬件引脚的启动选择配置,确认第一启动介质为QSPI Flash
- 读取QSPI Flash起始位置的
BR_BCT(BootROM启动配置表),获取MB1固件的存储地址、大小与校验信息
步骤0.2 PSCROM安全校验
PSCROM是片内另一块固化ROM,专门负责安全验证:
- 从芯片熔丝区加载NVIDIA原厂密钥与OEM密钥
- 校验MB1固件的数字签名与哈希值,确认固件未被篡改
- 若开启安全启动,会同步解密MB1固件;校验失败则启动终止
步骤0.3 加载MB1到片内SRAM
校验通过后,BootROM将MB1固件从QSPI Flash复制到片内SRAM中,然后跳转到MB1的入口地址,移交控制权。
阶段1:MB1(Microboot Stage 1)执行
存放位置 :QSPI Flash
运行处理器 :BPMP处理器
核心作用:完成核心硬件初始化,尤其是DDR内存,为后续阶段提供运行空间。MB1由NVIDIA签名加密,用户无法修改。
步骤1.1 核心硬件初始化
- 初始化DDR内存控制器,执行DRAM时序训练、频率校准与容量检测
- 初始化存储控制器:eMMC、SD卡、PCIe、USB的底层硬件接口
- 初始化电源域、时钟树、引脚复用,完成芯片级平台配置
- 加载BPMP处理器自身的运行固件(
bpmp.bin)
步骤1.2 加载MB2到DRAM
- 从QSPI Flash中读取MB2固件,校验其数字签名
- 将MB2固件复制到已经初始化完成的DDR内存中
- 跳转到DRAM中的MB2入口地址,移交控制权
阶段2:MB2(Microboot Stage 2)执行
存放位置 :QSPI Flash
运行处理器 :BPMP处理器(后期启动主CPU)
核心作用:完善外设初始化,搭建安全执行环境,加载UEFI并唤醒主CPU。
步骤2.1 外设与调试接口初始化
- 初始化I2C、GPIO、UART串口、SPI等基础外设
- 启动调试串口输出,后续所有启动日志均可通过串口查看
- 读取板载EEPROM信息,识别模组型号与载板配置
步骤2.2 安全世界环境搭建
- 从QSPI加载
TOS(可信操作系统,如OP-TEE)固件,初始化安全世界(EL3异常级别) - 加载
EKS(加密密钥存储),为安全启动、硬件加密提供密钥支持 - 配置内存隔离区,保护安全世界资源不被普通系统访问
步骤2.3 加载UEFI并唤醒主CPU
- 从QSPI Flash中读取UEFI固件镜像,校验签名后加载到DDR内存的指定地址
- 释放主CPU(Cortex-A78AE集群)的复位信号,主CPU开始执行
- BPMP进入后台运行模式,主CPU接管后续引导流程,跳转到UEFI入口
阶段3:UEFI 固件引导(核心调度阶段)
存放位置 :QSPI Flash
运行处理器 :主CPU(ARM Cortex-A78AE,EL2异常级别)
核心作用:标准化的固件接口层,枚举所有启动设备,加载Linux内核与设备树,完成硬件到操作系统的交接。
步骤3.1 UEFI内部执行阶段
UEFI自身遵循标准UEFI规范,分四个子阶段执行:
- SEC阶段(安全阶段):初始化CPU缓存、临时栈,建立最基础的运行环境
- PEI阶段(EFI前期初始化):初始化内存、基础IO,枚举平台硬件资源
- DXE阶段(驱动执行环境):加载存储、USB、PCIe、显示等设备的UEFI驱动,初始化所有外设
- BDS阶段(启动设备选择):进入启动逻辑,是引导系统的核心环节
步骤3.2 启动设备枚举与优先级
BDS阶段会按默认优先级扫描所有可启动存储设备:
- 第一优先级:可移动设备(SD卡 > USB存储设备)
- 第二优先级:固定存储设备(NVMe SSD > eMMC > UFS)
- 若开启网络启动,PXE设备会加入优先级队列
可在UEFI设置界面手动修改启动顺序,或通过
L4TConfiguration.dtbo配置文件修改默认优先级。
步骤3.3 读取启动配置文件
UEFI选中目标启动设备后,会读取设备启动分区中的/boot/extlinux/extlinux.conf配置文件:
- 解析配置文件中的内核路径、设备树路径、initrd路径、内核启动参数
- 若
extlinux.conf不存在,则回退到存储设备的kernel、dtb分区中加载默认镜像 - 支持多启动项配置,可在启动时选择不同内核或系统版本
步骤3.4 加载内核并移交控制权
- 将Linux内核镜像(
Image)、设备树二进制(dtb)、initrd镜像从存储设备加载到DDR内存 - 填充内核启动参数(cmdline),配置内存布局、硬件预留信息
- 切换CPU异常级别,跳转到Linux内核入口地址,UEFI将硬件资源完全移交给内核
阶段4:Linux内核与系统启动
- 内核解压与初始化:内核自解压,初始化所有硬件驱动,完成内存管理、进程调度、文件系统初始化
- 挂载根文件系统 :根据启动参数中的
root参数,挂载对应分区的根文件系统 - 用户态启动 :启动
systemd进程管理器,依次加载系统服务、驱动模块,最终进入登录界面或桌面环境
三、QSPI Flash 深度解析
3.1 为什么选用QSPI NOR Flash
- 高可靠性:NOR Flash支持随机地址读取,擦写寿命远高于NAND Flash,适合存放极少修改、必须可靠的Bootloader固件
- 独立安全:与系统存储物理分离,即使系统盘损坏、刷写失败,也不会影响启动引导,可通过UEFI或恢复模式修复
- XIP支持:支持就地执行,早期阶段无需将代码全部复制到内存即可运行,适配片内SRAM空间有限的场景
- 标准容量:Orin模组标配32MB/64MB QSPI,仅存放Bootloader固件,空间充足
3.2 QSPI Flash 完整分区表
QSPI采用GPT分区格式,核心分区与功能如下(基于官方flash_t234_qspi.xml配置):
| 分区名称 | 核心功能 |
|---|---|
| BR_BCT | BootROM配置表,存储MB1的地址、校验信息与启动参数 |
| MB1 | 第一级Bootloader固件,完成DDR初始化 |
| MB2 | 第二级Bootloader固件,搭建安全环境、加载UEFI |
| BPMP-BLOB | BPMP处理器运行固件与配置 |
| TOS | 可信操作系统(OP-TEE)固件,安全世界环境 |
| EKS | 加密密钥存储区,安全启动与硬件加密密钥 |
| UEFI | UEFI固件主镜像,主引导程序 |
| RECROOT | 恢复模式固件,支持OTA与恢复启动 |
| GPT/Secondary GPT | QSPI自身的分区表备份 |
| DTB | 引导阶段设备树,供UEFI使用 |
3.3 QSPI与系统存储的分工
| 存储介质 | 存放内容 | 刷写时机 |
|---|---|---|
| QSPI Flash | BootROM配置、MB1/MB2、UEFI、安全固件、引导DTB | 刷机时同步更新,或通过胶囊更新单独升级 |
| 外部存储(eMMC/NVMe/SD) | Linux内核、设备树、根文件系统、用户数据 | 系统刷机、内核替换、日常读写 |
四、关键实操与调试
4.1 单独刷写QSPI固件
正常刷机时会自动同步更新QSPI,若仅需升级Bootloader,可在主机Linux_for_Tegra目录下执行:
bash
# 开发板进入恢复模式后,单独刷写QSPI全部分区
sudo ./flash.sh -k QSPI jetson-agx-orin-devkit internal
也可通过UEFI胶囊更新,无需进入恢复模式,在系统内即可升级QSPI固件。
4.2 进入UEFI设置界面
- 开发板接显示器与键盘,或通过串口连接调试终端
- 上电后,在NVIDIA Logo界面出现时,反复按
Esc键 - 进入UEFI设置菜单后,可选择
Boot Manager手动选择启动设备,或修改启动顺序、安全启动等配置
4.3 查看完整启动日志
所有启动阶段的日志均可通过调试串口查看:
- 串口参数:115200 波特率,8N1,无流控
- 日志顺序:BootROM → MB1 → MB2 → UEFI → 内核启动日志
- 是排查启动故障的核心手段
4.4 常见启动故障排查
- 完全无启动日志:优先检查供电、硬件复位,若串口无任何输出,大概率是QSPI固件损坏,需进入恢复模式重刷QSPI
- 停在UEFI界面,找不到启动设备 :检查系统存储是否正常连接,确认存储设备中有有效系统与
extlinux.conf - 内核启动失败:检查设备树与内核匹配性,确认启动参数与根文件系统路径正确