Dans une source de pilote de périphérique dans l'arborescence Linux, j'ai vu dev_dbg(...)
et dev_err(...)
, où puis-je trouver le message enregistré? Une référence suggère d'ajouter #define DEBUG
. L'autre reference implique le débogage dynamique et debugfs, et je me suis perdu.Où dev_dbg écrit le journal?
2
A
Répondre
2
dev_dbg()
se développe en dynamic_dev_dbg()
, dev_printk()
, ou non-op en fonction des drapeaux de compilation.
#if defined(CONFIG_DYNAMIC_DEBUG)
#define dev_dbg(dev, format, ...) \
do { \
dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
} while (0)
#elif defined(DEBUG)
#define dev_dbg(dev, format, arg...) \
dev_printk(KERN_DEBUG, dev, format, ##arg)
#else
#define dev_dbg(dev, format, arg...) \
({ \
if (0) \
dev_printk(KERN_DEBUG, dev, format, ##arg); \
})
#endif
dynamic_dev_dbg()
et dev_printk()
appel dev_printk_emit()
qui appelle vprintk_emit()
.
Cette même fonction est appelée en mode normal lorsque vous ne faites qu'un printk()
. Il suffit de noter ici, que le reste des fonctions comme dev_err()
finira dans la même fonction. Ainsi, de toute évidence, le tampon est le même, c'est-à-dire le tampon intrenal du noyau.
Le message connecté à la fin est imprimé à
- console actuelle si le noyau valeur LogLevel (peut être modifiée via la ligne de commande du noyau ou via procfs) est suffisamment élevée pour que certains messages, ici KERN_DEBUG.
- Buffer interne pouvant être lu en exécutant la commande
dmesg
.
Notez que les données dans 2 sont conservées tant qu'il y a encore de la place dans le tampon. Comme il est limité et circulaire, les données les plus récentes anticipent les anciennes.