Unterschied zwischen printk und pr_info

Lesezeit: 1 Minute

Was ist der genaue Unterschied zw printk und pr_info Funktionen ? Und unter welchen Bedingungen sollte ich einen dem anderen vorziehen?

  • @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

Benutzer-Avatar
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_infowird 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 printkbesteht 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:

1371030cookie-checkUnterschied zwischen printk und pr_info

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy