如何避免在Linux内核模块内的快捷方式printk宏中使用引号(“ ...”)

问题描述 投票:0回答:1

我为Linux内核printk]创建了一组快捷方式宏,以模块名称为前缀并具有一组严重性别名。

#define _pp(severity, format, args...) \
  printk(severity "%s: " #format "\n", THIS_MODULE->name, ##args)

#define pp_warn(args...) _pp(KERN_WARNING, args)
#define pp_note(args...) _pp(KERN_NOTICE, args)
#define pp_info(args...) _pp(KERN_INFO, args)

使用这样的宏:

static int __init pretty_printk_demo_init(void) {

  pp_warn("Warning severity");
  pp_warn("Warning, checking arguments, %s and %i", "DDD", 44);

}

现在的问题是以下列方式引用内核环形缓冲区中的最终输出:

[  470.819436] pp_demo_module: "Warning severity"
[  470.819438] pp_demo_module: "Warning, checking arguments, DDD and 44"

您是否知道如何避免使用多余的引号?

有关完整文件,请查看HeaderSource文件。

非常感谢您的时间,并期待可能的解决方案。

我为Linux内核printk创建了一组快捷方式宏,它们以模块名作为前缀并具有一组严重性别名。 #define _pp(严重性,格式,args ...)\ printk(严重性“ ...

c linux linux-kernel c-preprocessor printk
1个回答
0
投票

您在宏替换中还有一个额外的#。只需将其删除-format应该已经是字符串:

© www.soinside.com 2019 - 2024. All rights reserved.