Was ist der genaue Unterschied zw printk
und pr_info
Funktionen ? Und unter welchen Bedingungen sollte ich einen dem anderen vorziehen?
Unterschied zwischen printk und pr_info
Jacob
Das printk.h des Kernels hat:
#define pr_info(fmt,arg...) \
printk(KERN_INFO fmt,##arg)
Genau wie der Name ist pr_info printk mit der Priorität KERN_INFO.
-
Eigentlich
#define pr_info(fmt, ...) eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
– LPs
15. Februar 2017 um 8:24 Uhr
-
Ausnahme ist
pr_debug()
vs.printk(KERN_DEBUG)
und alle Derivate.– 0andriy
15. Februar 2017 um 22:38 Uhr
Beim genauen Hinsehen pr_info
wird die Definition wiederum verwendet printk(KERN_INFO ...
(wie in der Antwort von barcelona_delpy erwähnt); Das Quell-Snippet der Antwort scheint jedoch den Format-Wrapper auszuschließen pr_fmt(fmt)
(wie in LPs Kommentar erwähnt).
Der Unterschied warum Sie verwenden können pr_info
Über printk(KERN_INFO ...
ist die benutzerdefinierte Formatierung, die Sie festlegen können. Wenn Sie Ihren Nachrichten in Ihrem Modul voranstellen möchten printk
besteht eine Methode darin, Ihr Präfix explizit in jeder Zeile hinzuzufügen:
printk(KERN_INFO "mymodule: hello there\n");
// outputs "mymodule: hello there"
oder:
printk(KERN_INFO KBUILD_MODNAME " hello there\n");
// outputs "mymodule: hello there"
Allerdings, wenn Sie verwenden pr_info
(und andere pr_*
Funktionen), können Sie das Format neu definieren und einfach verwenden pr_info
ohne Mehraufwand:
... (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')
...
}
...
Siehe auch:
@CL. Ja, mein Fehler.
– LPs
15. Februar 2017 um 9:45 Uhr
Alle diese sind gleichwertig, mit Ausnahme von Debug One.
– 0andriy
15. Februar 2017 um 22:37 Uhr