Linuxドライバをデバッグしようとしていますが、特定のコード部分が非常に奇妙に動作します。何が起こっているのかを理解するために、コードが実行されている間に私が興味のある変数が何であるかを正確に見ることができるように、コードをprintkステートメントで埋めました。残念ながら、ライン数の多いリングバッファを印刷するとdmesg
ランダムに失われるようです。 Googleはリングバッファに一度にあまりにも多くのデータを書き込んでいるので、これだと言いました。リングバッファサイズを最大(1 << 21)に増やし、書き込み速度を遅くするためにudelayを挿入してみましたが、まだ同じ問題があります。
また何を試すことができますか?
ベストアンサー1
私が知っている限り、読み取りにklogd
ブロックを使用すると、reniceを介して優先順位を上げることができます。あるいは、オプションを使用してファイルに直接書き込むことで、いくつかのディスクオーバーヘッドを節約するためにramfs / tmpfsにカーネルログを作成することもできます。read()
/proc/kmsg
syslog
klogd
-f
そうでなければ、プランBは道そしてtrace_printk()
:http://lwn.net/Articles/365835/