2、系统无法启动:电源指示灯不亮、无显示输出、启动卡在logo、内核panic等问题的排查与解决
系统无法启动,这大概是Jetson开发中最让人头疼的问题了。我遇到过不少工程师,拿着板子一按电源键,灯不亮,心就凉了半截。别急,咱们一步步来拆解。
说白了,启动失败就几种情况:压根没通电、通电了没反应、卡在某个阶段、或者直接崩溃。我按从硬件到软件的顺序,带你捋一遍。
2.1 电源指示灯不亮:硬件层面的第一道坎
按下电源键,指示灯没反应。嗯,这里要注意,先别急着怀疑板子坏了。
第一步:检查电源适配器
- 确认适配器规格:Jetson Nano需要5V/4A,Xavier NX需要9-20V。我用过一个第三方的12V适配器,结果电流不够,灯闪一下就灭了。
- 用万用表测一下输出端电压。空载时电压正常不代表带载后正常,我建议直接接上板子测。
- 检查DC接口有没有松动。Jetson的DC座其实挺脆弱的,插拔多了容易虚焊。
第二步:检查Jumper设置
Jetson Nano有个J48跳线帽,用来选择供电方式。如果你用的是DC口供电,但跳线帽在USB位置,那灯肯定不会亮。我刚开始玩Nano时就犯过这个错,折腾了半小时。
快速判断法:用手摸一下Jetson主板上最大的那个芯片(SoC),如果微微发热,说明供电进来了,只是指示灯电路有问题。如果冰凉,那供电大概率没到。
2.2 无显示输出:电源灯亮了,屏幕没反应
电源灯亮了,风扇也转了,但显示器就是没画面。这种情况我排查过不下二十次。
常见原因与对策:
| 现象 | 可能原因 | 我的处理方式 |
|---|---|---|
| HDMI无信号 | 显示器分辨率不兼容 | 换一个1080P的显示器试试。Jetson对4K显示器的兼容性有时不太好,我遇到过好几例。 |
| DP接口无输出 | 线材问题或接口损坏 | 先换一根线。DP线比HDMI线更容易坏,我手边常备两根备用线。 |
| 串口有输出,HDMI无 | 系统启动正常,显示驱动问题 | 用串口登录,执行 ls /dev/dri/ 看看有没有card0。如果没有,说明内核没加载显示驱动。 |
我的小技巧:如果你手边有Jetson的串口调试线(UART),优先用串口看启动日志。串口输出比HDMI可靠得多,能看到内核从第一条打印信息开始的所有内容。我曾经靠串口日志,发现是某个dtb文件没编译进去导致显示黑屏。
2.3 启动卡在Logo:系统加载到一半停了
屏幕上出现了NVIDIA的Logo,然后就不动了。风扇可能转,也可能不转。这种情况,说白了就是内核或文件系统在某个环节卡住了。
排查思路:
- 接上串口看日志——这是最直接的办法。看最后几行打印,通常能定位问题。
- 检查SD卡或eMMC——卡在Logo最常见的原因是存储介质坏了。我遇到过一张SD卡,读写速度掉到2MB/s,系统加载到一半就超时了。
- 检查电源纹波——用示波器看12V或5V的纹波。如果纹波超过200mV,系统可能会在加载GPU驱动时崩溃。我有个项目,换了三块电源才解决这个问题。
常见卡住位置与含义:
[ OK ] Started User Login Management.之后卡住——通常是显示服务(lightdm或gdm)启动失败。mmc0: error -110 whilst initialising SD card——SD卡初始化失败,换卡吧。tegra_cec: probe of tegra-cec failed with error -110——这个可以忽略,不影响启动。
警告:千万不要在卡Logo时直接拔电。我见过有人反复拔插电源,结果把eMMC写坏了。正确做法是长按电源键10秒强制关机,或者通过串口发送reboot命令。
2.4 内核Panic:系统直接崩溃
内核Panic,就是系统遇到了无法恢复的错误,直接罢工了。屏幕上会打印一堆信息,最后一行通常是 Kernel panic - not syncing。
为什么会Panic? 说白了,就是内核遇到了它处理不了的情况。我总结了几种常见原因:
- 内存不足——Jetson的内存是共享的(CPU+GPU),如果你分配了太多显存给GPU,系统内存就不够用了。我建议GPU内存不要超过总内存的一半。
- 驱动冲突——比如你同时加载了两个版本的NVIDIA驱动。我曾经在刷机时没清理干净旧驱动,结果一启动就Panic。
- 文件系统损坏——非正常关机导致ext4文件系统出问题。用fsck修复一下就好。
如何从Panic信息中定位问题?
看Panic信息,重点看这几行:
Kernel panic - not syncing: Fatal exception
CPU: 3 PID: 1234 Comm: my_app Tainted: P O
Hardware name: NVIDIA Jetson Nano
Call Trace:
[<ffffffc0008a5a3c>] dump_stack+0x18/0x24
[<ffffffc0008a3a4c>] panic+0x100/0x2a0
[<ffffffc0008b7a3c>] do_page_fault+0x3c/0x100
注意看 Comm: my_app,这表示是哪个进程触发了Panic。再看 Call Trace 里的函数名,比如 do_page_fault 表示内存访问错误。我遇到过一次,是某个驱动在内核态访问了非法地址,最后发现是硬件地址映射错了。
我的经验:如果Panic信息里出现 Oops 字样,说明是内核模块出了问题。这时候可以尝试用 modprobe -r 卸载最近加载的模块,再重新加载。我曾经用这个方法,定位到一个第三方WiFi驱动的问题。
2.5 终极手段:恢复模式与刷机
如果以上方法都试过了还是不行,那就得进恢复模式了。Jetson的恢复模式(Force Recovery Mode)是最后的救命稻草。
进入恢复模式的步骤:
- 断开所有电源和USB线
- 按住板子上的
RECOVERY按钮(在Jetson Nano上是靠近SD卡槽的那个小按钮) - 保持按住,然后按一下
RESET按钮 - 保持按住
RECOVERY按钮2秒后松开 - 用USB线连接Jetson的Micro-USB口到电脑
在电脑上执行 lsusb,如果看到 NVIDIA Corp. 的设备,说明进入恢复模式成功了。这时候就可以用 sdkmanager 或 flash.sh 重新刷机了。
避坑指南:我曾经在刷机时,因为USB线质量不好,刷到一半就断开了,结果板子变砖。后来我换了一根带屏蔽层的USB线,再也没出过问题。刷机时尽量用原装线,或者质量好的短线。
好了,关于系统无法启动的排查,我就讲这些。记住一个原则:从硬件到软件,从简单到复杂。先看电源,再看连接,最后看系统日志。大部分问题都能在这几步里找到答案。