「netdev_dbg」ログにアクセスするには?

「netdev_dbg」ログにアクセスするには?

qc7000ドライバ(qca_spi.c)を使用してデバイスをデバッグしようとしています。

便利なnetdev_dbgメッセージがたくさん含まれています。

これらのメッセージが保存されているログにどのようにアクセスできますか?

答え1

短い答え:これらの印刷は常に/ proc / kmsgに表示される必要があります。

$ cat /proc/kmsg

来て確認してみてください。各エントリは隣のログレベルも指定するため、「<7>」で始まるエントリを見つけます。

追加情報:netdev_dbg() は include/linux/netdevice.h で定義されたマクロで、最終的に netdev_printk(KERN_DEBUG, ...) を呼び出します。これにより、KERN_DEBUGログレベルのprintk()呼び出しが発生します。各システムには、dmesgに印刷するレベルと無視するレベルを定義する独自のprintk設定があります[1]。それにもかかわらず、すべてのprintk呼び出しはログレベルに関係なく/ proc / kmsgとして印刷されます。

次のコマンドを実行してdmesg設定を確認できます。

$cat /proc/sys/kernel/printk

このファイルの出力には、現在、デフォルト、最小、および開始時間のデフォルトレベルの4つの値があります。あなたは「現在」に興味があります。私の場合、再起動後のデバッグレベルは3(KERN_ERR)でした。これは、レベル> = 3のすべてのprintk呼び出しが無視されることを意味します。

$cat /proc/sys/kernel/printk
3       4       1       7

これをさまざまな方法で変更できます。私はdmesg -nを使用し、デバッグレベルのprintk呼び出しを印刷する必要がある「8」に設定しました。

$sudo dmesg -n 8
$cat /proc/sys/kernel/printk
8       4       1       7

これにより、dmesgでデバッグ印刷を表示できます。

メモ:

  • KERN_DEBUGは「7」なので、現在のログレベルを「8」に設定する必要があります。
  • dmesg設定を上書きできる他の設定があるため、/proc/kmsgはどのような場合でもデバッグメッセージを表示するのに最適な選択でなければなりません。
  • 「cat /proc/kmsg」を呼び出すたびにログがフラッシュされるため、2番目の呼び出しでは、新しいメッセージが到着していない場合はログが空になる可能性があります。

[1] printkと印刷レベルに関する追加情報:https://elinux.org/Debugging_by_printing#Log_Levels

関連情報