dmesg 是 Linux 系统中一个非常核心的命令行工具,它的全称是 diagnostic message(诊断消息)或者 display message(显示消息)。
它的核心功能是:显示和控制 Linux 内核的环形缓冲区(Ring Buffer)中的日志信息。
当系统启动或者运行过程中,硬件驱动、内核模块发生任何变化时,内核都会把这些底层信息写到一个内存缓冲区中,而 dmesg 就是用来把这些底层“悄悄话”打印到终端上的工具。
dmesg 最常用来做什么?
在日常开发、运维和嵌入式(如你提到的 RK3568 开发板)调试中,dmesg 主要用于以下几个核心场景:
1. 排查硬件与驱动问题(最常用)
当你插上一个新硬件(如 U 盘、USB 摄像头、网卡、4G 模块)或者加载一个 NPU 驱动时,可以通过 dmesg 查看内核有没有正确识别它。
- 示例: 刚插上 U 盘,运行
dmesg,如果看到Mass Storage device found和sdX: sdX1,说明系统已经识别并为它分配了盘符。
2. 诊断系统崩溃与死机原因(OOM 杀手)
当系统内存耗尽,Linux 内核会启动 OOM Killer(内存溢出杀手)机制,强行杀死占用内存最大的进程。
- 示例: 你的 OCR 模型程序突然无缘无故退出了,没有报任何错误。这时候运行
dmesg,如果看到Out of memory: Kill process ... (rknn_ocr),说明是内存爆了被系统强杀的。
3. 查看系统启动信息
Linux 在刚开机时,屏幕上会快速滚过很多技术参数。开机完成后,你可以用 dmesg 来“复盘”整个启动过程,查看 CPU、内存、显卡、硬盘等核心硬件的初始化状态。
4. 调试内核模块和驱动开发
在 RK3568 这类开发板上,如果你在写 C 语言驱动或者调试内核,代码里的 printk() 打印函数的输出,全部都需要通过 dmesg 才能看得到。
dmesg 常用命令与实战技巧
单纯运行 dmesg 会刷出海量的信息,通常需要配合一些参数或 grep 命令来过滤:
- 人类可读的时间戳(最推荐):
Bash默认的时间戳是系统启动后的秒数(如1
dmesg -T
[ 123.456789]),加上-T后会转换成标准时间(如[Mon Jun 15 10:00:23 2026])。 - 滚动实时查看(类似 tail -f):
Bash这个非常适合调试!你可以开着这个终端,然后去插拔硬件或运行 OCR 模型,能实时看到内核报出来的错误。1
dmesg -w
- 过滤特定关键字(区分大小写):
BashBash1
dmesg | grep -i rknpu # 检查 RK3568 的 NPU 驱动日志
Bash1
dmesg | grep -i error # 快速查找所有报错信息
1
2dmesg | grep -i usb # 查看 USB 设备相关信息
- 只查看特定级别的日志(如只看错误和警告):
Bash1
dmesg -l err,warn
- 一键清空日志缓冲区:
Bash清空旧日志,这样接下来产生的新日志就会非常干净,方便对比测试。1
dmesg -c