printk 和 pr_info 之间的区别
Difference between printk and pr_info
printk
和 pr_info
函数之间的确切区别是什么?在什么情况下,我应该选择一个而不是另一个?
#define pr_info(fmt,arg...) \
printk(KERN_INFO fmt,##arg)
正如名字一样,pr_info是具有KERN_INFO优先级的printk。
当具体查看 pr_info
时,定义将依次使用 printk(KERN_INFO ...
(如 barcelona_delpy 的 ); however, the answer's source snippet appears to exclude the format wrapper pr_fmt(fmt)
(as mentioned by LPs 中所述)。
您可以使用 pr_info
而不是 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_*
函数),您可以 re-define 格式并简单地使用 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')
...
}
...
另请参阅:
printk
和 pr_info
函数之间的确切区别是什么?在什么情况下,我应该选择一个而不是另一个?
#define pr_info(fmt,arg...) \
printk(KERN_INFO fmt,##arg)
正如名字一样,pr_info是具有KERN_INFO优先级的printk。
当具体查看 pr_info
时,定义将依次使用 printk(KERN_INFO ...
(如 barcelona_delpy 的 pr_fmt(fmt)
(as mentioned by LPs
您可以使用 pr_info
而不是 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_*
函数),您可以 re-define 格式并简单地使用 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')
...
}
...
另请参阅: