Jetson Xavier NX and Jetson AGX Xavier Series启动流程
作者:互联网
文章目录
这是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.
标签:kernel,二进制,Series,MB1,Jetson,Xavier,CPU,CBoot,加载 来源: https://blog.csdn.net/DecadeLive/article/details/115177735