web-dev-qa-db-fra.com

Différence entre printk et pr_info

Quelle est la différence exacte entre printk et pr_info les fonctions ? Et dans quelles conditions dois-je choisir l'un plutôt que l'autre?

19
Jarvis

printk.h du noya a:

#define pr_info(fmt,arg...) \
    printk(KERN_INFO fmt,##arg)

Tout comme son nom, pr_info est printk avec la priorité KERN_INFO.

15
barcelona_delpy

En regardant spécifiquement pr_info, La définition utilisera à son tour printk(KERN_INFO ... (Comme mentionné dans barcelona_delpy answer ); cependant, l'extrait de code source de la réponse semble exclure l'encapsuleur de format pr_fmt(fmt) (comme mentionné par LPs comment ).


La différence entre les raisons pour lesquelles vous pouvez utiliser pr_info Par rapport à printk(KERN_INFO ... Est la mise en forme personnalisée que vous pouvez définir. Si vous souhaitez préfixer vos messages dans votre module avec printk, une méthode consiste à ajouter explicitement votre préfixe sur chaque ligne:

printk(KERN_INFO "mymodule: hello there\n");
// outputs "mymodule: hello there"

ou:

printk(KERN_INFO KBUILD_MODNAME " hello there\n");
// outputs "mymodule: hello there"

Cependant, si vous utilisez pr_info (Et d'autres fonctions pr_*), Vous pouvez redéfinir le format et simplement utiliser pr_info Sans travail supplémentaire:

... (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')
    ...
}
...

Voir également:

6
jdknight