文章目录
这是Nvidia的Jetson NX启动的大致流程介绍,适用于Jetson Xavier NX和Jetson AGX Xiavier系列。其他系列的启动流程与本文档有差异。
英文版原文可参考:
https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/bootflow_jetson_xavier.html#wwpID0E0AE0HA
Linux分层和BootLoader介绍可以参考:
嵌入式Linux操作系统引导加载程序BootLoarder
启动软件启动流程大致如下:

Soc:System on Chip
BootRom: 即BR
MB: Microboot
Tboot:
BPMP:
BPMP-FW:
ATF:
CBoot: Cold Boot
BootROM
BootROM(BR)是通过硬件链接的方式安装在了处理器中。 它将初始化启动媒体(硬盘或外部存储)并从中加载Microboot1(MB1)。
BR-BCT(BootROM Configuration Table)是启动时的硬件初始化配置表,包含BootROM用于硬件初始化的配置参数。启动硬件/媒体的初始地址中存有多份BR-BCT硬件配置表。
BCT还包含有关引导加载程序(BL, bootloader)的信息,包括:
- Size:加载程序的大小
- Entry Point: 加载程序BL的程序进入点
- Load address:加载地址
- Hash哈希:对应的哈希
BootROM使用此信息来验证和加载引导加载程序。 引导流程如下:

BootLoader Components加载程序组成
对于NVIDIA Jetson Xavier NX和Jetson AGX Xavier系列,引导加载程序和闪存组件为:
- Microboot1(MB1)
- TBoot-BPMP
- CPU-BL
- TBoot-CPU(用于烧录flashing)
- CBoot(用于冷启动cold boot)
通用驱动程序框架
TBoot-BPMP,Tboot-CPU和CBoot需要使用通用的驱动程序drivers,一些二进制库在整个引导加载程序组件中也是公用的。 二进制文件共享一个称为“公共驱动程序框架”(CDF)的公共驱动程序和库,而不是使用单独的驱动程序和库集。
驱动程序框架的软件结构如下:

通用驱动程序框架包括:
- 存储驱动程序,如eMMC,QSPI-NOR,mSATA和UFS
- 主机接口驱动程序,例如UART,USB
- 显示驱动程序(HDMI,DP和eDP)
- Debug和Console库
- 其他模块的库,例如:
- 时钟
- SE
- PMIC
- 计时器
- Fuss
- GPIO
- PWM
- EEPROM
- 键盘
- PSCI
- USB主机模式(仅2.0模式)
- USB主机类驱动程序(仅大容量存储设备,不支持集线器或HID)
- 软件库,如:
- Cryptographic
- Transport
- Partition Manager
- Sparse
- Transport Libraries
- 支持LZF,Zlib和LZ4的解压缩库
- clib,动态内存分配库和缓存库
CDF位于:
<top>/vendor/nvidia/tegra/bootloader/partner/common/
<top>/vendor/nvidia/tegra/bootloader/partner/t18x/common/
Microboot1, MB1
对于Jetson Xavier NX和Jetson AGX Xavier系列,Microboot1(MB1)是BR在SysRAM中加载的第一个引导软件组件,并在BPMP上运行。 该组件实现某些平台的初始化(包括CPU)和安全性配置。
MB1由NVIDIA拥有的密钥签名和加密。 下图显示了MB1中的控制流程:

MB1负责:
- Platform配置,包括pinmux,GPIO,pad voltage,SCRs和防火墙
- 根据MB1引导配置表(MB1-BCT)初始化SDRAM
- 加载固件firmwares,包括用于初始化CPU complex(CCplex)的固件
- 对PMIC进行编程以启用VDD_CPU电源轨
- 创建内存carveouts
- 加载下一阶段的引导加载程序,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有两种variants:
- 一个用于Cold Boot
- 一个用于flashing和RCM(recovery)boot
TBoot-BPMP主要负责:
- 加载和初始化固件(FW)
- 创建内存 carveouts
- unhalting CPU
- 加载下一阶段的引导程序
- 支持flashing
- 支持RCM boot
TBoot-BPMP的组件如下:

TegraBoot-CPU
TegraBoot-CPU负责:
- flashing
- RCM boot
RCM引导流程类似于cold boot,不同之处在于二进制文件是通过USB传入并直接加载到SDRAM的。TOS和BPMP-FW则于此不同。
NOTES: The CPU starts execution in EL3 mode, and executes the TOS monitor. The TOS monitor completes its initialization and gives control to the TegraBoot-CPU in EL2 mode. It then initializes the USB and starts the 3P protocol to flash the device.
- 对于正常flashing,TegraBoot-CPU会从host中逐一提取二进制文件,并将其刷新到设备中。
- 在RCM引导中,TegraBoot-CPU将通过USB下载二进制文件。 二进制文件不会刷新到设备上。
TBoot-CPU的组件如下:

Cboot,Cold boot
在Jetson Xavier NX和Jetson AGX Xavier系列上,CBoot是冷启动路径中使用的主要的CPU引导加载程序。CBoot是基于Little Kernel(LK)的功能丰富的引导程序,它可以:
-
boots the kernel,启动内核
-
支持Display,boot logo和Secureboot
-
使用LK的interrupt和scheduling farmeworks
NOTES: The CPU starts in EL3 mode and executes the TOS monitor. The TOS completes its initialization and passes control to CBoot in EL2 mode.
BL和内核使用存储在单独分区中的设备树。
CBoot的组件如下:

extlinux.conf定义内核启动顺序
CBoot功能包括默认的启动扫描顺序,它按以下顺序扫描可启动设备:
- 外置SD卡
- USB设备
- 内部eMMC
- NFS设备
CBoot在每个可启动设备(NFS设备除外)的以下目录中寻找extlinux.conf配置文件:
/boot/extlinux
extlinux.conf文件是一个标准的文本格式文件,其中包含所有内核引导信息。它包含了定义内核选项的部分,指定内核二进制文件、kernel-dtb二进制文件以及内核启动命令行(kernel boot command line)。
找到extlinux.conf文件后,CBoot将执行以下步骤:
- 从extlinux.conf读取启动配置
- 显示内核选项
- 等待用户选择内核选项
- 如果用户在超时时间(3秒)到期之前没有响应,则执行DEFAULT选项
- 从LINUX entry加载内核二进制文件
- 从FDT entry加载kernel-dtb二进制文件
- 启动内核
启动完成后,用户可以在目录访问kernel和kernel-dtb二进制文件。
- 如果没有LINUX entry,则从kernel partition加载内核二进制文件。
- 如果没有FDT entry,则从kernel-dtb partition加载kernel-dtb二进制文件。默认的extlinux.conf文件中没有FDT entry。
例如,要替换dtb二进制文件,请将此命令添加到 /boot/extlinux/extlinux.conf 中:
FDT /boot/<dtb_file>
为了支持Secureboot,每个kernel二进制文件和kernel-dtb二进制文件都必须使用签名文件进行签名。
CBoot使用各自的签名文件对kernel二进制文件和kernel-dtb二进制文件进行身份验证。
CBoot假定签名文件与相应的二进制文件位于同一文件夹中,并且文件名带有.sig扩展名。
例如,如果内核二进制文件是/boot/Image,则内核签名文件名是/boot/Image.sig。
如果CBoot无法验证二进制文件(kernel或kernel-dtb),它将继续从其相应partition中加载二进制文件。
NOTES:if the board’s security fuse has not been burned, CBoot ignores the authentication result and continues to load/boot the kernel. In this way CBoot loosens this Secureboot policy so kernel developers can easily modify their kernel binary without going through signing procedure every time.
本文详细介绍了Nvidia Jetson Xavier NX和Jetson AGX Xavier系列的启动流程,从BootROM开始,经过Microboot1(MB1)、TegraBoot的BPMP和CPU组件,再到Cboot冷启动过程。每个阶段的功能和作用被逐一解析,包括固件加载、硬件初始化、驱动程序框架和内核启动顺序等关键步骤。
1418





