C printk和PRU信息之间的差异

C printk和PRU信息之间的差异,c,linux-kernel,kernel-module,printk,C,Linux Kernel,Kernel Module,Printk,printk和pr\u info函数之间的确切区别是什么?在什么条件下,我应该选择一个而不是另一个?有: 与名称一样,pr_info是带有KERN_info优先级的printk。当专门查看pr_info时,定义将依次使用printk(KERN_info…(如巴塞罗那_delpy所述);但是,答案的源代码片段似乎排除了格式包装器pr_fmt(fmt)(如LPs所述) 不同之处在于,为什么您可以在printk(KERN\u info…上使用pr\u info是您可以设置的自定义格式。如果您希望在模

printk
pr\u info
函数之间的确切区别是什么?在什么条件下,我应该选择一个而不是另一个?

有:


与名称一样,pr_info是带有KERN_info优先级的printk。

当专门查看
pr_info
时,定义将依次使用
printk(KERN_info…
(如巴塞罗那_delpy所述);但是,答案的源代码片段似乎排除了格式包装器
pr_fmt(fmt)
(如LPs所述)


不同之处在于,为什么您可以在
printk(KERN\u info…
上使用
pr\u info
是您可以设置的自定义格式。如果您希望在模块中的消息前面加上
printk
,一种方法是在每行显式添加前缀:

printk(KERN_INFO "mymodule: hello there\n");
// outputs "mymodule: hello there"
或:

但是,如果您使用
pr\u info
(以及其他
pr\u*
功能),则可以重新定义格式,只需使用
pr\u info
,而无需额外工作:

... (includes)
#ifdef pr_fmt
#undef pr_fmt
#endif
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

...
{
    ...
    pr_err("hello there\n");
    // outputs "mymodule: hello there" (assuming module is named 'mymodule')
    ...
}
...
另见:


实际上
#定义pr#u info(fmt,…)eprintf(0,verbose,pr#fmt(fmt),###VA#u ARGS#
例外是
pr#u debug()
printk(KERN#debug)
和所有派生词。@CL.是的,我的错。除了debug一个,所有这些都是等价的。
printk(KERN_INFO KBUILD_MODNAME " hello there\n");
// outputs "mymodule: hello there"
... (includes)
#ifdef pr_fmt
#undef pr_fmt
#endif
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

...
{
    ...
    pr_err("hello there\n");
    // outputs "mymodule: hello there" (assuming module is named 'mymodule')
    ...
}
...