手里这块TX2已经跟着我折腾了不少边缘计算的项目,前阵子系统被我玩到起不来,没办法,只能老老实实走一遍Jetson TX2刷机流程,装回官方为TX2支持的最新JetPack4.6.6。整个过程说难不难,但中间有几个坑如果不注意,很容易让人白等几个小时。这篇文章不是把官方文档翻译一遍,而是把我实际刷的时候用到的步骤、踩过的点、以及后来反复验证过的排查思路都整理出来,给同样手里有TX2、或者刚接手旧板子的朋友参考。
1. 为什么JetPack 4.6.6是TX2的“终点站”
1.1 TX2在JetPack版本矩阵里的位置
Jetson系列每一代都有自己的生命周期,JetPack并不是“一版通吃”。TX2属于较早的Parker架构平台,搭载的GPU是Pascal架构,而后面几代Jetson平台换了架构,底层驱动、内核、BSP全都跟着变。官方维护策略也分得很清楚:新一代JetPack虽然功能更强,但TX2的驱动和支持停留在JetPack 4.x系列,4.6.6就是这个系列最后一个比较完整的版本。
很多刚接触TX2的人会有一个疑问:既然JetPack 5、JetPack 6都出来了,为什么不能直接装新版?答案在于JetPack不是单纯的应用软件包,它还捆绑了特定的Linux内核、引导加载器、GPU驱动、CUDA运行时和多媒体API。TX2的硬件只适配到L4T 32.x这一代BSP,新版JetPack对应的L4T已经是35.x、36.x甚至更高,强行拆包装上,大概率起不来,就算起来GPU也是不工作的。
所以“TX2支持的最新JetPack4.6.6”这句话,不是说TX2还能继续升级,而是说它已经到头了。对长期使用TX2的人来说,4.6.6就是最稳定、最完整的终点镜像。
1.2 这套版本到底包含哪些东西
JetPack 4.6.6本质上是一个“系统+开发环境合集”。刷进去之后,你会得到一个基于Ubuntu 18.04的完整Linux系统,同时带上了官方预编译好的CUDA、cuDNN、TensorRT、OpenCV、VPI等组件。也就是说,刷机完成后不只是能开机,连基础AI推理环境都帮你搭好了一大部分。
这一点在实际开发中非常省事。我不用再自己折腾驱动版本匹配,也不用担心某个库和内核模块对不上。尤其是TensorRT这类深度依赖底层版本的东西,预编译好直接可用,比自己从源码编译不知道高到哪里去了。
1.3 对TX2的未来预期要先摆正
JetPack 4.6.6之后,TX2基本不会再有大版本更新。这意味着两件事:一是这板子的定位已经从“主力开发平台”变成了“存量稳定平台”,适合做工业设备、固定算法节点、边缘推理盒这类不需要频繁升级的场景;二是如果你打算跑最新的大模型推理框架,TX2会有点吃力,很多新特性也不再向下兼容。
我自己对TX2的态度是:把它当做一个可靠的嵌入式Linux+GPU平台来用,而不是追逐最新框架。刷JetPack 4.6.6,就是把这个平台的底子打牢。
2. 刷机前,先把手头的东西盘一盘
2.1 硬件清单:少了哪样都容易卡住
刷Jetson TX2之前,先把物料准备好,临时找东西很容易把流程搞乱。我列一个自己常用清单:
| 物料 | 说明 | 备注 |
|---|---|---|
| TX2模块+载板 | 原厂开发板或第三方载板均可 | 载板不同,Recovery按钮位置可能不同 |
| 主机电脑 | 必须是x86架构的Ubuntu系统 | SDK Manager不提供Windows版 |
| USB数据线 | 能传输数据的Micro-B/Type-C线 | 很多“充电线”只供电不传数据,最容易坑人 |
| 电源适配器 | 按载板规格供电 | 原厂开发板一般需要12V DC,别拿手机充电头凑 |
| 显示器/键鼠 | 刷完后首次进系统要用 | HDMI或DP看载板接口 |
这里要单独强调一下USB线的问题。Jetson刷机依赖主机通过USB和板子通信,如果线只是能充电不传数据,板子怎么折腾都识别不出来。我遇到过不止一次,换根线就好了。所以刷机前最好找一根确定能传数据的线,别用那种买杂牌设备附送的“电源线”。
2.2 为什么非要一台Ubuntu主机
TX2的刷机工具链只能在Linux下跑。Windows宿主机不行,macOS也不行。最省事的方案就是一台装了Ubuntu 18.04或者Ubuntu 20.04的x86电脑。虚拟机能不能用?能用,但要看USB直通是否靠谱。我自己不建议用虚拟机,因为刷机过程中SDK Manager会对USB设备做大量读写,虚拟机一旦USB掉线,整个刷写过程就报废,最后还得重来。
主机配置不用很高,但磁盘空间一定要留够。JetPack 4.6.6下载的安装包、解压缓存、刷写临时文件加起来轻松超过20GB,建议至少留出40GB。CPU和内存倒不是瓶颈,一般四核八线程、8GB内存就够跑了。
2.3 账号、网络这些“软准备”
刷JetPack最推荐的方式是通过官方SDK Manager工具,这个工具需要登录官方账号。所以刷机前先去官网把账号注册好,省得刷到一半发现要登录,再翻邮箱验证。
网络环境也很关键。整个刷机过程会从官方服务器下载系统镜像和组件,如果网速不稳,下载速度慢只是浪费时间,更麻烦的是中途断流导致压缩包校验不过。有条件的话,优先用有线网络,别用高频跳动的无线网络。下载时间取决于网速,慢的时候我等过一个多小时,这个心理准备要有。
还有一个容易被忽略的点:主机和板子之间除了USB线,刷完系统之后组件安装阶段还要通过网络SSH连到板子上去。所以板子最好也提前接好网络,要么网线插路由器,要么准备好USB网卡,不然SDK Manager到“安装组件”那一步会一直卡住。
3. 进入Recovery模式:这个动作决定了后面顺不顺
3.1 为什么TX2刷机必须先进Recovery
TX2不像普通电脑那样用U盘装系统。它的系统写在板载eMMC里,正常情况下固件不允许你随便覆盖。Recovery模式是一段烧在芯片里的固件程序,进入之后芯片会通过USB向主机开放一个下载接口,主机才能把新的bootloader和系统镜像完整写进去。
理解这一点很重要:不是“开机进BIOS改启动项”那样的逻辑,而是芯片先降级成一个可写入的编程状态。所以刷机前检查Recovery是否成功,是整个流程中最关键的一步。Recovery没进,后面的所有操作都是白等。
3.2 不同载板上的“Recovery按键”怎么找
原厂Jetson TX2 Developer Kit载板上一般有明确的Force Recovery按键,旁边会标注“REC”或者“FRec”。第三方载板就五花八门了,有的做成拨码开关,有的叫“Recovery Switch”,有的甚至需要短接引脚。
我建议先翻一下自己载板的硬件手册,找到Recovery模式说明。如果实在没有手册,可以看载板丝印,凡是标REC、SW1、BOOT、FORCE RECOVERY相关的跳线或按键,都可能是入口。
原厂开发板常见的进入方法是:先断开电源,按住Force Recovery键不放,然后按一下Reset键,继续保持按住Force Recovery键大约2秒,最后通电或者松开。实际顺序不同载板会有差异,但核心逻辑是让芯片在上电瞬间读到USB下载模式标志。
3.3 用lsusb验证是否真的进了Recovery
按完处理之后,不要急着打开SDK Manager,先在主机上确认板子被系统识别。打开终端执行:
lsusb -d 0955:如果Recovery模式进入了,这条命令会输出一行设备信息,开头是0955,后面跟着一串产品ID。如果你看到这种输出,说明板子已经处于可刷写状态。如果没有任何输出,那就别继续看后面的步骤了,先回头检查按键时序、电源和USB线。
这里再提醒一个细节:插USB线时,板子最好已经上电并处于Recovery状态;有的板子会要求先插USB再上电,所以要以你的载板说明为准。我吃过亏,以为只要插上USB就算连接,实际上板子必须处于Recovery态,不然主机永远只能看到一个未知设备或者什么都不显示。
4. 用SDK Manager刷JetPack 4.6.6:完整过程
4.1 SDK Manager和手动刷写,我为什么推荐前者
JetPack安装有两条路:一条是用官方SDK Manager图形工具,一条是手动下载L4T BSP再用命令行刷写。对绝大多数人,我推荐SDK Manager。它把“下载镜像、烧录系统、部署组件”串在同一个流程里,而且会自动识别你的板子型号,不容易把手动刷写时常见的型号参数写错。
手动刷写适合什么情况?适合你只想刷一个最小系统,不要CUDA、TensorRT、OpenCV这些预装组件,或者你需要脚本自动化批量刷机。手动方式更“瘦”,但后续组件安装要自己一步步处理。第一次折腾TX2的人,没必要一上来就手动玩。
4.2 安装SDK Manager
SDK Manager以deb安装包形式提供,Ubuntu下直接安装:
sudo apt install ./sdkmanager_*.deb装完后在终端里启动:
sdkmanager首次启动会要求登录官方账号。登录成功后,左侧列表选目标型号,这里选TX2系列。右侧系统版本里选择JetPack 4.6.6。
这里有个容易忽略的选项:下载目录。SDK Manager默认会下载到用户目录下,如果你的系统盘剩余空间不够,它可以让你指定到一个空间充足的分区或外接硬盘。我建议刷机前就把这个路径设置到一个至少有40GB剩余空间的目录,不然下载到一半报磁盘满,更麻烦。
4.3 选择组件:不是越多越好
SDK Manager会让你选择要安装哪些组件。默认是全选,但我的建议是根据项目需要来勾。如果你只是跑推理,TensorRT、CUDA、OpenCV这几个是必需的;如果不需要做视觉处理,VisionWorks可以去掉;如果不需要多媒体编解码,多媒体服务也可以不装。
组件装得越多,刷写后安装阶段越久,占用eMMC空间也越大。TX2的eMMC通常只有32GB,系统本身加上几个核心库就已经吃掉不少。能省的组件尽量省。
4.4 刷写过程中到底发生了什么
点击安装后,SDK Manager会先下载完整的JetPack包,然后检测USB设备。如果前面Recovery模式验证过关,这里应该直接识别到TX2。接着它会先写入bootloader和内核,再写入Ubuntu根文件系统,这个过程中板子上的小屏幕如果有画面,能看到启动状态变化。
写入完成后,SDK Manager会要求你给板子设置用户名和密码,然后板子会自动重启。重启后它会尝试通过SSH登录板子,并把之前勾选的组件一个个传上去安装。
这一步是最考验耐心的:组件安装时间从20分钟到1个多小时不等。期间板子看起来好像已经进入了系统桌面,但进度条还在动,千万不要这时候去动USB线,也不要手动重启板子。我见过很多人在这个阶段误判“刷完了”,直接拔线,结果系统根本没部署完,最后只能从头再来。
4.5 手动刷最小系统的替代方案
如果你需要手动刷,流程会简洁很多。下载L4T BSP和对应的Root File System压缩包,解压后将rootfs文件放进Linux_for_Tegra目录,然后执行:
cd Linux_for_Tegra sudo ./apply_binaries.sh sudo ./flash.sh jetson-tx2apply_binaries.sh会把驱动和库文件打进rootfs,flash.sh则负责真正烧录。这个方式不会自动装CUDA那些组件,适合做定制系统镜像。注意型号参数要写对,TX2一般用jetson-tx2,如果是TX2 4GB版或者TX2i,需要看BSP里对应的设备名,写错了会刷成错误的配置。
5. 刷完只是开始:开机验证与基础环境整理
5.1 第一次开机先别急着跑程序
刷完系统后,接上显示器、键盘,通上电,看到Ubuntu 18.04的桌面才算成功。第一次开机系统会进入初始化设置,设置语言、时区、用户名和密码。这些信息后面SSH连接的时候还要用到,记住密码。
进系统之后,我习惯先打开终端确认内核和L4T版本:
cat /etc/nv_tegra_release uname -a能看到# R32或REVISION相关版本号,就说明L4T已经正确刷进去了。这个版本必须和你下载的JetPack 4.6.6对应上,如果版本对不上,说明中间烧录环节出了问题。
5.2 确认组件是否真正可用
JetPack刷完后,组件不是每个都保证能用,尤其是OpenCV这种容易被系统包冲突影响的库。建议做一次快速验证:
python3 -c "import cv2; print(cv2.__version__)"如果输出版本号,说明OpenCV可用。CUDA一般会安装在/usr/local/cuda,可以检查:
ls -l /usr/local/cuda再配合dpkg看看核心包状态:
dpkg -l | grep l4t看到一堆l4t相关的包状态是ii,就说明系统驱动层正常。
TX2上还有一个很实用的小工具叫tegrastats,可以直接看SoC温度、CPU占用、GPU频率、内存占用。刷完系统后跑一下,心里立刻有数:
tegrastats按Ctrl+C退出。这个命令在嵌入式Jetson上比桌面系统的状态监控靠谱得多,因为它能直接读取Tegra芯片内部统计信息。
5.3 把性能模式调到你要的水平
TX2出厂默认的电源管理不一定是最高性能配置。它支持多种电源模式,系统里有一个命令可以查看和切换:
nvpmodel -q-q查看当前模式,定义列表里一般会有Max-N、Max-P、Max-Q等选项。Max-N是性能最高的模式,适合跑AI推理;Max-Q更省电,适合功耗敏感的现场部署。我自己的习惯是:刷完机马上切成Max-N,先确认硬件稳定性,后续再按实际功耗需求调整。
这里要注意,切换电源模式后最好重启一次,让内核完整加载新的调频策略。
5.4 磁盘容量和包管理的基本检查
TX2的eMMC容量不大,刷完JetPack 4.6.6和核心组件后,剩余空间可能只有十几个GB。第一件事就是看df -h,确认根分区没有异常占用。如果剩余空间很小,可以把系统自带的LibreOffice、游戏这些无关桌面软件卸掉,README里通常没人提,但卸载后能省出一两GB。
sudo apt remove libreoffice-* -y sudo apt autoremove -y这只是可选项,但做边缘部署时,每一GB都很值钱。
6. 刷机路上我遇到的那些坑,一条条给你盘清楚
6.1 lsusb里看不到0955设备
这是刷机过程中最高频的问题。从经验看,原因一般有三个方向:
第一,板子根本没有进入Recovery模式。常见误操作是只按了Reset键,没有按Recovery键;或者按Recovery的时机不对。重新检查按键顺序,板子断电重来。
第二,USB线只供电不传数据。换一根确定能传数据的线,最好换一个主机USB口,特别是不要用机箱前面板上那种供电不稳的口。
第三,主机的USB权限问题。有时普通用户看不到设备,可以加sudo再跑一次lsusb。如果sudo下能看到,那说明权限配置问题,彻底解决是把当前用户加进plugdev组:
sudo usermod -aG plugdev $USER改完注销重登一次。
6.2 SDK Manager卡在组件安装阶段
这种情况一般出现在刷机完成、板子已经进系统准备装组件的时候。原因多半是SDK Manager无法通过SSH连到板子。最常见的诱发因素:板子的用户名密码没设置成功、网络变化导致IP变了、或者板子上SSH服务没起来。
如果卡了很久,我的处理办法是:先等10分钟,观察板子屏幕上是否进入了Ubuntu桌面。如果已经进桌面但SDK Manager还没连上,就手动在网络里确认板子IP,然后用电脑试一下SSH:
ssh 用户名@板子IP能手动连上,说明SSH本身没问题,问题出在SDK Manager的自动配置上,可以重启SDK Manager,它会识别到板子状态,继续安装组件。如果SSH连不上,说明板子系统初始化不完整,建议重新刷。
6.3 刷机中断后会不会变“砖”
Jetson平台最让人放心的一点是,只要Recovery模式还能进,板子基本不会被刷死。我刷机中断过好几次,不管是在bootloader阶段断电还是在文件系统写入时拔线,只要重新进入Recovery模式,再跑一次SDK Manager就能恢复。
真正要害怕的是把bootloader区刷到一半断电导致eMMC分区表损坏,这种情况下可能需要进入更底层的恢复接口。但绝大多数日常刷机操作,都不至于到那一步。所以遇到中断,先不要慌:断电,重按Recovery,确认lsusb有设备,再刷一遍。
6.4 刷完了但是开机黑屏
开机黑屏多数不是系统坏了,而是显示输出问题。TX2载板上的HDMI/DP输出可能不兼容某些显示器,或者分辨率设置异常。先做两件事:把显示器换成1080P的普通显示器,用标准HDMI线;同时拔掉所有外设,只留电源、显示器和键盘。
如果还黑屏,可能启动过程卡在内核阶段。此时可以看板子上的小屏幕指示灯或者串口日志。原厂开发板一般有调试串口,接上串口能看到内核输出。实在不行就重新刷一遍,不用心疼时间。
6.5 eMMC空间不够的连锁反应
JetPack组件安装一半时,如果target上空间不足,SDK Manager会报错,有时还会留下一堆半安装的包。这种情况下系统表面能用,但某些库版本混乱。
我的建议是刷机前在组件选择界面上就狠心做减法;如果已经刷完才发现空间紧张,优先清理/var/cache/apt/archives下的无用deb包,再把不需要的桌面软件卸掉。不要用apt autoremove把所有包都删干净,有的包是系统依赖,删了会导致黑屏。
7. 关于备份、扩容和后续维护,再说几句
7.1 刷好一个干净系统后,先做个备份
TX2的系统在eMMC上,eMMC不像电脑硬盘那样拆下来插别的主机克隆。最稳妥的备份时机,就是刚刷完系统、还没装任何额外环境的时候。备份思路是块级镜像,把整块eMMC读出来存到外接硬盘。
具体操作不适合在板子运行时直接做,最好是再接一块可以启动的硬盘,或者用另一台Linux主机通过USB读。尽管过程有点麻烦,但备份一次能省下以后重复刷机的大量时间。对于要做批量生产的工程场景,一个干净的备份镜像价值是无可替代的。
7.2 用NVMe SSD给TX2扩容是常见玩法
TX2的eMMC容量是硬伤,但JetPack 4.6.6的BSP层面支持从外部存储启动。你可以在载板上接一块NVMe SSD或者高速U盘,把系统放到外部盘上跑。这样不但空间大了,软件安装也不用缩手缩脚。
不过这种做法对载板有要求,不是所有第三方载板都引出了PCIe/NVMe接口。如果你确定板子支持,刷机时可以把系统镜像目标指向外部存储,或者刷完后再手动迁移。迁移过程比直接刷机复杂,建议作为第二步优化,前期还是老老实实把eMMC流程跑通。
7.3 更新维护要克制
JetPack 4.6.6是TX2的最终适配版本,后续不要再想着从系统层面升级内核或跨版本升级组件。尤其不要手贱执行全量的apt upgrade把内核版本升上去,那样很容易突破官方测试过的L4T驱动边界,导致GPU驱动失效。
想安装新的Python库或者框架,尽量用虚拟环境,不要在系统全局环境里乱装。TX2的默认Python是3.6,很多新库已经不兼容了,遇到不支持的版本就手动装低版本,不要为了兼容新Python去动系统python,这很容易把OpenCV和TensorRT弄坏。
7.4 这块板子还能干什么
刷完JetPack 4.6.6之后,TX2最适合的场景其实是那些“算法固定、环境固定、部署后不动”的边缘设备。能耗比不算最优秀,但胜在平台成熟,踩坑资料多,官方组件闭源部分还是能拿到长期稳定的运行包。把它当作视频推流、模型推理、传感器数据预处理的前端小主机,再合适不过。
我自己刷完这块TX2后的习惯是:先做一次全盘镜像备份,然后确定电源模式和开机自启服务,之后日常使用就不再去改系统层的东西。Jetson TX2刷机这件事,说到底就是给这块老芯片一个有边界、可预期的运行环境,只要版本选对了,它能跑的年限比很多人想象中长得多。