2017-05-13 1 views
2

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?

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é à

  1. 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.
  2. 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.