基于orin系列的刷写支持笔记
烧录支持
使用flash.sh脚本可为Jetson设备烧录引导加载程序和内核,并可选择将根文件系统烧录至内部或外部存储设备。
使用l4t_initrd_flash.sh脚本可烧录连接至Jetson设备的内部或外部存储介质。该脚本通过恢复初始RAM磁盘进行烧录,采用统一流程处理内外存储介质。由于使用内核进行烧录,其速度通常快于flash.sh脚本。详细信息请参阅《使用initrd烧录》(https://docs.nvidia.com/jetson/archives/r38.2/DeveloperGuide/SD/FlashingSupport.html#sd-flashingsupport-flashingwithinitrd)。
默认板型配置和分区布局支持64GB及以上容量的外部存储介质。如需适配更低容量的外部介质,需修改板型配置中的ROOTFSSIZE变量和分区布局中的num_sectors字段。关于外部存储设备分区布局调整的详细信息,请参阅《烧录至外部存储设备》(https://docs.nvidia.com/jetson/archives/r38.2/DeveloperGuide/SD/FlashingSupport.html#flashing-to-an-external-storage-device)。
准备工作
必须确保以下目录存在:
bootloader:包含引导加载程序及烧录工具(如TegraFlash、CFG和BCT)
kernel:包含内核镜像/Image、DTB文件及内核模块
rootfs:已下载的根文件系统
· 该目录初始为空,需用示例文件系统填充
nv_tegra:用户空间二进制文件及示例应用程序
此外,执行烧录命令前,必须通过USB线缆将主机计算机连接至Jetson设备的恢复模式端口。
基础烧录脚本使用说明
通过运行发行版中包含的flash.sh -h命令可显示当前使用信息。基本使用格式如下:
bash
$ sudo ./flash.sh [选项] <板型> <根设备>
参数说明:
· 选项(options):一个或多个命令行选项(所有选项均为可选)。具体选项信息请参阅《烧录脚本使用指南》(https://docs.nvidia.com/jetson/archives/r38.2/DeveloperGuide/SD/FlashingSupport.html#flashing-script-usage)
· <板型>(board):指定要烧录设备的配置类型。可选值列于《Jetson模块与配置表》(https://docs.nvidia.com/jetson/archives/r38.2/DeveloperGuide/IN/QuickStart.html#in-quickstart-jetsonmodulesandconfigurations)中。flash.sh从名为<板型>.conf的配置文件中获取配置信息,该文件指定了分区布局文件的位置,而分区布局文件定义了Jetson目标设备上要烧录的存储设备。关于<板型>.conf的详细解释,请参阅《板型配置文件详解》和《生成待烧录镜像》(https://docs.nvidia.com/jetson/archives/r38.2/DeveloperGuide/SD/FlashingSupport.html#sd-flashingsupport-explainingboardconfigurationfileandgeneratingaflashimagetoflashlater)
· <根设备>(rootdev):指定用作根文件系统的设备类型。例如使用mmcblk0p1值表示烧录本地存储设备(根据平台不同可能是eMMC或SD卡),以区别于NFS服务器等网络存储方案
基础烧录流程
本节介绍烧录单个或多个目标设备的常用操作流程。
安装烧录环境依赖
执行以下命令:
bash
$ sudo tools/l4t_flash_prerequisites.sh
烧录目标设备
将目标设备置入强制恢复模式:
· 接通载板电源并长按RECOVERY按钮
· 按下RESET按钮
运行本版本BSP顶级目录中的flash.sh脚本。命令行必须指定目标板型(例如jetson-agx-orin-devkit)和根文件系统设备:
bash
$ sudo ./flash.sh <板型> <根设备>
参数说明:
· <板型>:指定目标设备的配置类型(详见《Jetson模块与配置表》)
· <根设备>:指定根文件系统所在的存储设备(详见《基础烧录脚本使用》)
运行示例如下:
bash
$ sudo ./flash.sh <板型> mmcblk0p1
使用便捷脚本进行烧录
NVIDIA提供自动检测Jetson设备载板类型的便捷烧录脚本:
bash
$ sudo ./nvsdkmanager_flash.sh [–storage <存储设备>]
其中<存储设备>可选:
nvme0n1p1 或 nvme1n1p1:烧录至外部NVMe SSDsda1:烧录至外部USB存储驱动器mmcblk0p1 或 mmcblk1p1:烧录至外部SD卡(具体取决于目标设备)
在Jetson Orin系列上,使用–storage选项烧录时还会同时烧录内部eMMC存储,其中包含指向外部存储设备作为根文件系统的小型引导分区。
若不使用–storage选项,则要求Jetson设备必须配备内部eMMC或SD卡(针对无内置eMMC存储的设备)。
烧录目标设备以挂载UUID指定的根文件系统
对于内部存储设备(如eMMC或SD卡),执行命令:
bash
$ sudo ./flash.sh <板型> internal
此命令会为根文件系统分区生成新UUID并存储在bootloader/l4t-rootfs-uuid.txt文件中。您也可通过向该文件写入自定义UUID后执行以下命令:
bash
$ sudo ./flash.sh --reuse-uuid <板型> internal
对于外部存储设备(如NVMe或USB设备),执行命令:
bash
$ sudo ./flash.sh <板型> external
此命令会为根文件系统分区生成新UUID并存储在bootloader/l4t-rootfs-uuid.txt_ext文件中。您也可通过向该文件写入自定义UUID后执行以下命令:
bash
$ sudo ./flash.sh --reuse-uuid <板型> external
烧录目标设备以挂载分区设备名指定的根文件系统
注意
以下命令仅向Jetson内部eMMC存储烧录小型引导分区,用于挂载外接至Jetson的USB/NVMe SSD设备。这些命令并不会将根文件系统内容实际烧录到外部连接的存储设备上。
text
· 对于连接到Jetson设备的USB存储设备分区,执行命令:
bash $ sudo ./flash.sh <板型> sda<x>
· 对于连接到Jetson设备的NVMe存储设备分区,执行命令:
bash $ sudo ./flash.sh <板型> nvme0n1p<x>
参数说明:
· <板型>:指定目标设备的配置类型(详见《快速入门》中的设备名称表)
· :数字编号,指定存储设备上APP分区的位置(例如USB设备使用sda1,NVMe存储设备使用nvme0n1p1)
解释板级配置文件并生成用于稍后刷写的刷机镜像
板级配置文件是一个bash脚本,用于定义多个bash变量。这些变量指定了flash.sh将使用的启动配置表(BCT)、设备树二进制文件(DTB)、内核、配置文件、固件和分区布局。
该板级配置文件通过EMMC_CFG变量指定分区配置文件的存储位置,该文件定义了刷写工具需要处理的存储设备及其分区布局。刷写工具仅会处理分区配置布局中描述的存储设备。
text
flash.sh仅支持板级配置文件中定义的一个分区配置文件
l4t_initrd_flash.sh支持板级配置文件中定义的一个分区配置文件,以及通过–external-device选项刷写时使用-c参数传递的另一个分区配置文件(用于定义外部设备的分区布局)
有关分区配置文件格式的详细信息,请参阅分区配置说明。
通常,NVIDIA提供的板级配置依赖从EEPROM和芯片读取的值来定义这些bash变量。用于生成后续刷写的刷机镜像:
text
1.将Jetson目标设备进入恢复模式
2.使用以下命令从电路板获取EEPROM和芯片信息,随后生成刷机镜像:
$ sudo ./flash.sh --no-flash mmcblk0p1
当无法获取恢复模式下的Jetson目标设备时,仍可通过手动获取EEPROM和芯片值并设置为环境变量来生成刷机镜像。例如:
$ sudo BOARDID=3701 BOARDSKU=0000 FAB=500 BOARDREV=500 CHIP_SKU=D0 RAMCODE=0 FUSELEVEL=fuselevel_production ./flash.sh --no-flash jetson-agx-orin-devkit mmcblk0p1
这些信息通常可在Jetson目标设备的规格书中找到。若您具有设备物理访问权限,也可通过以下方式手动获取:
text
将Jetson目标设备进入恢复模式
运行以下命令生成bootloader/cvm.bin和bootloader/chip_info.bin_bak文件:
$ sudo ./flash.sh --no-flash --no-systemimg mmcblk0p1
通过以下命令获取所需环境变量:
$ cd bootloader
$ BOARDID=$(./chkbdinfo -i cvm.bin)
$ BOARDSKU=$(./chkbdinfo -k cvm.bin)
$ FAB=$(./chkbdinfo -f cvm.bin)
$ BOARDREV=$(./chkbdinfo -r cvm.bin)
$ CHIP_SKU=$(./chkbdinfo -C chip_info.bin_bak)
$ RAMCODE_ID=$( ./chkbdinfo -R chip_info.bin_bak)
$ RAMCODE=$(echo “ibase=2; ${RAMCODE_ID//😕}” | bc)
生成刷机镜像后,您可在后续时间通过以下命令执行刷写操作:
$ cd bootloader
$ sudo bash ./flashcmd.txt
克隆Jetson设备并进行刷写
从需要克隆的文件系统分区复制system.img文件。输入命令:
$ sudo ./flash.sh -r -k APP -G mmcblk0p1
其中:
text
确定克隆副本的文件名
指定目标设备的配置
此步骤会在目录下创建两个克隆副本:一个名为的稀疏镜像(比原始镜像小),以及一个名为.raw的精确副本。分区备份所需时间取决于分区大小。
例如,若为original.img,flash.sh将创建一个名为original.img的稀疏镜像和一个名为original.img.raw的精确副本。
将.img复制到/bootloader/system.img目录,其中是Jetson Linux BSP的安装目录。输入命令:
$ sudo cp .img bootloader/system.img
将镜像刷写到目标板:
text
若目标板已完成初始刷写,请重新刷写克隆镜像到APP分区。分区备份时间取决于分区大小。运行以下命令进行刷写:
$ sudo ./flash.sh -r -k APP mmcblk0p1
若目标板从未进行刷写,请刷写所有分区。输入命令:
$ sudo ./flash.sh -r mmcblk0p1
重要提示
若克隆源设备的根文件系统在oem-config过程中被调整大小,必须相应更新目标设备的eMMC配置文件。以jetson-agx-orin-devkit为例,根文件系统(APP)是位于secondary_gpt之前的最后一个分区。若APP分区被调整为允许的最大尺寸,必须将Linux_for_Tegra/bootloader/generic/cfg/flash_t234_qspi_sdmmc.xml中APP分区的allocation_attribute属性从0x8更新为0x808。
注意事项
要克隆外部存储设备(如NVMe存储设备)的rootfs分区,请参阅《使用initrd克隆rootfs》章节。
备份和恢复Jetson设备
NVIDIA提供了一套工具用于创建Jetson设备的备份镜像以及从备份镜像恢复设备。
备份Jetson设备与克隆设备(参见"克隆Jetson设备并进行刷写")有所不同:备份镜像包含设备内部eMMC和QSPI存储器中的每个分区,而克隆仅包含APP文件系统分区。
用于备份和恢复Jetson设备的工具位于BSP目录下:
/Linux_for_Tegra/tools/backup-restore/
设备备份和恢复的操作说明详见同目录下的README_backup_restore.txt文件。
分区备份或恢复所需时间取决于分区大小。
重要提示
工作流程3:目前批量刷写备份镜像的功能暂不支持Jetson Orin NX。此外,使用此工具需要Jetson设备连接SD卡或NVMe固态硬盘。
通过RCM启动到NFS
将设备进入复位/恢复模式:
text
接通载板电源并按住Recovery按钮
按下Reset按钮
输入命令:
$ sudo ./flash.sh -N <ip_addr>:<root_path> --rcm-boot eth0
其中:
<ip_addr> 是主机系统的IP地址
<root_path> 是NFS根文件系统的路径
<board> 是目标设备的配置(详见Jetson模块与配置说明)
刷写脚本使用说明
本节作为《基础刷写脚本使用》的补充,提供关于flash.sh命令行选项及其他使用细节的详细信息。
命令行选项 描述
-c <cfgfile> 刷写分区表配置文件的路径
-d <dtbfile> 设备树文件的路径
-f <flashapp> 要使用的刷写应用程序名称。刷写应用程序存储在bootloader目录,默认为bootloader/tegraflash.py
-h 显示命令行语法和选项的说明
-k <partition_id> 在flash.xml或flash.cfg中指定的分区名称或编号
-m <mts_preboot> 要使用的MTS预启动文件名(如mts_preboot)
-n <nfs_args> 静态NFS网络分配:<客户端IP>:<服务器IP>:<网关IP>:<子网掩码>
-o <odmdata> ODM数据
-p <bp_size> eMMC硬件启动分区总大小
-r 跳过构建system.img;重用现有镜像
-t <tegraboot> tegraboot二进制文件路径(如nvtboot.bin)
-u <PKC_key_file> 包含用于ODM熔断板子的PKC密钥的文件路径
-v <SBK_key_file> 包含用于ODM熔断板子的安全启动密钥(SBK)的文件路径
-w <wb0boot> 热启动二进制文件路径(如nvtbootwb0.bin)
-x <tegraid> 处理器芯片ID。默认值为:
• NVIDIA® Jetson Orin系列:0x23
-z <sn> 目标板序列号
-B <boardid> 板卡ID
-C <args> 内核命令行参数。若指定此选项,将覆盖flash.sh定义的默认值。若指定两个及以上参数,需用引号括起并以空格分隔
内核命令行参数详见kernel-4.9/Documentation/kernel-parameters.txt文件
对于NFS启动,若省略-I选项,可使用此选项设置NFS启动相关参数
-F <flasher> 刷写服务器路径(如nvtboot_recovery_cpu.bin)
-G <file_name> 读取启动分区并将镜像保存到指定文件
-I <initrd> initrd文件路径,默认值为空
-K <kernel> 内核镜像文件路径(如zImage或Image)
-M <mts boot> MTS启动文件路径(如mts_si)
-N <nfsroot> NFS根地址(如<我的IP地址>:<我的NFS根文件系统导出路径>)
-R <rootfs_dir> 示例根文件系统目录路径
-S <size> 根文件系统大小(字节),仅对内部根设备有效
KB/MB/GB后缀表示1000、1000²、1000³单位
KiB/MiB/GiB后缀表示1024、1024²、1024³的倍数
例如:2GiB表示2×1024³字节
--bup 生成启动加载程序更新包(BUP)
--clean-up 刷写多规格BUP时清理BUP缓冲区
--multi-spec 启用构建多规格BUP支持
--no-flash 执行除物理刷写板卡外的所有步骤,脚本会创建system.img文件
--no-systemimg 阻止创建或重新创建system.img
--sparseupdate 仅刷写已更改的分区,当前仅支持SPI闪存
--usb-instance