簡體   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