如何访问“netdev_dbg”日志?

如何访问“netdev_dbg”日志?

我正在尝试调试使用 qc7000 驱动程序(qca_spi.c)的设备

它散布着一堆有用的 netdev_dbg 消息。

如何访问存储这些消息的日志?

答案1

简短回答:这些打印应该始终显示在 /proc/kmsg 中,因此您可以运行

$ cat /proc/kmsg

来查看它们。每个条目甚至指定其旁边的日志级别,因此请查找以“<7>”开头的条目。

更多信息:netdev_dbg() 是一个定义在 include/linux/netdevice.h 中的宏,它最终会调用 netdev_printk(KERN_DEBUG, ...)。这会导致使用 KERN_DEBUG 日志级别的 printk() 调用。每个系统都有自己的 printk 配置,它定义哪些级别将打印到 dmesg,哪些级别将被忽略[1]。尽管如此,所有 printk 调用都将打印到 /proc/kmsg,无论日志级别如何。

您可以通过运行以下命令来检查 dmesg 设置:

$cat /proc/sys/kernel/printk

该文件的输出有 4 个值:当前、默认、最小和启动时间默认级别。您对“当前”感兴趣。对我来说,重新启动后的调试级别是 3 (KERN_ERR)。这意味着任何 level >= 3 的 printk 调用都将被忽略:

$cat /proc/sys/kernel/printk
3       4       1       7

您可以通过多种方式更改此设置,我使用 dmesg -n 并将其设置为“8”,这应该打印调试级别 printk 调用:

$sudo dmesg -n 8
$cat /proc/sys/kernel/printk
8       4       1       7

执行此操作后,您应该能够在 dmesg 中看到调试打印。

笔记:

  • 由于 KERN_DEBUG 等于“7”,您需要将当前日志级别设置为“8”才能显示。
  • 还有一些其他设置可能会覆盖 dmesg 设置,因此在任何情况下 /proc/kmsg 都应该是查看调试消息的最佳选择。
  • 每次调用“cat /proc/kmsg”都会刷新日志,因此在第二次调用时,如果没有新消息到达,日志可能为空。

[1] 有关 printk 和打印级别的更多信息:https://elinux.org/Debugging_by_printing#Log_Levels

相关内容