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

启动软件启动流程大致如下:
Jetson Xavier NX and Jetson AGX Xavier Series启动流程
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使用此信息来验证和加载引导加载程序。 引导流程如下:
Jetson Xavier NX and Jetson AGX Xavier Series启动流程

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)的公共驱动程序和库,而不是使用单独的驱动程序和库集。

驱动程序框架的软件结构如下:
Jetson Xavier NX and Jetson AGX Xavier Series启动流程

通用驱动程序框架包括:

  • 存储驱动程序,如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中的控制流程:
Jetson Xavier NX and Jetson AGX Xavier Series启动流程

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的组件如下:
Jetson Xavier NX and Jetson AGX Xavier Series启动流程

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的组件如下:

Jetson Xavier NX and Jetson AGX Xavier Series启动流程

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的组件如下:
Jetson Xavier NX and Jetson AGX Xavier Series启动流程

extlinux.conf定义内核启动顺序

CBoot功能包括默认的启动扫描顺序,它按以下顺序扫描可启动设备:

  1. 外置SD卡
  2. USB设备
  3. 内部eMMC
  4. NFS设备

CBoot在每个可启动设备(NFS设备除外)的以下目录中寻找extlinux.conf配置文件:
/boot/extlinux

extlinux.conf文件是一个标准的文本格式文件,其中包含所有内核引导信息。它包含了定义内核选项的部分,指定内核二进制文件、kernel-dtb二进制文件以及内核启动命令行(kernel boot command line)。

找到extlinux.conf文件后,CBoot将执行以下步骤:

  1. 从extlinux.conf读取启动配置
  2. 显示内核选项
  3. 等待用户选择内核选项
  4. 如果用户在超时时间(3秒)到期之前没有响应,则执行DEFAULT选项
  5. 从LINUX entry加载内核二进制文件
  6. 从FDT entry加载kernel-dtb二进制文件
  7. 启动内核
    启动完成后,用户可以在目录访问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.
上一篇:Jetson Nano 安装ROS+OpenCV3.2.0+Turtlebot2 错误整理


下一篇:达梦数据库的备份与还原