2017-11-17 2 views
0

Irqサービスルーチンのカーネルログにメッセージを印刷する必要があるため、割り込みコンテキストになっています。私はprintkがこのシナリオには推奨されないことを理解しています。だからここで最善の選択肢は何ですか? ありがとうございます。割り込みコンテキストでkmsgを安全に印刷するにはどうすればいいですか

printk_deferredに関する1つのオプションについて聞いたことがありますが、これはスケジューラで使用されていることに気付きましたが、irq isrでどこで使用されているのかはまだわかりません。誰でもprintk_deferredとprintkの違いを説明できますか?

+2

割り込みハンドラの中の[printkの重複した可能性はありますか?](https://stackoverflow.com/questions/8738951/printk-inside-an-interrupt-handler-is-it-really-that -bad) – sawdust

+0

どの割り込みをログに記録しますか?その割り込みが2番目に数千回生成されるとどうなりますか?すべてのシングルアクションを本当にログに記録しますか? これは実際にお勧めしますように、私はタスクレット、softirqまたはworkqueueで延期されたアクションを作成します。 'request_irq'ルーチンを持っているドライバを見てください。IRQハンドラはサービス関数を直接呼び出さないので、IRQハンドラが必要です。 – 0xDen

+0

コメントのおかげで、@ 0xDen 割り込みは20msごとに生成されます。メッセージを印刷するための条件チェックがあります。印刷メッセージが約10分ごとに発生したとしましょう。 –

答えて

1

一般的な考え方は、割り込みハンドラから、印刷する変数や情報を更新し、その値をカーネルログバッファに出力することができます。この方法のハンドラはそのまま残され、私たちの目的も達成されます。

関連する問題