Jetson Xavier NX 系列和 Jetson AGX Xavier 系列启动流程

适用范围: 仅限 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列
启动软件中的控制流程如下。
A picture containing text, screenshot, diagram, rectangle Description automatically generated

BootROM

BootROM (BR) 硬连线在处理器中。它初始化启动介质并从启动介质加载 Microboot1 (MB1)。
多个 BootROM 启动配置表 (BR-BCT) 的副本可以存储在启动介质的开头。BR-BCT 包含 BootROM 用于硬件初始化的配置参数。
BCT 还包含有关引导加载程序 (BL) 的信息,包括
大小
入口点
加载地址
哈希值
BootROM 使用此信息来验证和加载引导加载程序。启动流程如下
C:\sw\swdocs\mobile\tegra\images\bdk_bootrom_flow.jpg

引导加载程序组件

对于 NVIDIA® Jetson™ Xavier NX 系列和 Jetson AGX Xavier™ 系列,引导加载程序和闪存组件包括
Microboot1 (MB1)
TBoot-BPMP
CPU-BL
TBoot-CPU(用于刷写)
CBoot(用于冷启动)
通用驱动框架
TBoot-BPMP、Tboot-CPU 和 CBoot 需要使用一组通用的驱动程序。此外,一些库在引导加载程序组件之间是通用的。二进制文件没有使用单独的驱动程序和库集,而是共享一个通用的驱动程序和库池,称为通用驱动框架 (CDF)。
通用驱动框架的软件架构如下。
A picture containing screenshot, text, number, font Description automatically generated
通用驱动框架包括
存储驱动程序,如 eMMC、QSPI-NOR、mSATA 和 UFS
主机接口驱动程序,如 UART、USB
显示驱动程序 (HDMI™、DP 和 eDP)
调试和控制台库
其他模块的库,例如
时钟
SE
PMIC
定时器
熔丝
GPIO
PWM
EEPROM
键盘
PSCI
USB 主机模式(仅限 2.0 模式)
USB 主机类驱动程序(仅限大容量存储设备,无集线器或 HID 支持)
软件库,例如
加密
传输
分区管理器
Sparse
传输库
支持 LZF、Zlib 和 LZ4 的解压缩库
clib、动态内存分配库和缓存库
CDF 在以下位置提供
<top>/vendor/nvidia/tegra/bootloader/partner/common/
<top>/vendor/nvidia/tegra/bootloader/partner/t18x/common/
Microboot1
对于 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列,Microboot1 (MB1) 是 BR 在 SysRAM 中加载的第一个启动软件组件,并在 BPMP 上运行。此组件实现某些平台初始化(包括 CPU)和安全配置。
MB1 由 NVIDIA 拥有的密钥签名和加密。下图显示了 MB1 中的控制流程。
C:\sw\swdocs\mobile\tegra\images\bdk_microboot.jpg
MB1 负责
平台配置,包括 pinmux、GPIO、焊盘电压、SCR 和防火墙
基于 MB1 启动配置表 (MB1-BCT) 初始化 SDRAM
加载固件,包括初始化 CPU 复合体 (CCplex) 的固件
对 PMIC 进行编程以启用 VDD_CPU 导轨
创建内存预留区
加载下一阶段引导加载程序 TBoot-BPMP
MB1 归 NVIDIA 所有,因此在 Jetson BSP 软件包中以二进制形式提供。虽然它是以二进制形式提供的,但您可以使用其启动配置表(称为 MB1-BCT)为特定平台配置其行为。
有关 MB1 的信息,请参阅 MB1 BCT。

TegraBoot

在 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列上,TegraBoot 是在 MB1 之后执行的引导加载程序组件。此组件分为两个部分
TBoot-BPMP
TBoot-CPU
它们在其上执行的处理器决定了哪个组件运行。
TegraBoot-BPMP
TegraBoot 的这一部分在 BPMP (TBoot-BPMP) 上运行。TegraBoot-BPMP 有两个变体
一个用于冷启动
一个用于刷写和 RCM(恢复)启动
TBoot-BPMP 负责
加载和初始化固件 (FW) 组件。
创建内存预留区
取消 CPU 暂停
加载下一阶段引导加载程序
支持刷写
支持 RCM 启动
TBoot-BPMP 的组件如下
A screenshot of a video game Description generated with high confidence
TegraBoot-CPU
TegraBoot-CPU 负责
刷写
RCM 启动
RCM 启动流程类似于冷启动,不同之处在于二进制文件通过 USB 从主机传输并直接加载到 SDRAM。在此路径中不加载 TOS 和 BPMP-FW。
注意
CPU 在 EL3 模式下开始执行,并执行 TOS 监视器。TOS 监视器完成其初始化并将控制权交给 EL2 模式下的 TegraBoot-CPU。然后,它初始化 USB 并启动 3P 协议以刷写设备。
对于正常刷写,TegraBoot-CPU 从主机逐个获取二进制文件并将它们刷写到设备。
在 RCM 启动中,TegraBoot-CPU 获取通过 USB 下载的二进制文件。二进制文件不会刷写到设备上。
TBoot-CPU 的组件如下

CBoot

在 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列上,CBoot 是在冷启动路径中移动平台上使用的主要 CPU 引导加载程序。CBoot 是基于 Little Kernel (LK) 的功能丰富的引导加载程序,它
查找并启动内核
查找并加载内核 DTB
支持显示、启动徽标和安全启动
使用 LK 的中断和调度框架
注意
CPU 在 EL3 模式下启动并执行 TOS 监视器。TOS 完成其初始化并将控制权传递给 EL2 模式下的 CBoot。
BL 和内核使用存储在单独分区中的单独设备树。
CBoot 的组件如下
A screenshot of a cell phone Description generated with very high confidence
使用 extlinux.conf 的内核启动顺序
CBoot 功能包括默认启动扫描顺序。它按以下顺序扫描可启动设备
1. 外部 SD 卡
2. 外部 NVMe 设备
3. USB 设备
4. 内部 eMMC
5. NFS 设备
CBoot 在每个可启动设备(NFS 设备除外)的以下目录中查找 extlinux.conf 配置文件
<rootfs>/boot/extlinux
文件 extlinux.conf 是一个标准文本格式文件,其中包含所有内核启动信息。它包含每个内核选择的部分,指示内核二进制文件名、kernel-dtb 二进制文件名和内核启动命令行。
找到 extlinux.conf 文件后,CBoot 执行以下步骤
1. extlinux.conf 读取启动配置
2. 显示内核选择
3. 等待用户选择内核
4. 如果用户在 TIMEOUT 期限(3 秒)到期前未响应,则选择 DEFAULT 选择
5. LINUX 条目加载内核二进制文件
6. FDT 条目加载 kernel-dtb 二进制文件
7. 启动内核
内核和 kernel-dtb 二进制文件在启动后可在 <rootfs> 位置供用户访问。
如果没有 LINUX 条目,则从 kernel 分区加载内核二进制文件。
如果没有 FDT 条目,则从 kernel-dtb 分区加载 kernel-dtb 二进制文件。
kernel 和 kernel-dtb 分区可能位于内部 eMMC、外部 SD 卡、USB 设备或外部 NVMe 设备上。
默认的 extlinux.conf 文件没有 FDT 条目。
例如,要替换 dtb 二进制文件,请将此命令添加到 /boot/extlinux/extlinux.conf
FDT /boot/<dtb_file>
其中 <dtb_file> 是文件名。
为了支持安全启动,每个内核二进制文件和 kernel-dtb 二进制文件都必须使用签名文件进行签名。CBoot 使用各自的签名文件验证内核二进制文件和 kernel-dtb 二进制文件。CBoot 假定签名文件与相应的二进制文件位于同一文件夹中,并且具有相同的文件名,扩展名为 .sig
例如,如果内核二进制文件是 /boot/Image,则内核签名文件名是 /boot/Image.sig
如果 CBoot 无法验证二进制文件(内核或 kernel-dtb),它将继续从其对应的分区加载该二进制文件。
注意
如果电路板的安全熔丝尚未熔断,则 CBoot 会忽略身份验证结果并继续加载/启动内核。通过这种方式,CBoot 放宽了此安全启动策略,以便内核开发人员可以轻松修改其内核二进制文件,而无需每次都执行签名程序。