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?
#define pr_info(fmt,arg...) \
printk(KERN_INFO fmt,##arg)
Tout comme son nom, pr_info est printk avec la priorité KERN_INFO.
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: