![如何访问“netdev_dbg”日志?](https://linux22.com/image/13872/%E5%A6%82%E4%BD%95%E8%AE%BF%E9%97%AE%E2%80%9Cnetdev_dbg%E2%80%9D%E6%97%A5%E5%BF%97%EF%BC%9F.png)
我正在尝试调试使用 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