printk和pr_info函数之间的确切区别是什么?在什么情况下,我应该选择一个而不是另一个?
printk
pr_info
kcugc4gi1#
内核的printk. h有:
#define pr_info(fmt,arg...) \ printk(KERN_INFO fmt,##arg)
字符串就像名字一样,pr_info是具有克恩_INFO优先级的printk。
yyhrrdl82#
当具体查看pr_info时,定义将依次使用printk(KERN_INFO ...(如barcelona_delpy的回答中所述);然而,答案的源代码片段似乎排除了格式 Package 器pr_fmt(fmt)(如LP注解所述)。
printk(KERN_INFO ...
pr_fmt(fmt)
您可以使用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_*函数),则可以重新定义格式并简单地使用pr_info,而无需额外的工作:
pr_*
... (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') ... } ...
型参见:
2条答案
按热度按时间kcugc4gi1#
内核的printk. h有:
字符串
就像名字一样,pr_info是具有克恩_INFO优先级的printk。
yyhrrdl82#
当具体查看
pr_info
时,定义将依次使用printk(KERN_INFO ...
(如barcelona_delpy的回答中所述);然而,答案的源代码片段似乎排除了格式 Package 器pr_fmt(fmt)
(如LP注解所述)。您可以使用
pr_info
而不是printk(KERN_INFO ...
的区别在于您可以设置的自定义格式。如果你想在你的模块中给你的消息加上前缀printk
,一个方法是在每一行显式地添加你的前缀:字符串
或:
型
但是,如果您使用
pr_info
(和其他pr_*
函数),则可以重新定义格式并简单地使用pr_info
,而无需额外的工作:型
参见: