Jetson Orin 启动链

Jetson Orin 启动链(QSPI + UEFI)


一、核心架构总览

Jetson Orin采用 「片内固化ROM + QSPI NOR Flash多级Bootloader + UEFI标准引导」 的分层启动架构,核心规则:

  1. 第一启动介质唯一:所有Bootloader级固件必须存放在板载QSPI Flash中,芯片上电后必须从QSPI启动第一阶段,无法直接从eMMC/NVMe/SD卡启动Bootloader。
  2. UEFI替代传统U-Boot/CBoot:从JetPack 5.x(L4T 35.x)开始,Orin全面使用UEFI作为主引导程序,提供标准化的启动管理、安全启动、多设备引导与固件升级能力。
  3. 系统与引导分离:内核、设备树、根文件系统存放在外部存储(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代码:

  1. 初始化最小系统时钟、QSPI控制器、片内SRAM(静态内存)
  2. 读取硬件引脚的启动选择配置,确认第一启动介质为QSPI Flash
  3. 读取QSPI Flash起始位置的BR_BCT(BootROM启动配置表),获取MB1固件的存储地址、大小与校验信息
步骤0.2 PSCROM安全校验

PSCROM是片内另一块固化ROM,专门负责安全验证:

  1. 从芯片熔丝区加载NVIDIA原厂密钥与OEM密钥
  2. 校验MB1固件的数字签名与哈希值,确认固件未被篡改
  3. 若开启安全启动,会同步解密MB1固件;校验失败则启动终止
步骤0.3 加载MB1到片内SRAM

校验通过后,BootROM将MB1固件从QSPI Flash复制到片内SRAM中,然后跳转到MB1的入口地址,移交控制权。


阶段1:MB1(Microboot Stage 1)执行

存放位置 :QSPI Flash

运行处理器 :BPMP处理器

核心作用:完成核心硬件初始化,尤其是DDR内存,为后续阶段提供运行空间。MB1由NVIDIA签名加密,用户无法修改。

步骤1.1 核心硬件初始化
  1. 初始化DDR内存控制器,执行DRAM时序训练、频率校准与容量检测
  2. 初始化存储控制器:eMMC、SD卡、PCIe、USB的底层硬件接口
  3. 初始化电源域、时钟树、引脚复用,完成芯片级平台配置
  4. 加载BPMP处理器自身的运行固件(bpmp.bin)
步骤1.2 加载MB2到DRAM
  1. 从QSPI Flash中读取MB2固件,校验其数字签名
  2. 将MB2固件复制到已经初始化完成的DDR内存中
  3. 跳转到DRAM中的MB2入口地址,移交控制权

阶段2:MB2(Microboot Stage 2)执行

存放位置 :QSPI Flash

运行处理器 :BPMP处理器(后期启动主CPU)

核心作用:完善外设初始化,搭建安全执行环境,加载UEFI并唤醒主CPU。

步骤2.1 外设与调试接口初始化
  1. 初始化I2C、GPIO、UART串口、SPI等基础外设
  2. 启动调试串口输出,后续所有启动日志均可通过串口查看
  3. 读取板载EEPROM信息,识别模组型号与载板配置
步骤2.2 安全世界环境搭建
  1. 从QSPI加载TOS(可信操作系统,如OP-TEE)固件,初始化安全世界(EL3异常级别)
  2. 加载EKS(加密密钥存储),为安全启动、硬件加密提供密钥支持
  3. 配置内存隔离区,保护安全世界资源不被普通系统访问
步骤2.3 加载UEFI并唤醒主CPU
  1. 从QSPI Flash中读取UEFI固件镜像,校验签名后加载到DDR内存的指定地址
  2. 释放主CPU(Cortex-A78AE集群)的复位信号,主CPU开始执行
  3. BPMP进入后台运行模式,主CPU接管后续引导流程,跳转到UEFI入口

阶段3:UEFI 固件引导(核心调度阶段)

存放位置 :QSPI Flash

运行处理器 :主CPU(ARM Cortex-A78AE,EL2异常级别)

核心作用:标准化的固件接口层,枚举所有启动设备,加载Linux内核与设备树,完成硬件到操作系统的交接。

步骤3.1 UEFI内部执行阶段

UEFI自身遵循标准UEFI规范,分四个子阶段执行:

  1. SEC阶段(安全阶段):初始化CPU缓存、临时栈,建立最基础的运行环境
  2. PEI阶段(EFI前期初始化):初始化内存、基础IO,枚举平台硬件资源
  3. DXE阶段(驱动执行环境):加载存储、USB、PCIe、显示等设备的UEFI驱动,初始化所有外设
  4. BDS阶段(启动设备选择):进入启动逻辑,是引导系统的核心环节
步骤3.2 启动设备枚举与优先级

BDS阶段会按默认优先级扫描所有可启动存储设备:

  1. 第一优先级:可移动设备(SD卡 > USB存储设备)
  2. 第二优先级:固定存储设备(NVMe SSD > eMMC > UFS)
  3. 若开启网络启动,PXE设备会加入优先级队列

可在UEFI设置界面手动修改启动顺序,或通过L4TConfiguration.dtbo配置文件修改默认优先级。

步骤3.3 读取启动配置文件

UEFI选中目标启动设备后,会读取设备启动分区中的/boot/extlinux/extlinux.conf配置文件:

  1. 解析配置文件中的内核路径、设备树路径、initrd路径、内核启动参数
  2. 若extlinux.conf不存在,则回退到存储设备的kernel、dtb分区中加载默认镜像
  3. 支持多启动项配置,可在启动时选择不同内核或系统版本
步骤3.4 加载内核并移交控制权
  1. 将Linux内核镜像(Image)、设备树二进制(dtb)、initrd镜像从存储设备加载到DDR内存
  2. 填充内核启动参数(cmdline),配置内存布局、硬件预留信息
  3. 切换CPU异常级别,跳转到Linux内核入口地址,UEFI将硬件资源完全移交给内核

阶段4:Linux内核与系统启动

  1. 内核解压与初始化:内核自解压,初始化所有硬件驱动,完成内存管理、进程调度、文件系统初始化
  2. 挂载根文件系统 :根据启动参数中的root参数,挂载对应分区的根文件系统
  3. 用户态启动 :启动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设置界面

  1. 开发板接显示器与键盘,或通过串口连接调试终端
  2. 上电后,在NVIDIA Logo界面出现时,反复按Esc键
  3. 进入UEFI设置菜单后,可选择Boot Manager手动选择启动设备,或修改启动顺序、安全启动等配置

4.3 查看完整启动日志

所有启动阶段的日志均可通过调试串口查看:

  • 串口参数:115200 波特率,8N1,无流控
  • 日志顺序:BootROM → MB1 → MB2 → UEFI → 内核启动日志
  • 是排查启动故障的核心手段

4.4 常见启动故障排查

  1. 完全无启动日志:优先检查供电、硬件复位,若串口无任何输出,大概率是QSPI固件损坏,需进入恢复模式重刷QSPI
  2. 停在UEFI界面,找不到启动设备 :检查系统存储是否正常连接,确认存储设备中有有效系统与extlinux.conf
  3. 内核启动失败:检查设备树与内核匹配性,确认启动参数与根文件系统路径正确
相关推荐
东城居士1 小时前
理解Linux LCD驱动编程
linux·嵌入式系统·1024程序员节
星恒随风2 小时前
Linux线程同步与互斥:彻底理解读者写者问题、读写锁原理、读者优先与写者优先(附pthread完整实验)
linux·服务器·笔记·1024程序员节
_upupup2 小时前
Linux中的进程
linux·服务器·1024程序员节
虚无的纽扣2 小时前
【Linux】线程同步:条件不满足时,线程该怎么等
linux·服务器·1024程序员节
爱好曙光2 小时前
生产延迟尖刺排查:用 bpftrace 抓系统调用与调度延迟
linux·ebpf·延迟·性能排查·bpftrace
Ruiery3 小时前
Linux 6.6内核并发与同步(一):原子操作与内存屏障 — 内核同步的硬件底座
linux·运维·服务器·1024程序员节
码完就睡3 小时前
Linux——IP协议与路由选择
linux·网络·tcp/ip·1024程序员节
H.莓飛3 小时前
【数据结构】排序_OJ题(二):划分与选择
linux·服务器·c语言·开发语言·数据结构·visual studio
艸肅3 小时前
Docker 国内镜像源配置
linux·ubuntu·docker·1024程序员节