6

LinuxカーネルをベースにしたAndroidフォンで作業しています。kmsgカーネルログとadb logcat -v timeプラットフォームログに使用しています。問題は、カーネルログ0.000000にシステム時刻の開始からの時刻が表示され、logcatがシステム時刻の開始からの時刻が表示されることです(たとえば、電話の時刻が10.43.00の場合、この時刻からの最初のログが表示されます)

タイムベース(参照)が異なるため、これら2つのログのイベントを比較できません。誰かがこれらの2回を同期する方法を親切に指摘できますか?

4

5 に答える 5

6

別の解決策はjpgの答えに似ていますが、反対の方向では、カーネルメッセージをlogcatにリダイレクトします。logcatメッセージが多すぎると、シリアルコンソールが過負荷になる可能性があるため(アクティブにしている場合)、これはより適切です。

これはAndroidシェルで実行できます。

cat /proc/kmsg | while read LINE; do echo '\06kernel\0'$LINE'\0' > /dev/log/main; done

またはこれをホストシェルで:

adb shell '(cat /proc/kmsg | while read LINE; do echo \\06kernel\\0$LINE\\0 > /dev/log/main; done)'

コマンドを初めて起動すると、現在のすべてのdmesgメッセージが1つの場所に表示されますが、それ以降のメッセージは、表示されたときにインターリーブされます。

次に、別のシェルでlogcatを調べます。logcatを-vtimeで調べると、カーネルメッセージにはlogcatとカーネルのタイムスタンプの両方が含まれます。もちろん、2つの間に遅延があるかもしれません。

インターリーブされたメッセージを確認するもう1つのさらに簡単な方法は、次のとおりです。

adb shell '(logcat & cat /proc/kmsg) > /path/to/log/file'

ただし、この場合、カーネルからのメッセージを識別するのは少し難しく、カーネルのタイムスタンプがlogcatのタイムスタンプとどのように関連しているかを知ることはできません。

于 2013-02-10T15:23:44.663 に答える
5

次のように、カーネルログとプラットフォームログの両方を含む単一のファイルを作成できます。

$adb shell    
$logcat -v time -f /dev/kmsg | cat /proc/kmsg > /data/klog_plog_log.txt

プラットフォームログのタイムスタンプを使用して、両方のログを区別できます。次に、を使用してファイルをローカルドライブにプルします

adb pull /data/klog_plog_log.txt > sample.txt

http://jai-tech.blogspot.com/2012/01/taking-kernel-and-platform-logs-of.htmlを参照してください。お役に立てれば。

よろしく、JP

于 2012-01-16T10:03:47.110 に答える
2

パヴァン、

おそらく、前回の起動からの時間でlogcatプリントにタグを付けることができますか?これは、kmsgに表示される時間に近いはずです。

最後の起動からの時間は、で取得できますelapsedRealtime()

于 2011-06-13T11:22:41.137 に答える
2

上記の単一ファイル方式は優れていますが、logcatおよびkmsgからの入力がバッファリングのために遅延する可能性があるため、常に役立つとは限りません。したがって、ほとんどの場合、kmsgエントリのブロックが表示され、次にlogcatエントリのブロックが表示されます。これらのエントリはまだリアルタイムでインターリーブされている可能性があります。

そうは言っても、kmsg(grep UTC)でデバイスの一時停止メッセージを探すことで、kmsg時間とlogcat時間を同期できる可能性があります。

<6> [249485.550811]サスペンド:サスペンド終了、ret = 0(2012-12-27 16:16:46.300872527 UTC)

kmsgのこれらのエントリを見るとわかるように、現在のシステムの実時間を報告します。これは、kmsgの時間値と同期できます。ただし、デバイスがスリープしているときはkmsg時間の値は増加しませんが、ウォールクロック時間は明らかに増加することに注意してください。そのためには、正しいウォールクロック時間を取得するために、すべてのサスペンドエントリとエグジットでウォールクロック時間を再同期する必要があります。

于 2012-12-27T17:00:30.203 に答える
1

私はそれがこのように使うことができると思います:

adb shell logcat -v time -f /dev/kmsg | adb shell cat /proc/kmsg >sample.txt
于 2012-07-11T08:58:13.800 に答える