常见问题

使用 initrd 刷新 NVIDIA Jetpack

2021-09-29 17:53:24 admin 9

介绍

此文章提供了在 EMMC 和 SSD 上使用 NVIDIA 的 Jetpack 4.6 initrd 刷新程序的指南。

这是闪烁到内部或外部媒体的简化方式。该过程首先刷新一个最小的 initrd,它启动并将内部和外部媒体暴露给主机以进行刷新。与其他闪烁技术相比,此闪烁过程要快得多。比如Jetson Xavier NX需要刷SPI+EMMC,用initd可以同时刷。此功能的另一个优点是它提供了一种闪存内部或外部媒体的解决方案。

可以在目录/Linux_for_Tegra/‌tools/‌kernel_flash/ 中找到使用 initrd 刷机的工具和说明有关更多详细信息,请参阅同一目录中的README_initrd_flash.txt此外,我们建议您阅读 Jetpack 4.6 的 NVIDIA Jetson Linux 开发人员指南。

功能支持表
木板用 initrd 闪烁
杰森TX2no
泽维尔AGXyes
泽维尔NXyes
杰森纳米no


要求

  • 高品质 USB‑C / micro-USB 电缆。低质量的电缆可能会使刷机过程失败。

  • 主机需要 NetworkManager 来配置网络以进行闪烁,而不是其他一些网络管理应用程序。

  • 在刷写过程中,必须暂时为新的外部存储设备禁用自动挂载。

程序

1.禁用自动挂载

systemctl stop udisks2.service

2.安装依赖

sudo apt install libxml2-utils simg2img network-manager abootimg sshpass device-tree-compiler

3. 将 Jetson Board 置于恢复模式并将其插入您的计算机。

4.下载所需的Jetpack后,请前往NVIDIA SDK管理器创建Target HW image文件夹默认情况下,它将位于/home/$USER/nvidia/nvidia_sdk

cd /home/$USER/nvidia/nvidia_sdk

5. 导航到相应的 Jetpack 目录。

cd JetPack_4.6_<板>

6.从NVIDIA下载Jetson Platform Fuse Burning and Secure Boot Documentation and Tools并解压。

tar xvjf secureboot_r32.6.1_aarch64.tbz2

7. 导航到Linux_for_Tegra目录。

cd Linux_for_Tegra

8. 启动 initrd 烧录程序。在这里您可以选择是刷入内部本地存储设备(eMMC 或 SD 卡),还是外部 SSD 磁盘。

闪烁内部本地存储设备

sudo ./tools/kernel_flash/l4t_initrd_flash.sh <板名称> mmcblk0p1

在哪里:

• <board-name> 是目标设备的环境变量BOARD 的值。根据当前支持的设备,您可以使用:jetson-xavier-nx- devkitjetson-xavier-nx-devkit-emmcjetson-agx-xavier-devkit

闪烁外部 SSD 磁盘

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device <external-device> -c <external-partition-layout> [ --external-only ]  [ -S <APP-size> ] <board-name> <rootdev>

在哪里:

  • <board-name>可以是jetson-xavier-nx- devkitjetson-xavier-nx-devkit-emmcjetson-agx-xavier-devkit

  • <rootdev>可以设置为 "mmcblk0p1" 或 "internal" 以从内部设备启动或 "external"、"sda1" 或 "nvme0n1p1" 以从外部设备启动。如果您的外部设备的外部分区布局具有“APP”分区,则在此处指定“nvme0n1p1”将生成 rootfs 引导命令行:root=/dev/nvme0n1p1如果 <rootdev> 是内部的或外部的,该工具将生成 rootfs 命令行:root=PARTUUID=....

  • <external-partition-layout>是 XML 格式的外部存储设备的分区布局。NVIDIA 在Linux_for_Tegra/tools/kernel_flash/提供了一些分区布局示例,因此您可以使用其中任何一个作为起点。有关如何创建它们的更多信息,请访问官方文档。

  • <external-device>是您要闪存的外部存储设备的名称,因为它出现在“/dev/”文件夹中(即 nvme0n1、sda)。

  • <APP-size>是包含操作系统的分区大小(以字节为单位)。允许 KiB、MiB、GiB 速记,例如 1GiB 表示 1024 * 1024 * 1024 字节。此大小不能大于 <external-partition-layout> 中指定的“num_sectors” * “sector_size”,并且必须足够小以适合分区布局中的其他分区。

  • --external-only只刷外部存储设备的标志,否则内部和外部设备都将被刷入。请注意,如果您只刷新外部设备,Jetson 将重新启动到内部存储,您必须手动更改/boot/extlinux/extlinux.conf 中root=<rootdev>参数以从外部设备启动。如果您想从内部存储再次启动,您应该挂载分区并更改内部存储文件系统/boot/extlinux/extlinux.conf

因此,闪存连接到 Xavier NX 的 SSD 磁盘的示例是:

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1 -c ./tools/kernel_flash/flash_l4t_nvme.xml -S 8GiB --showlogs jetson-xavier-nx-devkit nvme0n1p1

使用 rootfs AB 支持刷新外部 SSD 磁盘

此工作流程与之前的工作流程几乎相同,但有以下区别:

  • 在 flash 脚本中使用ROOTFS_AB=1标志。

  • 使用包含 APP_b 的不同分区布局。

  • 使用外部<删除rootdev>参数。

因此,使用 rootfs AB 支持刷新连接到 Xavier NX 的 SSD 磁盘的示例是:

sudo ROOTFS_AB = 1 ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1 -c ./tools/kernel_flash/flash_l4t_nvme_rootfs_ab.xml -S 8GiB --showlogs external jetson-xavier-nx

该命令会在SSD中创建两个8GB的APP分区(APP和APP_b),并将APP(slot A)设置为active和current slot。

8. 刷机完成后,即可启用自动挂载服务

systemctl start udisks2.service

原文链接:https://developer.ridgerun.com/wiki/index.php?title=NVIDIA_Jetpack_Flashing_with_initrd

首页
产品
案例
联系