別の解決策は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のタイムスタンプとどのように関連しているかを知ることはできません。