
最近刚帮团队处理一台闲置的Jetson TX2开发套件系统还停在很老的JetPack 3.3上跑新一点的深度学习模型时算子兼容性各种糟心。查了一下官方支持列表TX2能用的最新JetPack就是4.6.6基于L4T R32.7.6Ubuntu 18.04再往上的5.x系列只面向Xavier和Orin这些新架构板卡。也就是说4.6.6就是TX2的“毕业版本”不刷它这台板子的算力潜力基本没法完全释放。这篇文章就把我这次刷机的完整过程、原理理解、常见坑和初始化经验一次说清楚。无论你是第一次接触Jetson的嵌入式开发者还是手里有TX2想升级系统的老用户都可以照着走一遍。我尽量把每个步骤背后的原因也讲明白这样遇到意外情况时你能自己判断问题出在哪。1. 刷机前准备物料、宿主环境和JetPack 4.6.6的定位1.1 JetPack 4.6.6到底新在哪里为什么TX2只能停在4.6.x先说清楚JetPack 4.6.6是什么。它是NVIDIA Jetson系列嵌入式平台的一套完整软件发行包里面包含了Linux内核、根文件系统、CUDA、cuDNN、TensorRT、OpenCV等一大堆开发组件。我们平时说的“给TX2刷机”其实就是把整套JetPack烧写进板子自带的eMMC存储里。TX2这块板子用的是Pascal架构的GPU代号GP10B。后续JetPack 5.x、6.x都要求Volta、Ampere甚至更新的GPU架构TX2的硬件跑不起来。NVIDIA对TX2的支持止步于JetPack 4.6.6对应的Linux for TegraL4T版本号是R32.7.6。这个版本里的CUDA是10.2cuDNN 8.2.1TensorRT 8.2.1OpenCV 4.1.1对于目标检测、图像分类、语义分割这一类的嵌入式AI应用来说这套组合完全够用了。有一点你得注意JetPack 4.6.6和JetPack 4.6.4、4.6.5看着版本号接近但L4T的内核补丁和部分驱动有差异刷机后不要混着装不同L4T版本对应的软件包容易把系统搞得不稳定。我这次直接选择了4.6.6的最新发布包一步到位。1.2 刷机前需要准备的硬件与宿主环境刷机这件事准备工作的比重占到七成以上。硬件清单不复杂但每一样都有讲究。你需要准备的东西一套Jetson TX2开发套件包括核心模块和载板。官方原装DC电源适配器TX2标准载板的输入要求是12V电流至少3A尽量用官方电源。一条支持数据传输的Micro USB线TX2载板上的刷机口是Micro USB不是Type-C。连接时注意插到载板靠近电源接口的那个Micro USB口而不是模块上那个调试串口。一台Ubuntu 18.04的x86_64宿主机硬盘剩余空间建议30GB以上内存8GB以上会比较从容。稳定的网络环境JetPack 4.6.6的安装包本身有几个GB刷机过程中部分组件还会从网络下载。这里要特别强调一下宿主机系统的选择。官方要求是Ubuntu 18.04 x86_64如果你用20.04、22.04或者Windows虚拟机大概率会在运行JetPack安装器时碰到依赖问题。我这次用的是Ubuntu 18.04后续所有命令和操作都基于这个环境。这不是死板而是老版本JetPack安装器对宿主机环境确实比较挑剔不值得在环境适配上去浪费时间。1.3 下载JetPack 4.6.6安装包的正确姿势下载JetPack 4.6.6需要到NVIDIA嵌入式官网的下载页面在里面找到Jetson TX2对应的JetPack 4.6.6版本。要注意的是页面默认会推荐SDK Manager客户端但如果你想直接用独立的JetPack安装器文件可以往下找选择“JetPack 4.6.6 for Jetson TX2”的Linux安装包下载。下载完成后你会得到一个文件名类似JetPack_4.6.6_Linux_JETPACK_L4T_R32.7.6的文件可能是.run也可能是解压后的目录。建议把它放在宿主机一个路径简单、没有空格和中文的目录下比如~/jetson后面操作会省去很多麻烦。整个安装包体积不小下载时最好用有线网络或者闲置时段进行避免中途断流导致压缩包损坏。如果下载完发现解压报错不要带着损坏的压缩包硬刷重新下载才是正确路径。2. 刷机核心原理理解TX2的启动链路与刷机协议2.1 TX2的三种模式正常启动、恢复模式与USB下载模式在动手之前理解TX2的启动机制很重要。你可以把TX2的eMMC想象成一台电脑的硬盘里面包含了引导程序、操作系统和用户数据。正常工作时TX2上电后由eMMC里的引导程序启动内核再挂载文件系统这和普通电脑没什么区别。刷机要做的就是覆盖这块“硬盘”里的数据。问题在于如果系统已经坏了或者你想完全重装TX2自身没法在运行状态下修改它正在使用的根分区。所以需要进入一个特殊的恢复模式让它暂停从eMMC启动而是通过USB口等待宿主机发送数据。这个模式在TX2上叫Force Recovery模式进入方式很简单先断开电源按住载板上的“Force Recovery”按钮不要松开然后接通电源等待1到2秒后松开按钮。这时TX2的boot ROM会把一个最小的USB下载引导程序拉起来设备在宿主机上会呈现为一个NVIDIA USB设备。这就是刷机通道。2.2 JetPack与L4T的分层关系刷机时你可能会看到很多术语L4T、BSP、JetPack、RootFS、Kernel、Initrd等等。它们之间是什么关系我简单梳理一下。L4TLinux for Tegra是NVIDIA为Tegra/Xavier/Orin系列SoC提供的板级支持包包含引导加载程序、内核、设备树、根文件系统以及对应的硬件驱动。可以把它理解为嵌入式Linux的“底盘”。JetPack是在L4T基础之上叠加的完整开发包包括了CUDA、cuDNN、TensorRT、VisionWorks、多媒体API等。也就是说JetPack是一个大集合L4T是里面最底层的操作系统部分。我们跑nvcc -V能看见CUDA版本跑dpkg -l能看见各种NVIDIA软件包这些都来自JetPack。刷机过程的本质就是先通过USB把引导程序烧进eMMC然后把内核和设备树写到对应分区最后把整个根文件系统rootfs解压写入系统分区。这个顺序不能乱因为后续每个环节都依赖前一个环节成功启动。2.3 刷机到底改变了哪些分区TX2的eMMC容量是32GB刷机时宿主机上的刷机工具会重新对整个eMMC进行分区布局。分区大致包括bootloader分区、kernel分区、设备树分区、A/B槽的系统分区、用户数据分区等。这里有一个很多人容易忽略的坑刷机不只是覆盖系统分区它会重建整个eMMC的分区表所以eMMC上所有的旧数据都会被清掉。如果你之前在上面存过模型、代码或者日志刷机前需要全部备份出去。我这次刷机前顺手把板上几个不再需要的工程文件拷了出来浪费了一个多小时传数据如果早点规划能省一半时间。另外TX2有多个存储位置比如eMMC、NVMe SSD、SD卡刷机默认只操作eMMC。如果你在NVMe SSD上放了系统或者数据刷完eMMC后NVMe上的数据还在但系统启动链路的配置可能会失效需要视情况重新配置。3. 实操记录从宿主机到TX2的完整刷机流程3.1 宿主机环境配置与依赖安装刷机之前先把宿主机环境整理干净。我在Ubuntu 18.04上做了以下操作先执行系统更新确保基础软件包索引是最新的sudo apt update sudo apt upgrade -y然后安装JetPack安装器运行可能需要的依赖库。不同版本需要的东西不太一样最稳妥的做法是安装一组常用的发行版构建工具和Python相关依赖sudo apt install -y build-essential python3 python3-pip python3-dev \ libxml2-dev libxslt1-dev libgtk-3-dev libcanberra-gtk-module \ sshpass minicom如果安装器在运行时报缺少某个运行库再根据报错信息用apt install补上就行。核心原则是不要在没有报错的情况下安装一堆无用的包摊大饼式安装反而可能引入版本冲突。另外确认宿主机有Java运行时部分JetPack版本的安装器界面组件依赖Java。安装一个默认JRE即可sudo apt install -y default-jre装完以后可以用java -version验证一下。3.2 进入Force Recovery模式并确认设备连接环境准备好了接下来把TX2切换到恢复模式。具体操作顺序是这样断开TX2的DC电源。用Micro USB线把TX2载板上的刷机口和宿主机背板的USB口连接起来。按住载板上的Force Recovery按钮不放。插入DC电源等2秒左右松开按钮。在宿主机终端执行lsusb。正常情况下lsusb输出里会出现NVIDIA开头的设备说明TX2已经进入了USB下载模式。如果没看到不要急着往下走先检查Micro USB线是否为数据线、USB口是否直接插在宿主机主板上、Force Recovery按钮有没有按到位。很多时候问题就出在这三个环节。我给一个排查顺序的参考表现象可能原因处理方式lsusb完全看不到设备线是充电线换成数据线设备名显示异常驱动没识别等待几秒重新插拔反复出现消失电压不稳换电源或换USB口确认设备出现后先不要进行任何其他操作保持这个状态进入下一步。3.3 运行JetPack安装器从软件包选择到烧写进入你放JetPack安装包的目录给安装脚本赋予执行权限并运行cd ~/jetson ls -l chmod x JetPack_4.6.6_Linux_JETPACK_L4T_R32.7.6*.run ./JetPack_4.6.6_Linux_JETPACK_L4T_R32.7.6*.run安装器会启动一个图形界面。最开始会让你选择安装方式如果不需要离线包推荐直接在线安装模式让安装器自己下载并挂载组件。随后安装器会识别你已经连接的目标设备选择Jetson TX2开发者套件即可。接下来是组件选择界面这里我建议全选默认组件。如果你只是想了解刷机流程至少也要保留L4T、CUDA、TensorRT和OpenCV这几项否则没有实际意义。确认完成后安装器会先下载所需组件然后进入烧写阶段。在这一步安装器可能会让你输入sudo密码。注意刷机过程耗时较久正常情况下需要10到30分钟取决于网络速度和eMMC写入速度。烧写过程中界面会显示当前执行的步骤比如“Flashing kernel”、“Flashing rootfs”等。此时不要碰USB线不要重启宿主机不要给TX2断电。如果网络在中途断了刷机工具重试几次仍失败的话会进入不可预知的中断状态到时候就得重新来一遍前面等的时间全白费。3.4 系统重启与OEM首开机设置刷机完成后TX2会自动重启屏幕或HDMI输出界面会出现Ubuntu的首次开机设置向导。这里需要设置一个用户名和密码这个用户就是系统管理员用户之后安装软件、修改系统配置都需要它。最终你会在桌面上看到一个干净的Ubuntu 18.04系统。打开终端验证一下CUDA环境是否正常nvcc -V如果输出CUDA版本信息说明JetPack 4.6.6的核心组件已经安装成功。再查一下系统里和NVIDIA相关的包dpkg -l | grep -i nvidia这一步可以看到一堆带nvidia-和cuda-前缀的包说明SDK组件都齐全了。到这里一台搭载JetPack 4.6.6的TX2系统就算刷好了。4. 常见问题与排查实录4.1 宿主机版本不对或依赖缺失导致安装器无法启动我见过不少人在Windows的Bash或Mac虚拟机上尝试运行JetPack安装器各种奇奇怪怪的报错层出不穷最后发现其实只是宿主机系统不是Ubuntu 18.04。这个问题最简单的解决办法是装一个Ubuntu 18.04的实体机或虚拟机虚拟机里把USB直通配置好一样能刷机。如果宿主机是Ubuntu 20.04多数情况下直接运行4.6.6的安装器会报缺少Python 2相关的包因为20.04已经彻底移除了Python 2。官方文档不支持这种组合强行修补很麻烦。如果你只能使用20.04建议用容器方式运行一个18.04环境但配置相对复杂不推荐第一次刷机就挑战这个操作。4.2 lsusb识别不到设备或者设备反复跳变识别不到设备是最常见的拦路虎。先排除数据线问题拿一根短一点的、带屏蔽的Micro USB数据线不要用长线或转接头。然后把TX2上除了电源和USB刷机线之外的外设全部拔掉包括HDMI输出线、网线、串口调试线。外设干扰导致的刷机失败我也踩过拔干净确实管用。如果识别到了但设备几秒钟就消失一次先怀疑电源的供电能力。TX2在刷机模式下的功耗虽然在正常范围内但如果直流电源老化或者输出电流不足会在加载下载引导程序时出现电压跌落设备就会不断重启。这个时候先换电源再试不要反复尝试刷机。4.3 刷到一半报错“CRC mismatch”或“failed”这种情况多半不是软件问题而是链路质量不行。刷机写入过程中USB传输只要发生一帧错误整个刷机就有可能失败。解决思路是换一个主板直出的USB口不要用机箱前面板的USB口关掉宿主机上的省电策略防止USB口进入挂起状态同时确保安装器运行过程中宿主机不要合盖休眠。如果反复在同一位置报错可以试试先让安装器只下载组件然后手动执行烧写脚本。这个方法在旧版JetPack中很实用可以让你看到更详细的刷写日志。但为了篇幅这里不详述脚本手工执行细节先按常规GUI流程走就够用。4.4 刷完卡在开机Logo界面怎么救刷机本身显示完成了但重启后卡在Logo界面这种情况往往是内核或设备树和当前硬件不匹配。最常见的造成原因是刷机过程中选择了错误的目标设备型号。比如开发套件是TX2但在安装器里选了TX2i或TX2 NX烧进去的设备树和内核模块就对不上。此时只需要重新进入Force Recovery模式再跑一遍安装器年龄选择正确的设备型号和组件覆盖安装一次即可。如果覆盖安装后还是卡Logo检查核心模块和载板的连接是否稳固特别是TX2模块底部金手指有没有氧化。4.5 常用故障与排查速查表这里整理一个速查表方便你刷机过程中快速定位问题。故障现象最可能原因解决方案安装器无法启动宿主机系统不对使用Ubuntu 18.04设备未被识别USB数据线问题更换高质量短线刷写中报错链路不稳定换直连USB口关休眠卡在Logo界面设备型号选错重新刷写并确认型号刷完没有桌面环境组件选择遗漏重新安装桌面组件5. 系统初始化与后续开发准备5.1 首次开机后的基础配置刷机只是第一步真正让TX2好用的是后续的初始化配置。登录系统后先更新一遍软件源如果你的网络环境访问官方源较慢可以替换成国内镜像源。这里以清华源为例修改/etc/apt/sources.list把archive.ubuntu.com等地址替换为镜像站地址然后执行更新。sudo apt update sudo apt upgrade -y接着安装SSH服务方便远程开发不用每次接显示器sudo apt install -y openssh-server sudo systemctl enable ssh sudo systemctl start ssh确认一下IP地址把TX2设成固定IP或者记录下当前动态IP后面用SSH登录就稳了。5.2 切换CPU工作模式为什么MAX性能很重要TX2出厂默认的电源模式可能是5W低功耗模式性能会被明显限制。这时候即使你跑一个简单的ONNX模型也会感觉CPU使用率很高推理速度很慢。JetPack 4.6.6里提供了nvpmodel工具来切换电源模式。查看当前模式sudo nvpmodel -q切换到MAXN高性能模式sudo nvpmodel -m 0MAXN模式下CPU和GPU的频率上限会放开。再运行jetson_clocks解锁所有频率调节让硬件跑到最大性能sudo jetson_clocks假如你是在做功耗敏感的嵌入式和移动端项目可以根据实际项目需求切回对应模式比如-m 5之类的节能模式。但对于绝大多数开发调试阶段MAXN才是正确打开方式。5.3 安装交叉编译工具链与常用开发组件TX2刷完JetPack后系统自带的是ARM64环境的软件源。很多标准的pip install包可以直接安装但涉及CUDA扩展的包最好使用NVIDIA预编译版本。举个例子安装PyTorch时直接用官方PyTorch的ARM64 wheel会报版本或依赖错误需要去NVIDIA的官方索引源安装对应的版本。如果像我一样喜欢高效开发还可以在宿主机上装交叉编译工具链实现x86宿主机上编译、ARM板卡上运行的工作流。但这需要额外配置交叉编译环境对不少人来说性价比不高直接在板子上编译也可以接受。TX2的CPU性能虽然比不上现代台式机编译中小型工程的耗时还是可以接受的。6. 经验与避坑关于Jetson刷机的一些真心话6.1 我为什么建议直接用JetPack 4.6.6独立安装器而不是SDK Manager很多人一上来会习惯性下载NVIDIA SDK Manager这个工具确实很现代界面好看还能管理多台设备但用它刷TX2的旧版JetPack时我遇到过几次难以理解的连接中断问题。更麻烦的是SDK Manager强制要求登录NVIDIA开发者账号某些内网环境里认证流程还会卡住。与之相比JetPack 4.6.6自带的独立安装器是一个更纯净的GUI工具流程清晰每一步都有明确日志出错时排查起来方便得多。我的建议是除非你有特别的需求否则就给TX2使用独立安装器简单、稳定、可控。6.2 刷机前务必确认eMMC数据和BOOT跳线有件事我差点吃亏有一次我急着刷一台同事跑过项目的TX2没确认板上数据就直接开始刷机流程结果发现旧的训练脚本还在用户目录下配置文件引用。虽然数据对我来说不重要但对那些在板上有过真实产出的人来说这就是一次深刻的教训。刷机前把需要保留的数据通过U盘或网络传走是触手可及却最容易遗漏的一步。另外如果你的TX2核心模块是通过转接板或者第三方载板来供电先确认Force Recovery按钮和跳线的位置不要按了半天发现按的是Reset按钮。开发商套件载板上按钮位置是比较明确的可以参考板卡贴纸上的丝印标注。6.3 一次典型失误的教训L4T版本不匹配引发的驱动混乱我印象最深的一次失误是刷完JetPack 4.6.6后手动从网上找了一个较新版本的TensorRT deb包安装结果它的依赖把系统里已有的L4T内核模块要求抬高了一级导致多媒体接口异常、CUDA上下文创建失败。理论上L4T R32.7.6对应的TensorRT版本是确定的不应该跨版本安装。那次之后我定下一条规矩刷完机的系统状态先记录下来包括L4T版本、内核版本、每个NVIDIA软件包的版本号后续只通过官方仓库更新绝不手动混装来自其他版本包的库。6.4 最后一点小建议做一次干净的基线快照当所有配置都完成、系统运行稳定后建议对这块eMMC做一次完整镜像备份。以后如果再折腾坏系统不需要重新走一遍刷机加初始化全流程直接恢复镜像就能回到可用状态。备份方式很多核心都是把eMMC作为块设备完整拷贝到另一块盘或通过dd压成镜像。不过手动操作分区表风险较高建议只在特定维护场景下进行或者直接购买一个大容量NVMe移动磁盘存放镜像备份。我的体会是刷机前十分钟的准备工作能省出刷机后一小时查坑的时间。准备一条质量靠谱的Micro USB线确认电源电压稳定把所有无关外设拔干净比任何技巧都管用。Jetson TX2这块板子虽然老了但在边缘嵌入式设备这条线上它依然是皮实耐用、适合入门和做载板验证的好选择。JetPack 4.6.6作为它最后的正式支持版本值得每个还在用TX2的人认真刷一次。