2017-05-13 29 views
2

Linuxツリーのデバイスドライバソースで、私はdev_dbg(...)dev_err(...)を見ました。どこでログに記録されたメッセージが見つかりますか?dev_dbgはどこにログを書き込みますか?

#define DEBUGを追加することを推奨します。 referenceには動的デバッグとデバッグが含まれていますが、私は迷ってしまいました。

答えて

2

dev_dbg()は、コンパイルフラグに応じてdynamic_dev_dbg(),dev_printk()、またはno-opに展開されます。 vprintk_emit()を呼び出す

#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()dev_printk()コールdev_printk_emit()

printk()の場合、この非常に同じ機能がノーマルモードで呼び出されます。 dev_err()のような残りの機能は、同じ機能に終わることに注意してください。したがって、明らかに、緩衝液は全て同じであり、すなわち、脈管内膜緩衝液である。

カーネルログレベル値(カーネルコマンドラインを介して、またはのprocfsを介して変更することができる)は、ここで特定のメッセージ、KERN_DEBUGために十分に高い場合終わりにログインメッセージが

  1. 現在のコンソールに出力されます。
  2. dmesgコマンドを実行して読み取ることができる内部バッファ。

バッファ内にまだ空きがある限り、2のデータは保持されます。限定された循環型なので、新しいデータは古いデータよりも優先されます。

関連する問題