メッセージを記録する方法は? [閉鎖]

メッセージを記録する方法は? [閉鎖]

私は方法を知りたい印刷それでは、Linuxカーネルログメッセージは後ろでどのように機能しますか?

答え1

偶然です、私は本で見ました。Linuxデバイスドライバv3。 第4章その本はこう言います。

メッセージを録音する方法

この関数は、カーネルの設定時に選択された4 KBから1 MBの間の値であるバイト長の循環バッファprintkにメッセージを書き込みます。その後、関数はメッセージを待っているすべてのプロセス、つまり__LOG_BUF_LENシステムコールでsyslogスリープ状態または読み取り中のすべてのプロセスを起動します/proc/kmsg。ロギングエンジンへの2つのインターフェイスはほぼ同じですが、読み取り操作はログバッファ内/proc/kmsgのデータを消費しますが、syslogシステムコールはオプションでログデータを別のプロセスに委任しながらログデータを返すことができます。通常、/procファイルを読む方が簡単ですklogd。 yesこのdmesgコマンドは、バッファをフラッシュせずにバッファの内容を表示するために使用できます。実際、このコマンドはstdoutバッファの内容を読み取ったかどうかにかかわらず返します。 。

カーネルメッセージを手動で読み取ると、ストップ後にリーダーがブロックしてより多くのデータを待つため、ファイルがFIFOのように見えるklogdことがわかります。他のプロセスがすでに同じデータを読み取っている場合は競合が発生するため、/procこの方法でメッセージを読み取ることはできません。klogd循環バッファがいっぱいになると、printk循環バッファの先頭に新しいデータの追加が開始され、最も古いデータが上書きされます。そのため、ロギングプロセスで古いデータが失われます。 ...Linuxメッセージング方法のもう1つの特徴は、割り込みハンドラprintkでもどこでも呼び出すことができ、印刷できるデータ量に制限がないことです。唯一の欠点は、一部のデータが失われる可能性があることです。

関連情報