前缀printk / pr_ *调用

时间:2014-12-11 15:52:55

标签: linux-kernel kernel linux-device-driver kernel-module

我想在我的驱动程序(调试)输出前加上其名称,即[myDriver] Actual message。因为每当我考虑覆盖printk(level NAMEMACRO "Actual message\n") / printk以实际包含pr_*部分时,写[myDriver]是很烦人的。但是我想不出办法做到这一点。在最好的情况下,解决方案不会强迫我更改代码中的printk / pr_*调用(通过更改调用,这变得微不足道)。

这可能吗? (由于我包含了其他标题,而​​这些标题又包含printk标题,因此将始终定义此规则,而不是根据不同的建议链接到原始标题。

目前的司机是否有任何理由不在此处? (有没有其他方法可以通过驱动程序过滤dmesg?)

我有点意识到dev_dbg,但我没有找到任何针对警告的开发,因此我会使用printk / pr_err

2 个答案:

答案 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这个问题。