dmesg命令的使用

dmesg 是 Linux 系统中一个非常核心的命令行工具,它的全称是 diagnostic message(诊断消息)或者 display message(显示消息)。

它的核心功能是:显示和控制 Linux 内核的环形缓冲区(Ring Buffer)中的日志信息。

当系统启动或者运行过程中,硬件驱动、内核模块发生任何变化时,内核都会把这些底层信息写到一个内存缓冲区中,而 dmesg 就是用来把这些底层“悄悄话”打印到终端上的工具。

dmesg 最常用来做什么?

在日常开发、运维和嵌入式(如你提到的 RK3568 开发板)调试中,dmesg 主要用于以下几个核心场景:

1. 排查硬件与驱动问题(最常用)

当你插上一个新硬件(如 U 盘、USB 摄像头、网卡、4G 模块)或者加载一个 NPU 驱动时,可以通过 dmesg 查看内核有没有正确识别它。

  • 示例: 刚插上 U 盘,运行 dmesg,如果看到 Mass Storage device foundsdX: 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
    1
    dmesg -w
    这个非常适合调试!你可以开着这个终端,然后去插拔硬件或运行 OCR 模型,能实时看到内核报出来的错误。
  • 过滤特定关键字(区分大小写):
    Bash
    1
    dmesg | grep -i rknpu     # 检查 RK3568 的 NPU 驱动日志
    Bash
    1
    dmesg | grep -i error     # 快速查找所有报错信息
    Bash
    1
    2
    dmesg | grep -i usb       # 查看 USB 设备相关信息

  • 只查看特定级别的日志(如只看错误和警告):
    Bash
    1
    dmesg -l err,warn
  • 一键清空日志缓冲区:
    Bash
    1
    dmesg -c
    清空旧日志,这样接下来产生的新日志就会非常干净,方便对比测试。