如何在 Linux 内核模块内的快捷打印 printk 宏中避免引号(“...”)
How to avoid quotes ("...") in shortcut-ed printk Macros inside Linux Kernel Modules
我为 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"
您知道如何避免使用这些额外的引号吗?
如需完整文件,请查看 Header and the Source 文件。
非常感谢您抽出宝贵时间并期待可能的解决方案。
您在宏替换中还有一个 #
。只需删除它 - format
应该已经是一个字符串:
#define _pp(severity, format, args...) \
printk(severity "%s: " format "\n", THIS_MODULE->name, ##args)
为了在内核中添加一些值,本应使用 pr_fmt
宏,例如 here or here or basically examples everywhere.
我为 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"
您知道如何避免使用这些额外的引号吗?
如需完整文件,请查看 Header and the Source 文件。
非常感谢您抽出宝贵时间并期待可能的解决方案。
您在宏替换中还有一个 #
。只需删除它 - format
应该已经是一个字符串:
#define _pp(severity, format, args...) \
printk(severity "%s: " format "\n", THIS_MODULE->name, ##args)
为了在内核中添加一些值,本应使用 pr_fmt
宏,例如 here or here or basically examples everywhere.