Jetson Xavier NX 系列和 Jetson AGX Xavier 系列启动流程
适用范围: 仅限 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列
启动软件中的控制流程如下。
BootROM
BootROM (BR) 硬连线在处理器中。它初始化启动介质并从启动介质加载 Microboot1 (MB1)。
多个 BootROM 启动配置表 (BR-BCT) 的副本可以存储在启动介质的开头。BR-BCT 包含 BootROM 用于硬件初始化的配置参数。
BCT 还包含有关引导加载程序 (BL) 的信息,包括
• 大小
• 入口点
• 加载地址
• 哈希值
BootROM 使用此信息来验证和加载引导加载程序。启动流程如下
引导加载程序组件
对于 NVIDIA® Jetson™ Xavier NX 系列和 Jetson AGX Xavier™ 系列,引导加载程序和闪存组件包括
• Microboot1 (MB1)
• TBoot-BPMP
• CPU-BL
• TBoot-CPU(用于刷写)
• CBoot(用于冷启动)
通用驱动框架
TBoot-BPMP、Tboot-CPU 和 CBoot 需要使用一组通用的驱动程序。此外,一些库在引导加载程序组件之间是通用的。二进制文件没有使用单独的驱动程序和库集,而是共享一个通用的驱动程序和库池,称为通用驱动框架 (CDF)。
通用驱动框架的软件架构如下。
通用驱动框架包括
• 存储驱动程序,如 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 中的控制流程。
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 的组件如下
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 的组件如下
使用 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 放宽了此安全启动策略,以便内核开发人员可以轻松修改其内核二进制文件,而无需每次都执行签名程序。 |