我想在我的驱动程序(调试)输出前加上其名称,即[myDriver] Actual message
。因为每当我考虑覆盖printk(level NAMEMACRO "Actual message\n")
/ printk
以实际包含pr_*
部分时,写[myDriver]
是很烦人的。但是我想不出办法做到这一点。在最好的情况下,解决方案不会强迫我更改代码中的printk
/ pr_*
调用(通过更改调用,这变得微不足道)。
这可能吗? (由于我包含了其他标题,而这些标题又包含printk
标题,因此将始终定义此规则,而不是根据不同的建议链接到原始标题。
目前的司机是否有任何理由不在此处? (有没有其他方法可以通过驱动程序过滤dmesg?)
我有点意识到dev_dbg
,但我没有找到任何针对警告的开发,因此我会使用printk
/ pr_err
。
答案 0 :(得分:4)
使用pr_{debug,warn,err}()
和[drivername]作为前缀的标准。
例如:
pr_debug("kvm: matched tsc offset for %llu\n", data);
或者,您可以使用dev_warn()
例如:
dev_warn(&adap->dev, "Bus may be unreliable\n");
是否有其他方法可以通过驱动程序过滤dmesg?
除非您希望在加载驱动程序之前运行dmesg -c
清除日志。它总是在调试/打印消息中重新开始为驱动程序名称添加前缀。当您从客户收到日志时,您不希望浪费时间手动读取每一行。
答案 1 :(得分:1)
相关答案(在the duplicate中找到)是#define pr_fmt
(上面链接的重复问题中的代码):
/* At the top of the file, before any includes */
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/printk.h>
作为补充说明,如果我包含变量,有时候pr_fmt
不会自动应用于我。 printk(pr_fmt("message %p"), (void*)ptr)
中的手动使用可以修复这些场合,并遵守定义pr_fmt
的惯例
由于我没有找到重复的问题,我不会删除像我这样的其他google这个问题。