如何同步内核时间和logcat时间?

Pav*_*ath 6 linux android linux-kernel adb android-logcat

我正在开发基于Linux内核的Android手机.我kmsg用于内核日志和adb logcat -v time平台日志.问题是内核日志显示时间,0.000000并且logcat从系统时间开始显示(例如,如果手机上的时间是10.43.00,它将显示此时的第一个日志)

现在我无法比较这两个日志中的事件,因为时基(参考)不同.任何人都可以指出如何同步这两次?

Pur*_*rei 6

另一个解决方案类似于jpg的答案,但在另一个方向,将内核消息重定向到logcat.这样更好,因为太多的logcat消息可能会使串行控制台过载(如果它处于活动状态).

你可以在android shell中运行它:

cat /proc/kmsg | while read LINE; do echo '\06kernel\0'$LINE'\0' > /dev/log/main; done
Run Code Online (Sandbox Code Playgroud)

或者在主机shell中:

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

第一次启动命令时,您将在一个位置看到所有当前的dmesg消息,但是当它们出现时,任何其他消息将被交错.

然后检查另一个shell中的logcat.如果使用-v time检查logcat,则内核消息将包含logcat和内核时间戳.当然,两者之间可能存在延迟.

另一种更简单的方法是查看消息交错:

adb shell '(logcat & cat /proc/kmsg) > /path/to/log/file'
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,识别来自内核的消息有点困难,而且您无法分辨内核时间戳与logcat时间戳的关系.


jai*_*ogi 5

您可以创建包含内核和平台日志的单个文件,如下所示:

$adb shell    
$logcat -v time -f /dev/kmsg | cat /proc/kmsg > /data/klog_plog_log.txt
Run Code Online (Sandbox Code Playgroud)

您可以使用平台日志中的时间戳来区分日志.然后使用将文件拉到本地驱动器

adb pull /data/klog_plog_log.txt > sample.txt
Run Code Online (Sandbox Code Playgroud)

请参阅http://jai-tech.blogspot.com/2012/01/taking-kernel-and-platform-logs-of.html.希望这可以帮助.

此致,JP


Wil*_*ate 2

帕万,

也许您可以使用自上次启动以来的时间标记您的 logcat 打印?这应该更接近 kmsg 中显示的时间。

可以使用 检索自上次启动以来的时间elapsedRealtime()