前提条件

  • Linux 系统。
  • 用于解包 $ROOTFS 的宿主机文件系统应为 EXT4(或其他支持 Linux 权限、符号链接和 xattr 的文件系统);不要使用 FAT、exFAT 或 NTFS。
  • JetPack Archive中找到与目标 JetPack/L4T 完全对应的下载链接,下载 Driver Package (BSP) 和 Sample Root Filesystem。下列链接以 L4T r36.5.0 为例:Driver Package (BSP)Sample Root Filesystem
  • 解压并应用 NVIDIA 二进制文件:
tar xf Jetson_Linux_*.tbz2
cd Linux_for_Tegra/rootfs
sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_*.tbz2
cd ..
sudo ./apply_binaries.sh

备份 Jetson

  1. 使 Jetson 进入强制恢复模式,并通过 USB 连接宿主机。
  2. <board-name> 必须替换为与目标模块、载板和 L4T 版本匹配的板级配置;还原时必须使用相同的值。-e <devname> 为可选参数。
sudo ./tools/backup_restore/l4t_backup_restore.sh [-e <devname>] -b <board-name>

Note

此工具备份 Jetson 的内部存储相关分区(包括 eMMC 和 QSPI,具体取决于机型),不同于只克隆 APP/rootfs 分区。若根文件系统或重要数据位于外置 NVMe、USB 或 SD 卡,请另行备份对应块设备或分区。

不同 BSP 版本中目录名可能存在差异。若找不到脚本,可执行:find tools -maxdepth 2 -name 'l4t_backup_restore.sh' -print

编辑 Jetson 镜像

备份完成后,先确认实际生成的归档文件名;mmcblk0p1.tar.zst 仅适用于根文件系统位于内置 eMMC mmcblk0p1 的常见情况。

ls -lh tools/backup_restore/images/
# extract:将 ARCHIVE 替换为上一步确认的实际归档路径
ROOTFS=/mnt/jetson-rootfs
ARCHIVE=/home/ubuntu/Linux_for_Tegra/tools/backup_restore/images/mmcblk0p1.tar.zst
 
sudo mkdir -p "$ROOTFS"
sudo tar \
  -I zstd \
  -xpf "$ARCHIVE" \
  --warning=no-timestamp \
  --checkpoint=10000 \
  --numeric-owner \
  --xattrs \
  '--xattrs-include=*' \
  -C "$ROOTFS"
 
# 编辑位于 $ROOTFS 的镜像内容。
# 不要在 $ROOTFS 内挂载其他文件系统;如曾挂载,重新打包前先卸载。
 
# save:覆盖原归档前,建议先手动保留一份备份副本
NEW_ARCHIVE="$ARCHIVE"
sudo tar \
  -I 'zstd -T0' \
  -cpf "$NEW_ARCHIVE" \
  --warning=none \
  --checkpoint=10000 \
  --one-file-system \
  --numeric-owner \
  --xattrs \
  '--xattrs-include=*' \
  -C "$ROOTFS" \
  .
 
ARCHIVE_NAME=$(basename "$NEW_ARCHIVE")
DIR_NAME=$(dirname "$NEW_ARCHIVE")
NEW_HASH=$(sudo sha256sum "$NEW_ARCHIVE" | awk '{print $1}')
 
# 更新对应归档在分区映射文件中的 SHA-256;未匹配到文件名时停止执行。
sudo awk \
  -F, \
  -v OFS=, \
  -v f="$ARCHIVE_NAME" \
  -v hash="$NEW_HASH" \
  '$1 == f {$6 = hash; found = 1} {print} END {if (!found) exit 1}' \
  "$DIR_NAME/nvpartitionmap.txt" |
  sudo tee "$DIR_NAME/nvpartitionmap.txt.new" >/dev/null && \
sudo mv "$DIR_NAME/nvpartitionmap.txt.new" "$DIR_NAME/nvpartitionmap.txt"
 
# 确认归档名与更新后的校验和
sudo awk -F, -v f="$ARCHIVE_NAME" '$1 == f {print}' "$DIR_NAME/nvpartitionmap.txt"

恢复镜像

  1. 使 Jetson 进入强制恢复模式,并通过 USB 连接宿主机。
  2. 使用备份时相同的 <board-name>-e <devname> 为可选参数。
sudo ./tools/backup_restore/l4t_backup_restore.sh [-e <devname>] -r <board-name>