ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Jetson载板选型与调试全解析:从供电到设备树一次说透

Jetson载板选型与调试全解析:从供电到设备树一次说透 做Jetson嵌入式项目的过程中我踩过最大的坑就是把模块和载板当成一回事。很多朋友手里拿的是Jetson Nano Modules模组却以为插上电源就能用结果到货以后才发现根本没有网口、USB口甚至开机按键因为真正的输入输出能力全部由载板Carrier Board决定。Carrier Boards Support Jetson Nano Modules这句话翻译成人话就是没有载板Jetson Nano模块就是一块废板。这篇文章我不打算复述官网的规格书只把选型、供电、启动调试、设备树和内核模块这几个关键点一次说透。这篇文章适合三类人看刚买了Jetson Nano模块但不知道载板怎么选的新手已经在用Jetson Orin Nano Super开发板但经常遇到外设不识别、系统起不来的硬件工程师还有那些被“building kernel modules”这类报错折磨过的嵌入式玩家。我会尽量把每个问题背后的逻辑讲清楚而不是丢几个命令了事。1. 项目整体设计与选型思路1.1 载板到底是什么为什么模块离不开它先从最基础的概念说起。Jetson Nano Modules属于系统级模组SoM它把CPU、GPU、内存颗粒甚至存储都集成在一个紧凑的板卡上。这样做的好处是用户不用自己画复杂的核心板只需要买一个现成的模组再配一块功能合适的载板就能快速搭建自己的边缘AI硬件。但代价也跟着来了模组上几乎没有USB、HDMI、以太网、CSI摄像头这类标准连接器也不可能把所有外设接口都压在一块名片大小的板上。所以NVIDIA设计了一套“模块载板”的架构载板就是给模块提供“物理舞台”的底板。载板负责的事情非常多我随便列几个就能看出它的分量把模块引出的PCIe通道转接成M.2 NVMe插槽把USB信号转成Type-A口把以太网MAC信号接到板载PHY芯片把电源时序处理好给模块提供稳定的供电还要提供UART调试口、SWD调试口、风扇接口、40针GPIO等。说白了模块是“大脑”载板是“身体”。大脑再强没有身体去连接外界也做不了事。我自己最早就是太想当然了。第一次拿到Jetson Nano模组兴冲冲买了一块二手载板结果因为不知道载板上的供电规格和模块不匹配连续烧了两块模组。那会儿才意识到选载板才是整个项目里最容易翻车的一步。1.2 载板与Jetson Nano模块的兼容性矩阵载板并不是随便找个接口一样就能用。Jetson模块虽然大多采用260-pin SO-DIMM接口但不同代际的引脚定义、供电需求、启动信号和EEPROM协议并不完全一致。我见过有人把Jetson Nano模块硬塞进标注支持Orin NX的载板结果开机完全没反应。所以选载板之前必须先确认模块型号和载板的兼容列表。这里给出一个比较常用的选型参照表但请注意这只是一个参考具体仍然要以载板厂商官方文档为准模块型号常见接口规格供电要求典型载板推荐Jetson Nano 2GB Module260-pin SO-DIMMeMMC启动5V电压建议5V/4A电源NVIDIA官方Nano Developer Kit载板第三方Nano专用载板Jetson Nano 4GB Module生产版260-pin SO-DIMMSD卡启动为主5V电压建议5V/4A电源官方Nano Developer Kit载板兼容Nano模块的第三方载板Jetson Xavier NX Module260-pin SO-DIMMeMMC启动5V或9-20V取决于载板设计官方Xavier NX Developer Kit载板多数标称兼容NX的载板Jetson Orin Nano 4GB/8GB Module260-pin SO-DIMMeMMC启动官方载体通常使用19V电源适配器部分底板可支持7-20VNVIDIA官方Orin Nano Developer Kit载板Orin NX兼容载板Jetson Orin NX Module260-pin SO-DIMMeMMC启动官方载体通常使用19V电源适配器官方Orin NX Developer Kit载板符合设计要求的高质量载板从这张表能看出几个规律第一物理接口一样并不代表电气兼容跨代使用前必须找厂商确认第二Jetson Nano模块普遍是5V供电而Orin系列载板的输入电压范围更宽但功率门槛也更高第三如果你打算长期跑AI推理尽量选择带有DC电源接口或者USB-C PD协商的载板不要用普通充电头凑合。1.3 按应用场景选载板避免“遍地开花式的浪费”选载板最忌讳只看接口数量多不多而是要看你的应用到底需要什么。比如做AI摄像头边缘盒子那你最缺的是MIPI-CSI接口和PoE供电而不是PCIe x16插槽做机器人小车你需要大量的UART、CAN、GPIO接口最好还有IMU底座和RTC做边缘网络设备则重点看M.2 Key M的NVMe容量和千兆网口数量。我在帮朋友选型时给过一个极简建议先画一张草图把项目用到的外设全部列下来标注它们各自的物理接口然后再拿着这张图去对比载板的说明书。如果载板上某个口要转接线才能用那就要在成本计算里加上转接线和额外占用的空间。很多项目最终失败不是因为算力不够而是因为载板接口不够、供电不稳定、散热压不住这几个问题比芯片跑得慢更致命。另外第三方载板的文档质量参差不齐。有些小厂商只给一张引脚图连设备树文件都不提供这样的载板再便宜我也劝你谨慎。真正的工业级载板会提供完整的DTB文件、原理图、设计指南和测试报告这些才是决定你能不能跑起来的关键资产。2. 载板实操细节与启动调试2.1 供电设计是第一步也是最大的坑载板调试中最常见的问题就是供电。Jetson Nano模块本身功耗不算高但启动瞬间电流会有一个尖峰如果电源适配器电流不足系统会在加载驱动时反复重启。我实测过Jetson Nano 4GB运行一个简单的TensorRT推理程序整板功耗轻松超过5W如果载板上还有USB外设和机械风扇5V/2A电源基本撑不住。所以我的习惯是Jetson Nano模块至少配5V/3A以上的电源最好用5V/4A别在这上面省几十块钱。Orin Nano Super的开发板就比Nano严格得多。官方底板的电源适配器是19V输出总功率要求更高如果拿一个普通的12V电源插上去载板虽然可能亮灯但模块在高负载下会掉电重启。更隐蔽的问题是电源质量有些便宜的适配器纹波很大USB传输会偶发失败看起来像软件问题实际上源头在供电。排查时可以先用示波器看电压纹波没有示波器就换个知名品牌的电源再试。还有一个非常容易忽略的点载板上电顺序。大多数载板要求先接好所有外部线缆再插电源避免热插拔造成连接器信号针损伤。尤其MIPI-CSI排线和M.2 SSD热插拔轻则报错重则烧毁接口。我的载板上到现在还有两个标记提醒自己哪边先拔哪边后拔。2.2 启动模式与拨码开关进入刷机模式没那么玄学几乎所有Jetson载板都会有一颗“Force Recovery”按钮也可能是一个拨码开关的组合。第一次刷机的人最容易懵的就是不知道什么时候按、按多久。以最常见的NVIDIA开发套件载板为例先断开电源USB线先不插主机按住载板上的Force Recovery按钮不放再插上USB线到电脑保持按钮按住两秒之后再松手然后给载板上电。此时在主机上执行lsusb如果能看到NVIDIA Corp的设备ID说明模块已经进入USB恢复模式。如果是第三方载板情况会略有差异。有些载板采用跳帽或拨码开关选择USB Recovery和正常启动甚至支持Micro USB和USB-C两种调试口。一定要先看载板说明书确认对应的丝印。我遇过一块载板丝印上写的是“REC”实际上要按住旁边一颗隐藏的测试点才能进Recovery这种信息在官方论坛里才找得到。经验是不要只看板子丝印去载板厂商的Wiki页面搜索“recovery mode jump”等关键词通常比说明书更及时。进入Recovery模式后刷机工具一般就是NVIDIA SDK Manager或者JetPack命令行工具。刷机时要保持电源稳定最好断开外设。刷Jetson Orin Nano Super这类新版本模块时如果刷机进度条卡住或中途报错第一步检查USB线是不是数据线很多时候原装线只是充电线数据传输会断流第二步换一个USB接口尽量用电脑主板后置USB口第三步关掉杀毒软件和Windows自动更新避免刷机过程中系统状态被干扰。2.3 串口日志比屏幕输出更早看到崩溃原因载板上的UART调试口是排查硬件问题最有效的窗口。很多载板设计时都会保留一个4针或5针的UART排针通常标注为DEBUG、UART0或DBG。这个口输出的是系统启动的完整日志从BootROM、UBoot、内核一直到用户空间全都能看到即使HDMI没有画面也能确认系统到底跑到哪一步。我的习惯是拿到载板第一件事先用USB转TTL线接到这个调试口而不是先接显示器。接线有个硬性规则三根线必须共地否则串口数据根本无法稳定解析。正常情况下红黑绿三根红色是板子输出、黑色地线、绿色接收但不同载板丝印不太一样最好先用万用表量一下电压不要凭颜色猜测。波特率一般是1152008N1。在Linux主机上可以用minicom也可以用screen比如sudo screen /dev/ttyUSB0 115200接好之后上电你会看到密密麻麻的启动日志。如果发现日志停在Carrier Board not detected或者EEPROM read failed说明载板与模块之间的通信出现了问题大概率是DTB不匹配、EEPROM信息缺失或者模块没有插稳。串口日志不会骗人再复杂的软件问题也能顺着日志一层层定位所以我强烈建议每个Jetson项目都优先调通这个调试口。2.4 接好外设接口电平、排线方向和设备树一个都不能少载板上的摄像头接口、40针GPIO和M.2插槽各有各的脾气。GPIO排针上标着5V的引脚大多数只能做电源输出真正用作I2C、SPI、UART信号的引脚是3.3V电平直接接5V的外部传感器会拉低电压甚至烧伤模块。接错一个引脚轻则通信失败重则把模块的GPIO控制器烧了。我的建议是第一次使用40针之前先拿万用表量一遍确认引脚定义和载板说明书完全一致。MIPI-CSI排线是另一个重灾区。排线有正反之分一般在连接器上会标出“R1.0”之类的丝印金属触点必须朝正确方向插入。插到底之后要轻轻拉一下确认锁扣卡住。如果摄像头驱动加载失败先用串口日志看是否报告CSI接口时钟错误再换一根更短的排线。很多图像问题其实是信号质量差而不是软件问题。HDMI/DP接口虽然简单但也有一个误区Jetson模块默认可能有3个显示输出载板只引出了其中一路选择器件树时如果选错端口屏幕就会一直黑着。这就像你有一个多路复用器但默认接的是另一路不是没信号而是没对上频道。3. 从硬件到系统驱动模块与设备树3.1 硬件“看得到”却用不了先查设备树当载板上的某个外设没有反应时很多人的第一反应是驱动没装但在我实际调试中有将近一半的情况是设备树Device Tree没有选对。内核启动时并不是按硬件自动枚举所有外设的而是读取一个二进制设备树文件DTB告诉内核“这块板子上有哪些I2C设备、哪些GPIO、哪些PCIe设备”。载板不同DTB就不同甚至同一个载板配置不同型号的模块DTB也可能不同。我在一块第三方的Nano载板上就遇到过非常典型的案例USB口完全没反应电源灯正常串口日志也正常但系统没有任何USB设备枚举信息。后来我查看内核日志发现USB控制器没有被FT5x06之类的根节点激活原因就是官方默认DTB把USB端口配置成了不同的控制器。换用载板厂商提供的DTB之后USB立刻恢复。所以建议所有用户重点关注三个地方刷机时在默认dtb基础上下发载板厂商的dtb查看/boot/extLinux.conf里FDT标签指向的路径升级内核版本时重新替换dtb而不是沿用旧文件。设备树文件的具体使用方式可以参考以下思路先执行ls /boot/dtb和cat /boot/extlinux/extlinux.conf确认当前使用的是哪一个DTB。如果载板厂商提供了新的dtb文件可以把它放到/boot/dtb目录下然后修改extlinux.conf里的FDT行指向新的文件名。修改完后重启再看串口日志确认是否成功加载。3.2 内核模块与“module not found”案例的真相设备树负责硬件初始化而外设驱动程序通常以内核模块的形式存在。Jetson系统用的是Linux内核很多驱动比如网卡、USB转串口、PCIe桥接芯片都通过lsmod加载成可拆卸模块。检查模块状态我用得最多的三组命令是uname -r # 查看当前内核版本 lsmod | grep -i realtek # 查看模块是否已加载 dmesg | grep -i error # 查看加载失败原因如果硬件已经检测到了但模块没有加载常见做法是手动加载sudo modprobe r8168 sudo depmod -a这里有一个很容易被误导的点depmod -a不是万能药它的作用是更新模块依赖关系。如果你安装了一个针对5.10内核编译的模块而当前系统内核是5.15执行modprobe时就会提示error: cannot find module或者路径下找不到文件。这种情况不是模块丢了而是内核版本不匹配需要到对应内核版本的源码目录重新编译模块。还有一个经典误会有人反映“recon-ng中不能使用show modules”其实那是软件工具内部的模块系统和操作系统内核模块完全没有关系。内核模块的加载、卸载、查看命令是modprobe、insmod、rmmod而recon-ng里的show modules只是它的命令行语法。分清这两个概念可以省下一大堆排查时间。3.3 刷机时“building kernel modules”报错别再盲目重刷在Jetson上刷机或者自己编译内核时经常有人卡在error: an error occurred while performing the step: building kernel modules这一步。这个报错字面意思是“编译内核模块阶段出错”但它背后的原因五花八门我至少遇到过五六种。最常见的是磁盘空间不足。编译内核模块需要大量临时文件一般建议根分区至少留出20GB以上特别是用SDK Manager刷机时它会下载JetPack相关内容到宿主机的~/Downloads目录加上交叉编译工具链很容易把磁盘塞满。检查空间用df -h如果空间不够先清理旧包或者把工作目录换到另一个分区。第二个常见原因是内核源码和当前内核版本对不上。比如系统内核是5.10.65-tegra你手动去GitHub拉了一个master分支的源码编译出来的模块版本是5.15自然加载不进去。解决办法是先执行uname -r确认版本再去对应分支或tag拉取源码。还有一个很容易忽略的点编译模块之前需要先配置好内核源代码树通常要执行make tegra_defconfig make modules_prepare如果跳过modules_prepare编译时会报找不到Module.symvers或者一堆头文件缺失。第三个常见问题是编译过程中权限不够不要直接使用普通用户编译内核模块建议在Makefile里设置好CONFIG_MODULE_SIG选项或者直接以root用户执行。每次报错的关键词可能不同但只要按照“磁盘空间-内核版本-源码准备-编译依赖”这个顺序排查基本都能解决。4. 常见问题与排查实录4.1 问题速查表上电到系统启动全过程结合个人项目经验我把从载板到系统启动最常见的问题整理成了一张速查表希望对你有参考价值现象可能原因排查建议插上电源后模块完全没电流电源未接通、载板保护、模块没插稳用万用表测量电源输入和载板上的5V测试点检查电源开关串口无任何输出调试线接错、共地没接、波特率不对检查UART调试口丝印确认波特率115200接好地线上电后反复重启电源功率不足、散热不良、RTD温度保护更换大功率电源确认风扇供电正常检查模块温度指示灯亮但USB恢复模式不识别USB线非数据线、没有按住Recovery按钮更换数据线重新进入Recovery模式用lsusb确认系统启动后网口灯亮但不能上网载板PHY芯片驱动未加载、设备树错误dmesg查看PHY芯片信息确认DTB匹配载板刷机报building kernel modules错误磁盘空间不足、内核版本不一致检查磁盘空间确认编译源码与当前内核版本一致软件里的show modules不能用工具命令语法问题与内核模块无关查看工具帮助使用正确语法调用插件模块这张表并不全面但覆盖了我个人遇到过的80%基础问题。如果你的问题正好在表里可以直接按建议顺序去查如果不在表里也建议从电源、数据线、设备树三个方向做二分排查这几个是最容易出问题的环节。4.2 用日志和命令一步步定位载板外设问题再分享几个我平时定位载板外设问题常用的命令组合它们比到处问人要有效得多。首先是核心的启动日志dmesg | grep -i usb dmesg | grep -i pcie dmesg | grep -i error这三组命令能快速告诉你USB控制器有没有枚举设备、PCIe设备是否被正确识别、内核有没有报告硬件错误。比如插上USB摄像头但没有出现/dev/video0先看dmesg里有没有new full-speed USB device之类的提示。如果有说明USB链路没问题问题在摄像头的V4L2驱动如果完全没有任何枚举信息问题大概率在载板的USB HUB或相关电源。检查PCIe设备可以用lspci -nnk这个命令会列出所有PCIe设备以及对应的驱动模块。如果NVMe硬盘出现在列表里但后面没有Kernel driver in use说明驱动没有绑定。M.2接口的电源管理也常出问题插了NVMe后感觉系统变卡先查看有没有nvme相关报错。I2C设备检查用sudo i2cdetect -y -r 1载板上的EEPROM、RTC、部分传感器都挂在I2C总线上如果某个地址检测不到不是硬件虚焊就是载板没有提供对应的上拉电阻。这个命令在硬件接入之前和之后各跑一次对比结果就能发现谁被识别到了。4.3 独家避坑技巧三个能救命的习惯最后分享几个我踩过坑之后形成的习惯不一定写在官方文档里但很管用。第一个习惯买载板之前先找载板厂商要“兼容模块列表”和“DTB文件下载页面”。如果厂商只给一句“支持Jetson Nano”却没有列出具体模块型号和JetPack版本建议直接放弃。我在一块板子上遇到过标称“支持Jetson NX”但实际只验证过Xavier NX插上Orin NX后完全无法启动的情况后来才知道它引脚的电源定义和Orin NX不一致。第二个习惯第一次上电不要直接接显示器和外设。先把电源和串口调试线接好观察串口日志确认模块至少能进到UBoot或内核阶段再逐步插上天线、摄像头、NVMe、USB设备。这样做的好处是一旦系统起不来你可以清晰知道是哪一步导致的问题不会同时面对多个变量。第三个习惯准备一条质量好的USB-C数据线和两颗不同阻值的风扇调速线。USB线看起来不起眼却是刷机和Recovery模式最常见的坑点。风扇噪音大或者系统过热时可以手动调整PWM风扇接口的占空比但如果载板的风扇接口没有PWM信号只能靠换一个合适的降压线来控速。这些小配件成本不高却能省下大把调试时间。我自己调试载板还有一个私藏技巧拿到一块新载板先把串口线插好、电源接上然后在电脑上挂着screen让启动日志完整刷一遍。只要日志能正常吐出来这块板子的大框架基本就是健康的。剩下的问题无非是设备树、驱动和供电三者之间的搭配只要按顺序排查总能把板子调通。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进