安全启动

适用于:Jetson Xavier NX 系列、初代 Jetson Nano、Jetson AGX Xavier 系列、Jetson TX2 系列和 Jetson TX1
NVIDIA® Jetson™ Linux 驱动程序包 (L4T) 使用安全启动包提供启动安全性。安全启动通过信任链防止执行未经授权的启动代码。信任根是片上 BootROM 代码,它使用存储在一次写入多次读取熔丝器件中的公钥密码学 (PKC) 密钥验证启动代码,例如 BCT、引导加载程序和热启动向量。在支持安全启动密钥 (SBK) 的 Jetson 平台上,您可以使用它来加密引导加载程序镜像。

熔丝和安全性

NVIDIA SoC 包含多个熔丝,用于控制安全性和启动的不同项目。一旦熔丝位设置为 1,您就无法将其值更改回 0。例如,熔丝值 1 (0x01) 可以更改为 3 (0x03) 或 5 (0x05),但不能更改为 4 (0x4),因为位 0 已被编程为 1。
一旦 odm_production_mode 熔丝的值为 0x1,所有进一步的熔丝写入请求都将被阻止,并且熔丝值可通过提供的 API 获得。但是,odm_reservedodm_lock 字段仍然可写,直到 odm_lock 位通过将该位的值从 0 更改为 1 进行编程。
尽管 SoC 熔丝是可写的,但您必须使用 odmfuse.sh 脚本来编程这些熔丝:public_key_hashpkc_disable(仅限 T210)、secure_boot_keyodm_production_mode
以下两个表描述了与安全启动相关的用户可编程熔丝。
适用于以下产品的安全启动熔丝
Jetson Nano 和 Jetson TX1 (T210 处理器)
位大小
名称
odmfuse.sh 设置的默认值
1
odm_production_mode
0x1
256
public_key_hash
RSA 公钥哈希
 
与以下产品的安全启动相关的软件和配置熔丝
Jetson Xavier NX 系列和 Jetson AGX Xavier 系列 (T194)
和 Jetson TX2 系列 (T186)
位大小
名称
odmfuse.sh 设置的默认值
1
odm_production_mode
0x1。
256
public_key_hash
RSA 公钥哈希。
128
secure_boot_key *
安全启动密钥 (SBK):用于加密引导加载程序的 AES 加密密钥。
128
KEK0 *
四个 32 位寄存器,名为 KEK00 到 KEK03。
128
KEK1 *
四个 32 位寄存器,名为 KEK10 到 KEK13。
256
KEK256
不是一个单独的熔丝;将 KEK0 和 KEK1 作为单个 256 位熔丝进行寻址。
128
KEK2 *
四个 32 位寄存器,名为 KEK20 到 KEK23。
* 您可以使用 secure_boot_key 或宽度不同的三个密钥加密密钥的组合作为密钥种子来编码密钥。例如,当启用 TOS 时,KEK2 可以用作密钥种子来加密和解密加密密钥 Blob (EKB)。
用户处理的熔丝如下
位大小
名称
odmfuse.sh 设置的默认值
1
jtag_disable
0x0:启用 JTAG(默认值)。
0x1:禁用 JTAG。
256
odm_reserved
用户自主编程的熔丝。但是,32 个 MSB 保留供 NVIDIA 使用。
4
odm_lock
设置的每个位都会禁用对相应 32 位 ODM 熔丝的写入。
例如:0x2 锁定 odm_reserved 的位 32-63。
14
sec_boot_dev_cfg
根据 sec_boot_dev_sel,每个位都有不同的含义。
8
sw_reserved
配置选项的位图。此处未描述的位已保留。
位 2-0:sec_boot_dev_sel。仅当启用 ignore_dev_sel_straps 时才有意义
0=eMMC,1=SPI。
位 3:ignore_dev_sel_straps。1=忽略设备选择引导程序。
位 5:enable_watchdog
位 23:1=禁用 RCM 模式(仅限 T194)。
有关硬件熔丝和熔丝名称的详细信息,请查阅以下文档
对于 NVIDIA® Jetson Xavier™ NX:Jetson Xavier NX 熔丝规格应用说明
对于 NVIDIA Jetson Nano™ 和 Jetson TX1:Jetson TX1 熔丝规格
对于 NVIDIA Jetson AGX Xavier™ 系列:Jetson AGX Xavier 系列熔丝规格应用说明
对于 NVIDIA Jetson TX2 系列(不包括 Jetson TX2 NX):Jetson TX2 系列熔丝规格应用说明
以下两个表描述了 tegraflash 识别的熔丝名称别名。
tegraflash 识别的 T210 熔丝名称别名
名称
tegraflash 别名和注释
odm_production_mode
SecurityMode
public_key_hash
PublicKeyHash
pkc_disable
PkcDisable
secure_boot_key
SecureBootKey
device_key
DeviceKey
jtag_disable
JtagDisable
odm_reserved
ReservedOdm
odm_lock
OdmLock
sec_boot_dev_cfg
SecBootDeviceSelect
sw_reserved
SwReserved
 
tegraflash 识别的 T186 和 T194 熔丝名称别名
名称
tegraflash 别名和注释
odm_production_mode
SecurityMode
public_key_hash
PublicKeyHash
secure_boot_key
SecureBootKey
Security_info
BootSecurityInfo
Key_encryption_key_0
Kek0
Key_encryption_key_1
Kek1
Key_encryption_key_256
Kek256
Key_encryption_key_2
Kek2
jtag_disable
JtagDisable
odm_reserved0, odm_reserved1,… odm_reserved7
ReservedOdm0, ReservedOdm1,… ReservedOdm7
客户可编程熔丝;在 FUSE_SECURITY_MODE 编程后仍可编程。
默认值(当没有编程保留 ODM 熔丝时)为全零。
这些熔丝的一个预期应用是软件版本撤销。您可以自行决定将它们用于其他目的。
odm_reserved8,… odm_reserved11
ReservedOdm8,… ReservedOdm11(仅限 T194)
保留供 NVIDIA 使用。请勿使用这些熔丝。客户编程这些熔丝可能会导致启动失败和意外行为。
odm_lock
OdmLock
每个位都会禁用对其中一个 ReservedOdm 熔丝的进一步更改。只有前四个 ReservedOdm 熔丝可以通过这种方式禁用。
OdmLock[0] 禁用 ReservedOdm0
OdmLock[1] 禁用 ReservedOdm1
OdmLock[2] 禁用 ReservedOdm2
OdmLock[3] 禁用 ReservedOdm3
sec_boot_dev_cfg
SecBootDeviceSelect
sw_reserved
SwReserved

总体熔丝烧录和签名二进制文件流程

使用 PKC(和 SBK)的安全启动过程要求您执行以下操作
安装安全启动包。
如有必要,准备 DK(KEK)、SBK 和 ODM 熔丝值。
生成 RSA 密钥对。
准备 SBK 密钥(如果使用 flash.sh ‑v 选项)。
准备用户密钥(如果使用 flash.sh ‑‑user_key 选项)。
烧录 DK(KEK)、ODM 熔丝、PKC/SBK、安全信息和 odm_production_mode 熔丝。
使用 PKC(和 SBK)对启动镜像文件进行签名。
刷写签名的启动镜像文件。
注意
烧录 odm_production_mode 熔丝是为了保护 SoC 设备免受错误的 ODM 生产熔丝烧录。
ODM_RESERVEDODM_LOCK 熔丝在 ODM_LOCK 位烧录之前仍然可写。

安装安全启动包

前提条件
运行 Ubuntu 16.04 或 18.04 LTS 的 X86 主机
用于 USB 调试端口支持的 libftdi-dev
用于 OpenSSL 的 openssh-server
主机上最新 L4T 版本的完整安装
从 NVIDIA 开发者站点的 Jetson Linux 页面下载最新版本。
早期版本的安全启动可从 Jetson 下载中心 获取。
NVIDIA® Jetson™ 平台通过 USB 电缆连接到主机
调试串行端口连接到主机(如果需要)
安装安全启动
1. 从发布页面下载适用于您的平台和 Jetson Linux 版本的安全启动包版本。
发布页面的 URL 格式如下
https://developer.nvidia.com/embedded/linux-tegra-r<rel>
其中 <rel> 是去除了点的 Jetson Linux 版本号。例如,Jetson Linux 版本 32.6.1 的 URL 的最后一段是 linux-tegra-r3261
2. 转到包含 Linux_for_Tegra 目录的目录。(此目录在安装 Jetson 板级支持包时创建。)
3. 输入此命令以解压下载的文件
tar xvjf secureboot_<release_version>.tbz2
此命令将文件内容覆盖到 Linux_for_Tegra 目录。

生成 RSA 密钥对

安全启动需要长度为 2048 位 (RSA 2K) 或 3072 位 (RSA 3K) 的 RSA 密钥对。
注意
3072 位 RSA 密钥选项仅在 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列平台上受支持。
生成密钥对
1. 执行以下命令之一。
生成 RSA 2K 密钥
$ openssl genrsa -out rsa_priv.pem 2048
生成 RSA 3K 密钥
$ openssl genrsa -out rsa_priv.pem 3072
成功执行后,OpenSSL 会生成名为 rsa_priv.pem 的密钥文件。
2. 重命名并安全地保存密钥文件。
密钥文件用于为 Jetson 设备烧录熔丝和签名启动文件。设备的安全性取决于您密钥文件的安全保管程度。
为了确保密钥文件的安全性,请将访问权限限制为最少数量的人员。
注意
要生成真正的随机数密钥,请使用硬件安全模块 (HSM)。
有关输出格式和私钥转换为 PEM 格式的信息,请参阅硬件安全模块用户指南。

准备 SBK 密钥

适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
如果要加密引导加载程序(和 TOS),则必须准备 SBK 熔丝位。
注意
您只能将 SBK 密钥与 PKC 密钥一起使用。同时使用这两个密钥的加密模式称为 SBKPKC。
SBK 密钥由四个 32 位字组成,以大端十六进制格式存储在一个文件中。以下是 SBK 密钥文件的示例
0x12345678 0x9abcdef0 0xfedcba98 0x76543210
在熔丝 XML 文件中的表示形式为
0x123456789abcdef0fedcba9876543210

准备用户密钥

适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
如果要加密内核镜像(kernelkernel-dtbinitrdextlinux.conf 文件),则必须准备用户密钥。您需要用户密钥以及 SBK 密钥和 PKC 密钥。
用户密钥以加密形式存储在加密密钥blob (EKB) 中。安全引擎 (SE) 从 EKB 中检索用户密钥,并使用它来解密内核镜像文件。
有关如何生成 EKB 的信息,请参阅主题EKB 生成中的Trusty,可信执行环境
您必须在 flash.sh 中使用相同的用户密钥来加密内核镜像。该脚本会将 EKB 与加密的内核镜像一起刷写到目标设备。EKB 被刷写到 EKS 分区。
用户密钥必须以两种不同的格式指定以用于不同的目的
对于在 flash.sh 命令的 ‑‑user_key 命令行选项中使用,它是一个文件,其中包含四个大端 32 位字,存储为四个 8 位十六进制数字。(‑‑user_key 选项指定此文件的路径名。)以下是此格式的用户密钥示例
0x12345678 0x9abcdef0 0xffeeddcc 0xbbaa9988
对于在生成 EKB 时使用,它是一个文件,其中包含 32 个十六进制数字,这些数字表示相同的密钥,被解释为单个大端 128 位值。这是一个示例
123456789abcdef0ffeeddccbbaa9988
有关更多信息,请参阅主题EKB 生成中的Trusty,可信执行环境

准备 DK(KEK)/ODM 熔丝

如果要使用其他安全应用程序,则必须按照其他安全应用程序的文档中所述准备 DK(KEK) 和其他 ODM 熔丝位。
名称
描述
DK
以大端 HEX 格式存储在文件中的 32 位数字。
适用于:Jetson Nano 和 Jetson TX1
示例:0xddccbbaa
KEK0
KEK1
KEK2
以大端 HEX 格式存储在文件中的 128 位数字。
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
KEK256
以大端 HEX 格式存储在文件中的 256 位数字。
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
ODM 熔丝位
要使用安全启动以外的应用程序,可能需要额外的 ODM 熔丝位。特定的熔丝信息因所使用的应用程序而异。请查阅所用应用程序的用户指南。
 
注意
十六进制数必须以大端格式表示。可以省略前导 0x 或 0X。Jetson 安全启动软件将大端十六进制格式转换为 Jetson 设备期望的格式。所有标准 OpenSSL 实用程序都以大端格式输出。

烧录 PKC [DK(KEK), SBK] 熔丝

使用私钥文件 PEM 格式烧录 PKC、DK 和 SBK 熔丝的步骤如下。
烧录 PKC 熔丝
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 使用 odmfuse.sh 脚本烧录熔丝。有关常见操作示例,请参阅odmfuse.sh 命令行选项示例
注意
odmfuse.sh 使用 OpenSSL 烧录 PKC 熔丝。

odmfuse.sh 选项

对于 PKC 密钥和 odm_production_mode 熔丝以外的熔丝,odmfuse.sh 允许您编程完全由您自行决定的 ODM 熔丝。如果您不打算修改这些熔丝,请跳过本主题。
用于熔断某些 ODM 熔丝的 odmfuse.sh 命令行选项如下
选项
描述
-d 0xXXXX
设置 sec_boot_dev_cfg=<value>&0x3fff。有关详细信息,请参阅 TRM。
-disable-jtag
禁用 JTAG。使用此选项可阻止使用 JTAG 调试器。
-l 0xX
odm_lock 设置为指定值。设置每个位会锁定(使其只读)odm_reserved 字段中相应的 32 位字。
例如,将 odm_lock 设置为 0x1 会锁定 odm_reserved 的第一个 32 位字。将 odm_lock 设置为 0x5 会锁定 odm_reserved 的第一个和第三个 32 位字,依此类推。
-o <value>
适用于:仅限 Jetson Nano 设备和 Jetson TX1
odm_reserved 设置为指定值。该值必须是带引号的 256 位(64 位数字)十六进制数,格式为 "0xnnnn… nnnn"。最后 32 位(八位数字)必须全为零,因为这些位保留供 NVIDIA 使用。
--odm_reserved[0–7]
适用于:仅限 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
odm_reserved[n] 设置为指定值。该值必须是带引号的 32 位(八位数字)十六进制数,格式为 0xnnnnnnnn
-p
设置生产模式。
-r 0xXX
设置 sw_reserved=0xXX。位定义如下
位 7-6:保留。
位 5:Enable_watchdog。
位 4:保留。
位 3:ignore_dev_sel_straps:忽略设备选择引导程序。
位 2-0:sec_boot_dev_sel:启动设备:0=eMMC,1=SPI。
-D <DK_file>
适用于:仅限 Jetson Nano 设备和 Jetson TX1
设置高级安全应用程序用于生成应用程序加密密钥的设备密钥。<DK_file> 的内容必须是 HEX 格式的单个 32 位大端 HASH。
-S <SBK_file>
设置用于加密引导加载程序和 TOS 的安全启动密钥。<SBK_file> 的内容必须是十六进制格式的四个 32 位大端数字。
对于 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列,此密钥必须与 PKC 密钥一起使用。
对于 Jetson TX1 和 Jetson Nano,此密钥必须与 PKC 密钥和 pkc_disable = 0 一起使用。此密钥不会用于加密引导加载程序,高级应用程序可以将其用作加密密钥。
--noburn
准备要在工厂车间重复使用的熔丝 Blob。
此选项生成 Linux_for_Tegra/‌fuseblob.tbz2,可以在工厂主机的 Linux_for_Tegra 目录中下载和解压。
Linux_for_Tegra 目录中解压 fuseblob.tbz2 后,Linux_for_Tegra/‌bootloader/‌fusecmd.sh 用于重复烧录熔丝,而不是标准的 odmfuse.sh
--KEK0
--KEK1
--KEK2 <path>
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
其他安全应用程序将用于加密/解密密钥的密钥加密密钥文件的路径名。文件的内容必须是十六进制格式的单个 128 位大端数字。
--KEK256 <path>
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列、Jetson TX2 系列
高级安全应用程序将用于加密应用程序密钥的 256 位密钥加密密钥文件的路径名。文件的内容必须是十六进制格式的单个 256 位大端数字。
--auth
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
设置板的身份验证状态。可能的值为:NS(非安全)、PKC 和 SBKPKC。
仅当在未连接任何板的情况下运行 odmfuse.sh 时(即在离线模式下)使用此选项。要在离线模式下运行 odmfuse.sh
1. 在命令行上使用 --noburn
2. 通过在命令行上设置这些环境变量来指定载板。您可以从 Jetson 模块的 EEPROM 中获取适当的值,如Jetson 模块 EEPROM 布局主题中所述。
BOARDID: 使用“板号”字段的值。
FAB:使用“FAB 编号”字段的值。
BOARDSKU:使用“SKU 编号”字段的值。
BOARDREV:使用“主修订版本”和“次修订版本”字段的值,以句点分隔。
例如
sudo FAB=400 BOARDID=2888 BOARDSKU=0006 BOARDREV=B.0 ./odmfuse.sh --noburn -i 0x19 --auth SBKPKC -p -k <pkc> --KEK2 <kek2> -S <sbk> jetson-xavier-8gb
--test
阻止脚本实际烧录熔丝。像往常一样执行预烧录处理和测试。此选项通常用于熔丝烧录测试,因为熔丝值一旦烧录就无法更改。
熔丝烧录操作的非破坏性测试
熔丝烧录操作是高风险的,因为它们无法逆转。NVIDIA 强烈建议您使用 ‑‑test 选项来验证熔丝烧录操作,然后再执行它们。
当您将 ‑‑test 添加到 odmfuse.sh 命令时,该命令会执行预烧录处理和验证,但实际上不会烧录熔丝。如果该命令报告了您想要的结果,您可以重新输入不带 ‑‑test 的命令,并更有信心地烧录熔丝,确保您正确地执行了操作。
odmfuse.sh 选项示例
仅烧录 PKC 安全熔丝(仅限 Jetson Nano 设备和 Jetson TX1)
sudo ./odmfuse.sh -i <chip_id> -c PKC -k <PKC file>
从启用 JTAG 的 .pem 文件烧录 PKC HASH
对于 Jetson Nano 设备和 Jetson TX1
$ sudo ./odmfuse.sh -i <chip_id> -c PKC -p -k <key.pem> [-D <DK_file>]
对于 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
$ sudo ./odmfuse.sh -i <chip_id> -p -k <key.pem> --KEK[0-2] <KEK file> -S <SBK_file> > <device_name>
从禁用 JTAG 的 .pem 文件烧录 PKC HASH
对于 Jetson Nano 设备和 Jetson TX1
$ sudo ./odmfuse.sh -i <chip_id> -c PKC -p -k <key.pem> [-D <DK_file>] --disable-jtag
对于 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
$ sudo ./odmfuse.sh -i <chip_id> -p -k <key.pem> --KEK[0-2] <KEK file> -S <SBK_file> --disable-jtag <device_name>
烧录包含 PKC、SBK 和 KEK2 的安全熔丝(仅限 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列)
sudo ./odmfuse.sh -i <chip_id> -k <PKC file> -S <SBK file> --KEK2 <KEK2 file> <device_name>
烧录包含 PKC 和 KEK2 的安全熔丝(仅限 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列)
sudo ./odmfuse.sh -i <chip_id> -k <PKC file> --KEK2 <KEK2 file> <device_name>
烧录包含 PKC 和加密服务准备的安全熔丝(仅限 Jetson Nano 设备和 Jetson TX1)
sudo ./odmfuse.sh -i <chip_id> -c PKC -k <PKC file> -D <DK_file>
在启用 JTAG 的情况下保护 ODM 生产熔丝(仅限 T210)
$ sudo ./odmfuse.sh -i <chip_id> -c NS -p
在禁用 JTAG 的情况下保护 ODM 生产熔丝(仅限 T210)
$ sudo ./odmfuse.sh –disable-jtag -i <chip_id> -c NS -p
其中
<chip_id>
对于 Jetson Xavier NX 系列:0x19
对于 Jetson Nano(生产模块):0x21
对于 Jetson Nano(仅限 4 GB 开发模块):0x21
对于 Jetson AGX Xavier 系列:0x19
对于 Jetson TX2 系列:0x18
对于 Jetson TX1:0x21
<device_name> 是您正在使用的 Jetson 平台的设备名称,如设备名称表主题中的快速入门所示。此占位符不适用于 Jetson Nano 设备或 Jetson TX1。
对于 Jetson Xavier NX 系列:jetson-xavier-nx-devkit-emmc
对于 Jetson AGX Xavier 系列:jetson-agx-xavier-devkit
对于 Jetson TX2 系列:jetson-tx2-devkit

签名和刷写启动文件

您可以使用以下步骤来签名和刷写启动文件
一步完成,仅使用 PKC 密钥或零密钥签名(使用全为 0 的密钥文件进行签名)
一步完成,同时使用 SBK 和 PKC 密钥签名
分步完成
注意
当您重新刷写先前刷写过的设备时,必须确定设备上已使用的签名类型,并使用相同的类型重新刷写。这是因为签名类型由只能写入一次的熔丝指定。例如,如果设备首先使用 PKC 签名进行刷写,则该签名类型会烧录到其熔丝中,并且以后无法使用 SBKPKC 签名重新刷写。
如果未指定密钥文件,则刷写实用程序将使用零密钥签名。
刷写实用程序使用 OpenSSL 对启动文件进行签名。
您可以在 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列上使用此过程来加密 bootloaderkernelkernel-dtbinitrd。在 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列上,您可以加密和签名 extlinux.conf
要分别加密和签名 kernelkernel-dtbinitrdextlinux.conf,请参阅签名和加密内核、内核 DTB 和 Initrd 二进制文件部分。
步骤中使用的占位符
本节中描述的步骤在其命令中使用以下占位符
<pkc_keyfile> 是 RSA 2K 或 3K 密钥文件。
<sbk_keyfile> 是 SBK 密钥文件。
<user_keyfile> 是用户密钥文件。
<device_name> 是您的 Jetson 设备的设备名称;请参阅设备表主题中的快速入门
一步完成,使用 PKC 密钥或零密钥签名进行签名和刷写
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 输入以下命令之一
使用 PKC 签名二进制文件刷写 Jetson 设备
$ sudo ./flash.sh -u <pkc_keyfile> <device_name> mmcblk0p1
使用零密钥签名二进制文件刷写 Jetson 设备
$ sudo ./flash.sh <device_name> mmcblk0p1
一步完成,使用 SBK 和 PKC 密钥进行签名和刷写
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 输入命令
$ sudo ./flash.sh -u <pkc_keyfile> -v <sbk_keyfile> <device_name> mmcblk0p1
 
注意
PKC 密钥文件和 SBK 密钥文件都不能放在 bootloader 目录下。
如果您未在命令中指定 -–user_key,则刷写实用程序将使用零密钥作为用户密钥。
一步完成,使用用户密钥、SBK 和 PKC 密钥进行签名和刷写
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 输入此命令
$ sudo ./flash.sh -u <pkc_keyfile> -v <sbk_keyfile> --user_key <user_keyfile> <device_name> mmcblk0p1
注意
PKC 密钥文件、SBK 密钥文件和用户密钥文件都不能放在 bootloader 目录下。
此过程与使用 PKC 密钥或零密钥签名或同时使用 PKC 密钥和 SBK 密钥从 NFS 签名和刷写下文的主题内容重叠,但它使用 flash.sh 从目标设备上的镜像进行刷写,而该过程从 NFS 上的镜像进行刷写。
分步完成签名和刷写
1. 对启动文件进行签名。
使用 PKC 密钥或零密钥签名
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 输入以下命令之一
仅适用于 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列的 PKC 密钥签名
$ sudo ./flash.sh –-no-flash --sign -u <keyfile> <device_name> mmcblk0p1
仅适用于 Jetson Nano (量产模块) 和 Jetson TX1
$ sudo ./flash.sh --no-flash --sign -x 0x21 -y PKC -u <keyfile> <device_name> mmcblk0p1
适用于所有模块的零密钥签名
$ sudo ./flash.sh –-no-flash <device_name> mmcblk0p1
使用 SBK 和 PKC 密钥签名
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 和 Jetson TX2 系列
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 输入命令
$ sudo./flash.sh –-no-flash --sign -u <pkc_keyfile> -v <sbk_keyfile> <device_name> mmcblk0p1
 
注意
PKC 密钥文件和 SBK 密钥文件都不得放置在 Bootloader 目录下。
如果在命令中未指定 -–user_key,刷写实用程序将使用零密钥作为用户密钥。
使用用户、SBK 和 PKC 密钥签名
适用于:Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 输入命令
$ sudo ./flash.sh –-no-flash --sign -u <pkc_keyfile> -v <sbk_keyfile> --user_key <user_keyfile> <device_name> mmcblk0p1
 
注意
PKC 密钥文件、SBK 密钥文件和用户密钥文件均不得放置在 Bootloader 目录下。
2. 刷写
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 输入以下命令
$ cd bootloader
$ sudo bash ./flashcmd.txt
 
注意
即使 Jetson 设备在熔断后仍处于恢复模式,也请务必按下并重置恢复按钮。
要使用 PKC 密钥或零密钥签名或 PKC 密钥和 SBK 密钥两者来签名和刷写 initrd
1. 将 Jetson 设备置于强制恢复模式。
2. 输入此命令以签名镜像
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --no-flash -u <pkc_keyfile> [-v <sbk_keyfile>] <board_name> <rootdev>
其中(除了 程序中使用的占位符 中描述的占位符之外)
<board_name> 是目标设备的 环境变量 BOARD 的值。(请参阅主题 快速入门 中的表 Jetson 模块和配置。)
<rootdev> 指定根文件系统所在的设备,如主题 基本刷写脚本用法 中所述。
3. 输入此命令以刷写目标设备
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --flash-only -u <pkc_keyfile> [-v <sbk_keyfile>] <board_name> <rootdev>
其中 <board_name><rootdev> 与步骤 2上方 中的相同。

从目标设备访问熔丝

Jetson 安全启动包提供了在目标板启动后从目标板访问熔丝的方法。
要从目标板访问熔丝
1. <top>.../Linux_for_Tegra/pkc/tegrafuse.sh 脚本复制到 ubuntu@<target IP address>
2. 要从目标板访问目标板的熔丝,请登录到目标板。要显示所有熔丝,请输入命令
$ sudo ./tegrafuse.sh
要通过强制恢复模式从目标板访问熔丝
适用于:仅限 Jetson Xavier NX 系列、Jetson AGX Xavier 系列和 Jetson TX2 系列
1. 导航到安装 L4T 的目录。
2. 将 Jetson 设备置于强制恢复模式。
3. 输入命令
$ sudo ./odmfuseread.sh -i <0x18 or 0x19> [-k <pkc_keyfile>] [-S <sbk_keyfile>] <device_name>

烧录到多个 Jetson 设备

NVIDIA 提供了一个工具和说明,用于在工厂环境中高效地熔断 Jetson 设备。此工具是安全启动包的一部分,位于 Linux_for_Tegra 文件夹中。有关使用该工具的说明,请参阅位于同一文件夹中的 README_Massfuse.txt

构建和刷写工厂签名的固件 Blob

L4T 提供了两个示例实现,用于在工厂环境中刷写工厂签名的固件。
要在可信环境中构建固件 blob
请参阅 Linux_for_Tegra/README_Massflash.txt 中的“在可信环境中构建 Massflash Blob”。
要在工厂环境中刷写固件 blob
请参阅 Linux_for_Tegra/README_Massflash.txt 中的“在非可信环境中刷写 Massflash Blob”。

签名和加密内核、内核 DTB、Initrd 和 extlinux.conf 文件

适用于:Jetson Xavier NX 系列和 Jetson AGX Xavier 系列
为了支持安全启动,kernelkernel-dtbinitrdextlinux.conf 文件必须使用密钥进行加密和签名,以生成加密文件和签名文件。
RSA 密钥对文件(下面脚本命令中的 <keyfile>)用于生成用于验证文件的签名文件。
128 位密钥(下面脚本命令中的 <encrypt_keyfile>)用于加密文件。
要签名 kernel、kernel-dtb、initrd 和 extlinux.conf 文件
1. 导航到主机系统上的 Linux_for_Tegra/ 目录,
2. 输入此命令
$ ./l4t_sign_image.sh --file <filename> --chip 0x19 --key <keyfile>] --encrypt_key <encrypt_keyfile> --type <filetype> --minratchet_config <ratchet>
其中
<filename> 是要加密和签名的 kernelkernel-dtbinitrdextlinux.conf 文件。
该脚本会替换此文件,因此在运行脚本之前请保存旧文件的副本。
该脚本会将名为 <filename>.sig 的签名文件存储在包含 <filename> 的目录中。
有关使用签名文件验证 kernelkernel-dtbinitrd 文件的详细信息,请参阅主题 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列启动流程中“使用 extlinux.conf 的内核启动序列”部分。
<keyfile> 是 RSA 密钥对文件(.pem 文件)。它提供值来填充签名文件中的密钥字段。如果未指定密钥选项,则密钥字段将填充为 0。
有关如何生成 RSA 密钥对文件的信息,请参阅 生成 RSA 密钥对 部分。
<encrypt_keyfile> 是包含四个 32 位大端十六进制格式数字的文件的路径名。它与用于刷写目标的 <user_keyfile> 文件相同,并且包含与用于生成 EKB 的密钥相同的密钥。
有关用户密钥的信息,请参阅 准备用户密钥 部分。
<filetype> 是文件的类型。该命令支持三种类型:kernelkernel_dtbdata
<ratchet> 是棘轮配置文件路径。该文件位于以下位置
对于 NVIDIA Jetson Xavier NX 系列
Linux_for_Tegra/bootloader/t186ref/BCT/tegra194-mb1-bct-ratchet-p3668.cfg
对于 NVIDIA Jetson AGX Xavier 系列
Linux_for_Tegra/bootloader/t186ref/BCT/tegra194-mb1-bct-ratchet-p2888-0000-p2822-0000.cfg