繁体   English   中英

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

[英]How to avoid quotes (“…”) in shortcut-ed printk Macros inside Linux Kernel Modules

我为 Linux Kernel 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);

}

现在的问题是 Kernel Ring Buffer 中的最终 output 以下列方式被引用:

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

你知道如何避免这些额外的引号吗?

如需完整文件,请查看Header文件。

非常感谢您抽出宝贵时间并期待一个可能的解决方案。

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

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

为了在 kernel 中添加一些值,应该使用pr_fmt宏,例如此处此处基本上到处都是示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM