printk
和之间的确切区别是什么pr_info
?在什么条件下,我应该选择一个而不是另一个?
问问题
19040 次
2 回答
26
内核的printk.h有:
#define pr_info(fmt,arg...) \
printk(KERN_INFO fmt,##arg)
就像名字一样,pr_info 是具有 KERN_INFO 优先级的 printk。
于 2017-02-15T07:49:13.200 回答
11
在具体查看时pr_info
,定义将依次使用printk(KERN_INFO ...
(如 barcelona_delpy 的回答中所述);但是,答案的源代码片段似乎排除了格式包装器pr_fmt(fmt)
(如 LPs评论所述)。
您可以使用pr_info
over的不同之处printk(KERN_INFO ...
在于您可以设置的自定义格式。如果你想在你的模块中为你的消息printk
添加前缀,一种方法是在每一行显式地添加你的前缀:
printk(KERN_INFO "mymodule: hello there\n");
// outputs "mymodule: hello there"
或者:
printk(KERN_INFO KBUILD_MODNAME " hello there\n");
// outputs "mymodule: hello there"
但是,如果您使用pr_info
(和其他pr_*
功能),您可以重新定义格式并简单地使用pr_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')
...
}
...
也可以看看:
于 2018-03-08T04:29:45.377 回答