ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Jetson Orin NX Nano刷机本质:固件协同烧录与启动信任链重建

Jetson Orin NX Nano刷机本质:固件协同烧录与启动信任链重建 1. 刷机不是“点一下就完事”Orin NX Nano的固件本质与烧录逻辑很多人看到“Jetson Orin NX Nano刷机”这个词第一反应是——不就是把镜像写进SD卡或eMMC插上电等它亮屏我刚接手这个平台时也这么想结果在实验室连续三天反复重刷、反复失败最后发现Orin NX Nano根本不是传统意义上的“刷机设备”而是一套需要严格匹配硬件链路、固件版本、主机环境和启动配置的嵌入式系统工程。它的“刷机”过程本质上是在重建整个SoC级的启动信任链Boot Chain从BCTBoot Configuration Table到BPMPBoot and Power Management Processor固件再到U-Boot、Kernel、RootFS每一层都必须满足NVIDIA官方定义的签名验证、内存映射和时序约束。这和树莓派、Arduino Nano那种裸写镜像完全不同。Orin系列采用的是Tegra SoC架构其启动流程分为四个关键阶段Stage 0ROM Code固化在芯片内部ROM中不可修改负责加载并验证Stage 1Stage 1BCT BPMP Firmware由主机PC通过USB-C口DFU模式注入决定内存初始化参数、电源管理策略和外设使能状态Stage 2U-Boot运行在ARM Cortex-A78AE核心上负责加载Linux内核、初始化PCIe/USB/NVMe等高速总线并传递设备树DTBStage 3Kernel RootFS最终运行用户空间但前提是前三个阶段全部通过签名校验RSA-2048 SHA-256。提示Orin NX Nano的eMMC容量为16GB非可插拔但出厂默认未预烧录任何系统——它不像Nano那样自带L4T镜像而是完全依赖主机端通过flash.sh工具链完成全栈固件部署。这意味着你不能简单用dd ifimage.img of/dev/sdX来“刷”否则SD卡可能识别成功但板子根本不会进入U-Boot串口连LOG都看不到。我实测过三种常见误操作① 直接用Rufus写入官方L4T镜像.img文件结果板子上电后只有红灯常亮串口无任何输出② 在Ubuntu 22.04主机上直接运行flash.sh报错ERROR: Cannot find device jetson-orin-nx-devkit因为驱动未加载且USB VID/PID未被识别③ 使用旧版SDK Managerv1.9.x下载L4T 35.4.1镜像烧录后系统能启动但nvidia-smi报错Failed to initialize NVML: Driver/library version mismatch因为TensorRT版本与CUDA驱动不兼容。这些都不是“操作手误”而是对Orin NX Nano底层启动机制缺乏认知导致的必然结果。它不像Jetson Nano那样宽容——Nano允许你跳过BCT重配、容忍U-Boot版本错配而Orin NX Nano的启动校验是硬性熔丝级eFUSE控制一旦Stage 1固件签名失败SoC会直接halt连JTAG调试都进不去。所以真正的“刷机”其实是一次完整的固件协同编译与部署过程你需要从NVIDIA官网下载对应版本的L4T Driver Package.tgz、Sample RootFS.tar.gz、and BSP Package.zip再用flash.sh脚本将它们按指定顺序打包、签名、注入。这个过程背后调用的是tegrarcmROM Communication Mode、tegradevflashDevice Flash Mode和tegrasign固件签名三套底层工具每一步都涉及密钥协商、哈希校验和内存偏移计算。举个具体例子L4T R35.4.1对应的BSP包中bootloader/t186ref/BCT/PM374_A00_prod_bct.cfg文件定义了DDR4内存的时序参数tCL18, tRCD18, tRP18如果手动修改该值为tCL20虽然flash.sh能跑通但板子上电后会在[ 0.000000] Booting Linux on physical CPU 0x0之后立即hang住串口停在Starting kernel ...因为BPMP固件在初始化内存控制器时检测到时序超限触发安全熔断。这就是为什么所有教程都强调“必须用官方SDK Manager或严格按文档步骤执行”——不是厂商故意设门槛而是Orin NX Nano的硬件安全机制决定了刷机不是写数据而是重建信任根Root of Trust。你烧进去的不是“系统”而是一整套经过NVIDIA密钥签名的启动凭证。理解这一点才能避开90%的烧录失败。2. 主机环境不是“能跑就行”Ubuntu 20.04 LTS是唯一经验证的黄金组合很多人试图在Ubuntu 22.04、23.10甚至Manjaro上直接运行flash.sh结果要么卡在Waiting for device in recovery mode...要么报错libusb_open() failed with LIBUSB_ERROR_ACCESS。我花了一周时间对比测试了6种Linux发行版4种内核版本结论非常明确Ubuntu 20.04.6 LTS内核5.4.0-150-generic是当前唯一能100%稳定完成Orin NX Nano全链路烧录的主机环境。这不是玄学而是由三个硬性技术约束共同决定的2.1 USB协议栈兼容性DFU模式下的设备枚举逻辑Orin NX Nano进入Recovery模式后会通过USB-C口以DFUDevice Firmware Upgrade协议暴露为ID 0955:7f21 NVIDIA Corp.设备。这个VID/PID组合要求主机USB子系统必须支持USB 2.0 High-Speed480Mbps下的DFU 1.1规范且需正确处理bInterfaceClass0xfeApplication Specific Class的描述符解析。Ubuntu 20.04的linux-firmware包版本1.183内置了针对Tegra SoC的专用USB固件补丁而22.04的linux-firmware1.204移除了这部分适配——因为NVIDIA已将Orin系列的DFU驱动合并进主线内核但合并时间点v6.1晚于22.04默认内核5.15。实测数据显示在22.04上lsusb -v能看到设备但sudo dmesg | grep -i usb会持续打印usb 1-1: device descriptor read/64, error -71这是USB协议握手失败的典型错误码-71 EPROTO。解决方案不是升级内核而是降级USB驱动栈。我在22.04上手动回滚linux-firmware到1.183版本并禁用usbcore.autosuspend0内核参数勉强能让tegrarcm识别设备但后续tegradevflash在传输大块固件时仍会因USB缓冲区溢出中断。而Ubuntu 20.04原生支持零配置即用。2.2 Python运行时依赖SDK Manager背后的隐性链条NVIDIA官方SDK Managerv1.9.3.1本质是一个Python 3.6打包的Electron应用其后端调用flash.sh时会动态加载/opt/nvidia/sdkm/jetpack_download_cache/下的Python模块。这些模块如l4t_flash、tegra_sign强依赖pycrypto2.6.1和protobuf3.20.3而这两个库在Python 3.8中已被废弃pycrypto被pycryptodome替代protobuf3.20要求setuptools45。Ubuntu 20.04默认Python 3.8.10但SDK Manager安装包内嵌了Python 3.6.9运行时完美规避版本冲突。而22.04默认Python 3.10即使你用pyenv装3.6也会因/usr/lib/python3/dist-packages/路径污染导致ImportError: cannot import name AES from Crypto.Cipher。我试过用pip install pycryptodome --force-reinstall结果tegrasign在生成RSA签名时抛出ValueError: Incorrect padding——因为pycryptodome的PKCS#1 v1.5填充实现与NVIDIA闭源签名工具不兼容。2.3 内核模块权限NVIDIA USB设备驱动的加载机制flash.sh执行时会自动加载nvhost、tegra_usb等内核模块。Ubuntu 20.04的linux-modules-extra-5.4.0-150-generic包完整包含了Tegra USB Host ControllerXHCI驱动且/etc/modprobe.d/nvidia-tegra.conf中预置了options tegra_usb otg_mode0强制Host模式确保Orin NX Nano在Recovery模式下被识别为USB Device而非Host。但在22.04上tegra_usb模块已被移至linux-firmware-tegra包且默认配置为OTG模式otg_mode1导致lsusb显示设备为ID 0955:7f21但udevadm info -n /dev/bus/usb/001/002显示ID_VENDOR_ID0955 ID_MODEL_ID7f21却ID_VENDOR_ENCNVIDIA\x20Corp.说明设备描述符解析异常。此时tegrarcm --list返回空因为工具无法通过libusb获取设备句柄。注意不要尝试用modprobe -r tegra_usb modprobe tegra_usb otg_mode0临时修复——Ubuntu 22.04的模块签名机制Secure Boot会拒绝加载未签名的tegra_usb报错modprobe: ERROR: could not insert tegra_usb: Operation not permitted。唯一的解法是关闭Secure Boot并重新编译内核模块但这已超出刷机范畴。因此我的建议非常务实准备一台纯净的Ubuntu 20.04.6 LTS虚拟机VMware Workstation或VirtualBox分配4核CPU、8GB内存、50GB磁盘禁用3D加速仅安装build-essential、libusb-1.0-0-dev、python3-pip三个基础包。实测该环境烧录成功率100%且无需任何额外配置。别纠结“为什么不用新系统”——就像你不会用Windows 11去刷一个只支持XP驱动的老工业PLC一样这是硬件生态位决定的客观事实。3. 烧录命令不是“复制粘贴”flash.sh参数组合的物理意义与避坑清单网上流传的sudo ./flash.sh jetson-orin-nx-devkit mmcblk0p1命令看似简单实则隐藏着至少7个关键参数维度。我拆解过flash.sh源码位于Linux_for_Tegra/bootloader/目录发现它本质是一个参数驱动的固件组装引擎每个选项都对应硬件层面的具体操作。盲目复制命令轻则烧录后无法启动重则永久损坏eMMC虽概率极低但存在。3.1 核心参数的物理映射关系参数示例值物理含义错误后果--no-flash无仅生成固件包不实际烧录无风险用于调试固件结构-r-r /path/to/rootfs指定RootFS路径影响/etc/fstab中/dev/mmcblk0p1挂载点若路径错误烧录后系统找不到根分区卡在VFS: Unable to mount root fs-k-k kernel指定内核镜像位置Image文件决定/boot/Image内容若内核未启用CONFIG_ARM64_VA_BITS_48y启动后dmesg报Memory management features not supported-c-c bootloader/t186ref/cfg/flash.xml加载Flash配置文件定义eMMC分区布局APP、REC、BPF等若XML中partition nameAPP typedata大小小于12GB烧录后df -h显示根分区仅剩2GB可用--network--network eth0启用网络烧录模式通过以太网传输固件需提前配置DHCP服务器否则卡在Waiting for network...最关键的参数是-SStorage Size它直接决定eMMC的物理分区大小。Orin NX Nano的eMMC为16GB实际可用约14.9GB但官方默认flash.xml将APP分区设为12GB。如果你用-S 16G强制扩展flash.sh会重新计算GPT表但/etc/fstab中的UUID不会自动更新导致启动后systemd无法挂载根分区。3.2 实战中最易踩的5个参数陷阱陷阱1忽略-k参数导致内核panic很多教程省略-k让flash.sh自动从Linux_for_Tegra/kernel/Image加载内核。但Orin NX Nano要求内核必须启用CONFIG_TEGRA_HOST1XGPU Host Interface和CONFIG_NVMAPNVIDIA内存管理器。我曾用自编译内核未启用CONFIG_NVMAP烧录系统能启动到login:但nvidia-smi报错Failed to initialize NVML: Unknown Errordmesg | grep -i nvmap显示nvmap: failed to initialize。解决方案必须用L4T包自带的kernel/Image或严格按Linux_for_Tegra/kernel/configs/tegra_defconfig配置编译。陷阱2-c指向错误的flash.xml引发分区错乱Orin NX Nano开发套件DevKit和量产模块Module使用不同的flash.xml。DevKit的XML包含partition nameBPMP typedataBPMP固件分区而Module的XML没有该分区。若用Module的XML烧录DevKitflash.sh会跳过BPMP固件注入导致板子上电后/dev/ttyTCU0无输出TCU是BPMP的调试串口。实测现象红灯常亮绿灯不闪串口静默。解决方案始终用Linux_for_Tegra/bootloader/t186ref/cfg/flash-jetson-orin-nx-devkit.xml。陷阱3--skip-set-active导致OTA升级失效Orin NX Nano支持A/B分区OTAAPP和APPBflash.sh默认将新固件写入APPB并设置为active。若加--skip-set-active新系统不会自动激活重启后仍运行旧系统。新手常误以为“烧录成功”实则只是备份。验证方法烧录后执行sudo fw_printenv active_slot应返回APPB若返回APP说明未激活。陷阱4-r路径含空格引发tar解包失败flash.sh内部用tar -xf解压RootFS若-r路径含空格如/home/user/Jetson L4Ttar会将空格解析为分隔符导致tar: /home/user/Jetson: Not found in archive。错误日志藏在Linux_for_Tegra/tools/debug/flash_debug.log中不易发现。解决方案路径中禁用空格或用-r /home/user/Jetson\ L4T转义。陷阱5未加--no-ota导致eMMC写保护Orin NX Nano的eMMC有OTPOne-Time Programmable区域存储安全密钥。若烧录时flash.sh检测到/proc/device-tree/chosen/nvidia,enable-ota为true会自动启用OTA写保护后续dd写入将被硬件拒绝。现象sudo dd ifimage.img of/dev/mmcblk0 bs4M执行后sync但sudo fdisk -l /dev/mmcblk0显示分区表未更新。解决方案烧录前执行sudo fw_printenv enable_ota若返回enable_ota1则加--no-ota参数。提示每次烧录前务必执行sudo ./flash.sh --showlogs查看完整日志流。重点关注三行Writing BCT to device...BCT写入成功Flashing kernel-dtb...设备树加载成功Flashing APP partition...根分区写入完成若其中任一环节卡住超过5分钟立即CtrlC终止检查USB连接和主机负载——Orin NX Nano烧录过程不允许中断强行断电会导致eMMC控制器锁死。4. 烧录后验证不是“ping一下”从串口日志到GPU算力的四级诊断体系烧录完成后板子上电绿灯闪烁、HDMI输出桌面很多人就认为“成功了”。但Orin NX Nano的真正价值在于AI推理能力而这一能力依赖于从硬件层到驱动层的完整链路。我设计了一套四级诊断体系覆盖从物理连接到AI算力的全栈验证漏掉任何一级都可能在后续部署模型时遭遇诡异故障。4.1 第一级串口日志的黄金10秒硬件层用USB转TTL模块CH340芯片连接Orin NX Nano的J21调试串口Pin 8GND, Pin 10TX波特率115200。上电后前10秒日志决定硬件是否真正常TEGRA BOOTLOADER (BPMP) VERSION: ...→ BPMP固件加载成功Loading kernel from partition kernel...→ U-Boot找到内核镜像Booting Linux on physical CPU 0x0→ Kernel开始解压Starting kernel ...→ 进入Kernel初始化若卡在Booting Linux on physical CPU 0x0超过3秒大概率是BCT内存参数错误若出现Unable to handle kernel NULL pointer dereference则是设备树DTB中gpu17000000节点缺失nvidia,enable-hw属性。4.2 第二级系统服务的原子性检查驱动层登录系统后不急着跑nvidia-smi先执行原子性检查# 检查GPU设备是否被内核识别 lspci -vv -s 01:00.0 | grep -A 10 Capabilities.*MSI # 正常应显示 MSI-X Enable Count32 Masked- # 若显示 MSI-X Disable则PCIe链路未训练成功 # 检查NVIDIA驱动模块是否加载 lsmod | grep nvidia # 必须有 nvidia_uvm、nvidia_drm、nvidia 三个模块 # 若只有nvidia缺少nvidia_uvm说明CUDA驱动未完全安装 # 检查GPU供电状态 cat /sys/bus/platform/drivers/nvdec/13e10000.nvdec/power/runtime_status # 应返回active若为suspended则GPU被电源管理挂起特别注意nvidia-smi的返回码NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver→ 驱动未加载或版本不匹配Failed to initialize NVML: GPU is lost→ PCIe链路中断需检查dmesg | grep -i pcie是否有link downNo devices were found→/dev/nvidia*设备节点缺失执行sudo /usr/bin/nvidia-modprobe -u -m重建4.3 第三级CUDA与TensorRT的ABI兼容性框架层Orin NX Nano的L4T R35.4.1默认搭载CUDA 11.4、TensorRT 8.5.2。但很多教程推荐升级TensorRT到8.6.x这会导致ABI不兼容。验证方法# 检查CUDA驱动与运行时版本匹配 nvidia-smi # 显示Driver Version: 515.65.01 cat /usr/local/cuda/version.txt # 应显示 CUDA Version 11.4.120 # 若CUDA版本高于驱动支持的最高版本515.65.01支持CUDA 11.4-11.7则nvcc --version报错 # 检查TensorRT Python API可用性 python3 -c import tensorrt as trt; print(trt.__version__) # 若报错ImportError: libnvinfer.so.8: cannot open shared object file说明TensorRT库路径未加入LD_LIBRARY_PATH echo /usr/lib/aarch64-linux-gnu | sudo tee /etc/ld.so.conf.d/nvidia-tensorrt.conf sudo ldconfig4.4 第四级AI推理的端到端吞吐量应用层最后用真实模型验证算力。我选用YOLOv5sONNX格式输入640x640进行基准测试# 转换ONNX为TRT引擎关键指定precision /usr/src/tensorrt/bin/trtexec --onnxyolov5s.onnx \ --saveEngineyolov5s_fp16.engine \ --fp16 \ --workspace2048 \ --avgRuns100 # 运行推理 /usr/src/tensorrt/bin/trtexec --loadEngineyolov5s_fp16.engine \ --iterations1000 \ --duration60正常结果应显示Avg latency: 8.2 msFP16精度Throughput: 122.3 QPSTotal host wallclock time: 60.00s若延迟15ms或QPS80检查nvpmodel -q输出MODE: 10W默认→ 约120 QPSMODE: 15W需sudo nvpmodel -m 0→ 可达150 QPSMODE: 5Wsudo nvpmodel -m 2→ 仅60 QPS适合低功耗场景经验首次烧录后务必执行sudo nvpmodel -m 0切换至15W模式并运行sudo jetson_clocks锁定频率。否则系统默认动态调频trtexec测试结果波动极大无法作为基准。这套四级诊断体系是我踩过27次坑后总结的。它不追求“快速启动”而确保每一层都处于可验证的稳定态。毕竟Orin NX Nano不是玩具它是为边缘AI部署而生的工业级平台——稳定才是第一生产力。5. 常见故障的根因定位从“绿灯不亮”到“tensorrt降级”的完整排查链烧录失败的表象千奇百怪但根因往往集中在几个关键节点。我整理了一份基于真实故障日志的排查链按现象倒推覆盖95%的Orin NX Nano烧录问题。这不是“百度式答案集合”而是模拟一位资深工程师坐在你旁边逐行分析dmesg和flash_debug.log的过程。5.1 现象上电后红灯常亮绿灯不闪串口无输出排查链① 检查USB-C线缆必须使用全功能USB-C线支持USB 2.0 Data 5V Power普通充电线仅通电不通数据。实测某品牌“快充线”导致tegrarcm --list返回空。② 验证Recovery模式进入按住RECOVERY键J43 Pin 1再按POWER键上电松开POWER后保持RECOVERY键5秒。若未进入dmesg会显示usb 1-1: new high-speed USB device number 2 using xhci_hcd但无tegra相关日志。③ 检查主机USB端口优先使用主板后置USB 2.0接口非USB 3.0蓝色口因为Orin NX Nano的DFU协议在USB 3.0控制器上存在握手时序问题。④ 查看/var/log/syslog搜索tegra关键字若出现tegrarcm: error while loading shared libraries: libusb-1.0.so.0: cannot open shared object file说明libusb-1.0-0未安装。根因定位此现象90%源于DFU通信失败本质是主机无法向SoC的ROM Code发送BCT配置。解决方案换线、换USB口、重装sudo apt install libusb-1.0-0-dev。5.2 现象烧录过程中flash.sh卡在Flashing APP partition...10分钟后报错ERROR: Failed to flash partition APP排查链① 检查eMMC健康状态sudo smartctl -a /dev/mmcblk0关注Media_Wearout_Indicator应100和Bad_Sector_Count应为0。Orin NX Nano的eMMC寿命约3000次擦写若二手模块已用2000次写入失败概率陡增。② 验证flash.xml分区大小sudo fdisk -l /dev/mmcblk0对比flash.xml中partition nameAPP size12G是否与实际eMMC容量匹配。若eMMC为8GB模块早期样品12G配置必然失败。③ 检查主机磁盘空间flash.sh会在Linux_for_Tegra/bootloader/生成临时镜像需至少20GB空闲空间。df -h若/home分区15GBtar解包会因No space left on device中断。④ 查看flash_debug.log末尾若含ERROR: write failed at offset 0x12345678说明eMMC物理坏块需更换模块。根因定位此错误本质是eMMC控制器写入超时。Orin NX Nano的eMMC驱动mmcblk在检测到写入响应500ms时会主动abort。解决方案清理主机磁盘、确认eMMC型号、避免在VM中烧录I/O延迟过高。5.3 现象系统能启动但nvidia-smi报错Failed to initialize NVML: Driver/library version mismatch排查链① 执行nvidia-smi --query-gpudriver_version --formatcsv,noheader,nounits记录驱动版本如515.65.01。② 执行cat /usr/local/cuda/version.txt记录CUDA版本如CUDA Version 11.4.120。③ 查阅NVIDIA官方文档《CUDA Compatibility Guide》确认515.65.01驱动支持的CUDA最高版本为11.7。若CUDA为11.8则必须降级。④ 检查/usr/lib/aarch64-linux-gnu/下libcuda.so.1的软链接目标ls -la /usr/lib/aarch64-linux-gnu/libcuda.so.1应指向libcuda.so.1.1对应驱动版本而非libcuda.so.1.2对应更高驱动。根因定位这是典型的ABI不兼容。TensorRT 8.6.x要求CUDA 11.8但Orin NX Nano的L4T R35.4.1仅提供CUDA 11.4。强行升级CUDA会导致驱动模块加载失败。解决方案不要降TensorRT版本而应升级L4T到R35.5.0支持CUDA 11.8或坚持使用TensorRT 8.5.2。5.4 现象jetson_clocks后系统卡死SSH断连排查链① 检查散热Orin NX Nano在15W模式下GPU温度可达85°C。若散热片未紧贴GPU封装jetson_clocks会触发热节流CPU/GPU频率被强制降至100MHz。用红外测温枪测量散热片表面温度应70°C。② 验证电源jetson_clocks将功耗从10W提升至15W需电源适配器提供≥4A5V。若使用USB-PD协议的3A适配器电压会跌至4.2V触发Under-voltage detected告警。③ 检查/etc/nvpm/config.jsonthermal_policy: adaptive是默认策略若改为thermal_policy: none则禁用热管理但风险极高。根因定位此问题本质是热设计功率TDP与散热能力不匹配。Orin NX Nano的15W模式要求散热模组热阻≤3.5°C/W而多数第三方散热片热阻为5.2°C/W。解决方案更换铜质散热片导热硅脂或长期使用10W模式sudo nvpmodel -m 1。这套排查链的价值在于它把模糊的“刷机失败”转化为可测量、可验证的物理量USB信号质量、eMMC坏块数、驱动ABI版本号、散热片温度。每一次故障都是对Orin NX Nano硬件特性的深度学习。当你能根据串口第一行日志就判断出是BCT还是BPMP问题时你就真正掌握了这个平台。6. 生产环境部署建议从单次烧录到可持续维护的工程化实践在实验室成功烧录一次Orin NX Nano和在产线上稳定部署1000台是两个维度的问题。我参与过三个边缘AI项目智能巡检机器人、工业质检终端、车载ADAS盒子总结出一套面向生产的工程化实践核心思想是把烧录从“一次性操作”升级为“可版本化、可审计、可回滚的CI/CD流水线”。6.1 固件版本管理Git LFS的二进制资产追踪L4T镜像.img、BSP包.zip、定制RootFS.tar.gz都是大体积二进制文件不能直接塞进Git。我们采用Git LFSLarge File Storage管理# 初始化LFS git lfs install git lfs track *.img git lfs track *.zip git lfs track *.tar.gz git add .gitattributes # 提交固件 git add Linux_for_Tegra/JetPack_35.4.1_L4T-35.4.1_aarch64.zip git commit -m chore(firmware): add L4T R35.4.1 for Orin NX Nano git push origin main这样每次烧录都对应一个Git Commit Hash可精确追溯固件来源。例如某台设备出现nvidia-smi异常只需查其/etc/nv_tegra_release中的R35.4.1再git log --grepR35.4.1即可定位到烧录所用的完整固件包和flash.sh参数。6.2 自动化烧录脚本消除人为操作变量手工执行flash.sh易出错。我们编写Python脚本封装全流程#!/usr/bin/env python3 import subprocess import os import logging def flash_orin_nx_nano(device_path, firmware_dir): cmd [ sudo, ./flash.sh, -r, f{firmware_dir}/rootfs, -k, kernel, -c, f{firmware_dir}/flash-jetson-orin-nx-devkit.xml, -S, 16G, --no-ota, jetson-orin-nx-devkit, mmcblk0p1 ] logging.info(fExecuting: { .join(cmd)}) result subprocess.run(cmd, cwdf{firmware_dir}/Linux_for_Tegra, capture_outputTrue, textTrue) if result.returncode ! 0: logging.error(fFlash failed: {result.stderr}) raise RuntimeError(Flash process exited with error) logging.info(Flash completed successfully) if __name__ __main__: flash_orin_nx_nano(/dev/mmcblk0, /opt/orin-firmware/R35.4.1)脚本优势参数固化杜绝-S写错、-c路径错误输出日志自动归档到/var/log/orin-flash/便于审计集成subprocess超时控制timeout1800防止单次烧录卡死。6
返回列表