printk和pr_info之间的区别

时间:2017-02-15 07:34:00

标签: c linux-kernel kernel-module printk

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

2 个答案:

答案 0 :(得分:11)

kernel's printk.h有:

#define pr_info(fmt,arg...) \
    printk(KERN_INFO fmt,##arg)

就像名称一样,pr_info是具有KERN_INFO优先级的printk。

答案 1 :(得分:4)

专门查看pr_info时,定义将依次使用printk(KERN_INFO ...(如barcelona_delpy的answer中所述);但是,答案的源代码段似乎排除了格式包装pr_fmt(fmt)(如LP comment所述)。

差异与您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个功能),则可以重新定义格式,只需使用... (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') ... } ... 而无需额外的工作:

-> union.stream().distinct()
|  Expression value is: java.util.stream.DistinctOps$1@4493d195
|    assigned to temporary variable $58 of type Stream<Tuple>

另见: