dmesg | grep -iE “ttyACM|suspend|resume|disconnect“ | tail -30 什么时候用dmesg这个关键字?我怎么知道某个问题是内核相关?
在 Linux 和 Android 系统调试中dmesgDiagnostic 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。内核层问题你插上耳机系统没有任何反应声音依然从扬声器外放。判定底层驱动根本没检测到中断信号用dmesg。法则 2看重启方式——“是不是瞬间黑屏、没有过渡”应用层问题手机卡死随后出现“正在关机…”的圆形转圈动画然后关机。判定这是上层软件主动发起的关机系统级正常关机。内核层问题正在测试屏幕瞬间一黑直接亮起开机 Logo或者直接关机。判定内核遭遇了致命错误Panic硬件看门狗直接切断电源或强行复位。这 100% 是内核问题必须去dmesg或last_kmsg找遗言。法则 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。