内核调试:dmesg、pstore 与 panic 现场
2026/8/9大约 2 分钟内核Android 14内核调试dmesgpanic
内核调试:dmesg、pstore 与 panic 现场
上一章看了调度。这一章回答:内核日志怎么看,内核 panic 现场在哪,如何用 dmesg、 pstore 与 trace 定位内核问题?
重启后的 panic 现场优先查 pstore
| 常见误解 | 正确理解 |
|---|---|
| 内核日志在 logcat | 内核日志主要在 dmesg/pstore,logcat 只转发部分 |
| panic 后什么都拿不到 | pstore 会在重启后保留 panic 现场 |
| 内核调试只能靠厂商 | dmesg、trace、pstore 是通用取证入口 |
核心结论
- dmesg 覆盖启动、驱动加载、错误与警告。
- pstore 保留 panic/重启前的 console 与 ramoops。
- panic 关键词(Kernel panic、Oops)指向崩溃现场。
- ftrace/Perfetto 提供调度与事件轨迹。
- 排查顺序:先看 dmesg 关键字,再找 pstore 现场,最后用 trace 还原。
取证主链
逐步解释:
- 异常:panic、Oops、驱动错误。
- dmesg:看日志关键字。
- pstore:重启后拿现场。
- trace:还原时间线。
常用命令
环境:root 设备或模拟器。
adb shell su 0 dmesg | grep -iE "panic|oops|error|watchdog"
adb shell su 0 ls -l /sys/fs/pstore/
adb shell su 0 cat /sys/fs/pstore/console-ramoops-0
adb shell su 0 cat /proc/interrupts先 grep dmesg 关键字,再读 pstore 现场;panic 后重启的设备优先看 pstore。
源码证据
阅读目标:确认内核日志与 pstore 机制。
正文指针:内核 kernel/printk/(日志);fs/pstore/(持久化); drivers/ramoops/。
// fs/pstore/(伪代码,行号以 r75 为准)
// 崩溃现场写入持久化存储这段代码证明: pstore 在内核崩溃路径保留现场;dmesg 是运行时环形日志,两者 互补。
验证与排障
环境:root 设备或模拟器。
adb shell su 0 dmesg | tail -100
adb shell su 0 cat /sys/fs/pstore/console-ramoops-0 2>/dev/null内核崩溃类问题:先确认是否 panic(dmesg),再取 pstore 现场,最后结合 trace 还原 触发路径。驱动问题看 dmesg 的驱动加载错误。
常见误区
- “内核日志在 logcat”:在 dmesg/pstore。
- “panic 后没证据”:pstore 保留现场。
- “内核调试只能靠厂商”:通用取证入口可先自查。
- “看 dmesg 就够”:还要 pstore 与 trace。
延伸问题
- panic 与 Oops 的区别是什么?
- ramoops 的大小与内容如何配置?
- 如何用 ftrace 定位内核函数问题?
- watchdog 与 panic 的关系是什么?
源码入口
| 文件 | 关键位置 | 作用 |
|---|---|---|
kernel/printk/ | 日志 | dmesg |
fs/pstore/ | 持久化 | 现场 |
drivers/ramoops/ | 驱动 | ramoops |
| ftrace | 轨迹 | trace |
公共路径:内核 kernel/、fs/ 与 drivers/。行号以 r75 检索为准。
内核如何限制访问与系统调用,见 内核安全。