安全启动
适用于: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_reserved 和 odm_lock 字段仍然可写,直到 odm_lock 位通过将该位的值从 0 更改为 1 进行编程。
尽管 SoC 熔丝是可写的,但您必须使用 odmfuse.sh 脚本来编程这些熔丝:public_key_hash、pkc_disable(仅限 T210)、secure_boot_key 和 odm_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)。 |
有关硬件熔丝和熔丝名称的详细信息,请查阅以下文档
以下两个表描述了 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_RESERVED 和 ODM_LOCK 熔丝在 ODM_LOCK 位烧录之前仍然可写。 |
安装安全启动包
前提条件
• 运行 Ubuntu 16.04 或 18.04 LTS 的 X86 主机
• 用于 USB 调试端口支持的 libftdi-dev
• 用于 OpenSSL 的 openssh-server 包
• 主机上最新 L4T 版本的完整安装
• 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 系列
如果要加密内核镜像(kernel、kernel-dtb、initrd 和 extlinux.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
准备 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 设备置于强制恢复模式。
注意 | 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 系列上使用此过程来加密 bootloader、kernel、kernel-dtb 和 initrd。在 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列上,您可以加密和签名 extlinux.conf。
要分别加密和签名
kernel、
kernel-dtb、
initrd 和
extlinux.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
分步完成签名和刷写
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>
• <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 系列
为了支持安全启动,kernel、kernel-dtb、initrd 和 extlinux.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> 是要加密和签名的 kernel、kernel-dtb、initrd 或 extlinux.conf 文件。
该脚本会替换此文件,因此在运行脚本之前请保存旧文件的副本。
该脚本会将名为 <filename>.sig 的签名文件存储在包含 <filename> 的目录中。
有关使用签名文件验证 kernel、kernel-dtb 或 initrd 文件的详细信息,请参阅主题 Jetson Xavier NX 系列和 Jetson AGX Xavier 系列启动流程中“使用 extlinux.conf 的内核启动序列”部分。
• <keyfile> 是 RSA 密钥对文件(.pem 文件)。它提供值来填充签名文件中的密钥字段。如果未指定密钥选项,则密钥字段将填充为 0。
• <encrypt_keyfile> 是包含四个 32 位大端十六进制格式数字的文件的路径名。它与用于刷写目标的 <user_keyfile> 文件相同,并且包含与用于生成 EKB 的密钥相同的密钥。
• <filetype> 是文件的类型。该命令支持三种类型:kernel、kernel_dtb 和 data。
• <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