dmesg | grep -iE “ttyACM|suspend|resume|disconnect“ | tail -30 什么时候用dmesg这个关键字?我怎么知道某个问题是内核相关?
在 Linux 和 Android 系统调试中,dmesg(Diagnostic Message)是一个分水岭式的命令。它用来读取**内核环形缓冲区(Kernel Ring Buffer)**的日志。
简单来说:logcat记录的是“软件和 App 的聊天记录”;而dmesg记录的是“硬件和内核底层的交班日记”。
以下为您详细解答何时使用dmesg,以及如何一眼判定问题是否属于“内核相关”。
一、 什么时候用dmesg这个命令?
只要你的排查方向从**“应用软件”转入“物理硬件、驱动、电源管理”**时,就应该使用dmesg。
以下是使用dmesg的经典场景:
- USB 及外设插拔不稳:
- 当你插入 USB、U 盘、鼠标或手机连接电脑时,想确认底层硬件有没有建立物理连接。
- 对应关键字:
usb、disconnect、ttyACM、enumerate。
- 设备休眠与唤醒故障:
- 设备睡死(按电源键不亮屏),或者无法进入低功耗休眠。
- 对应关键字:
suspend(休眠)、resume(唤醒)。
- 底层驱动加载失败:
- 摄像头打不开、Wi-Fi 搜不到信号、蓝牙无法开启。这通常是驱动在初始化(probe)时报错。
- 对应关键字:
probe、fail、driver。
- 整机突然死机重启:
- 设备没有经过正常的关机动画,瞬间黑屏并自动重启。
- 对应关键字:
panic(内核恐慌)、wdt或watchdog(看门狗超时)。
二、 怎么知道某个问题是“内核相关”?
判断一个问题是“内核/底层问题”还是“应用/上层问题”,可以通过以下4 个黄金法则来过滤:
法则 1:看表现——“硬件是不是彻底聋了哑了?”
- 应用层问题:你插上耳机,网易云音乐没有声音,但系统状态栏显示了耳机图标。
- 判定:内核已正确识别硬件,是上层音频路由或 App 的问题(用
logcat)。
- 判定:内核已正确识别硬件,是上层音频路由或 App 的问题(用
- 内核层问题:你插上耳机,系统没有任何反应,声音依然从扬声器外放。
- 判定:底层驱动根本没检测到中断信号(用
dmesg)。
- 判定:底层驱动根本没检测到中断信号(用
法则 2:看重启方式——“是不是瞬间黑屏、没有过渡?”
- 应用层问题:手机卡死,随后出现“正在关机…”的圆形转圈动画,然后关机。
- 判定:这是上层软件主动发起的关机(系统级正常关机)。
- 内核层问题:正在测试,屏幕瞬间一黑,直接亮起开机 Logo,或者直接关机。
- 判定:内核遭遇了致命错误(Panic),硬件看门狗直接切断电源或强行复位。这 100% 是内核问题(必须去
dmesg或last_kmsg找遗言)。
- 判定:内核遭遇了致命错误(Panic),硬件看门狗直接切断电源或强行复位。这 100% 是内核问题(必须去
法则 3:看功能故障——“开关是不是变灰了?”
- 如果在设置里,Wi-Fi 开关、蓝牙开关、或手电筒开关直接变成灰色,无法点击,或者点击后立刻弹回。
- 判定:上层服务在试图开启硬件时,发现底层的驱动节点(控制接口)根本不存在。这通常是内核驱动崩溃、或者加载失败(用
dmesg)。
- 判定:上层服务在试图开启硬件时,发现底层的驱动节点(控制接口)根本不存在。这通常是内核驱动崩溃、或者加载失败(用
法则 4:看日志里的“高频敏感词”
如果任何日志中出现了以下单词,不用怀疑,立刻转向内核调试:
panic/oops:内核崩溃的代名词。lowmemkiller/OOM:内存彻底耗尽,内核底层开始强杀进程。suspend/resume:电源管理模块在控电。probe failed:驱动初始化失败。I/O error:闪存(EMMC/UFS)读写失败,硬件坏道或损坏。
总结
在分析你之前的案例时:
MicrophoneTest被返回键关闭→\rightarrow→这是用户手势交互→\rightarrow→属于应用/系统上层问题→\rightarrow→看logcat。ttyACM0节点刚建好又消失、USB 反复重枚举→\rightarrow→这是物理链路、电压、驱动加载问题→\rightarrow→属于内核/硬件底层问题→\rightarrow→看dmesg。
