Как синхронизировать время ядра и время logcat? - PullRequest
6 голосов
/ 13 июня 2011

Я работаю на телефоне Android на базе ядра Linux. Я использую kmsg для журналов ядра и adb logcat -v time для журналов платформы. Проблема в том, что журналы ядра показывают время с 0.000000, а logcat показывает время с начала системного времени (например, если время на телефоне 10.43.00, будет отображаться первый журнал с этого времени)

Теперь я не могу сравнить события из этих двух журналов, так как база времени (ссылка) отличается. Может кто-нибудь любезно указать, как синхронизировать эти 2 раза?

Ответы [ 5 ]

6 голосов
/ 10 февраля 2013

Другое решение будет похоже на ответ jpg, но в другом направлении перенаправьте сообщения ядра в logcat.Это лучше, потому что слишком много сообщений logcat могут перегружать последовательную консоль (если она у вас активна).

вы можете запустить это в оболочке Android:

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

или этоhost shell:

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

При первом запуске команды вы увидите все текущие сообщения dmesg в одном месте, но все последующие сообщения будут чередоваться, когда они появляются.

а затем изучите logcat в другой оболочке.Если вы изучите logcat со значением -v time, то сообщения ядра будут содержать метки времени logcat и ядра.Конечно, между ними могут быть задержки.

Другой, еще более простой способ увидеть сообщения, чередующиеся, будет:

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

Но в этом случае немного сложнее определить сообщения, поступающие отядро, и вы не можете сказать, как отметки времени ядра связаны с отметками времени logcat.

5 голосов
/ 16 января 2012

вы можете создать один файл, содержащий журналы ядра и платформы, следующим образом:

$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 /ring-kernel-and-platform-logs-of.html.Надеюсь, это поможет.

С уважением, JP

2 голосов
/ 27 декабря 2012

Одиночный метод файла, описанный выше, хорош, но не всегда может быть полезен, так как ввод из logcat и kmsg может быть задержан из-за буферизации.Таким образом, вы, скорее всего, увидите блок записей kmsg, а затем блок записей logcat, которые все еще могут чередоваться в реальном времени.

Тем не менее, вы можете синхронизировать время kmsg и время logcat, просматривая сообщения о приостановке работы устройства в kmsg (grep UTC):

<6> [249485.550811] suspend: выход приостановитьret = 0 (2012-12-27 16: 16: 46.300872527 UTC)

Как вы можете видеть, эти записи в kmsg сообщают текущее время системного таймера, которое затем можно синхронизировать со значением времени в kmsg.Тем не менее, обратите внимание, что значение времени в KMSG не увеличивается, когда устройство находится в спящем режиме, в то время как время настенных часов, очевидно, увеличивается.Для этого вам нужно будет повторно синхронизировать время настенного часа при каждом входе и выходе из режима ожидания, чтобы получить правильное время настенного часа.

2 голосов
/ 13 июня 2011

Паван,

Возможно, вы можете пометить свои отпечатки logcat временем, прошедшим с момента последней загрузки? Это должно быть ближе к времени, указанному в кмс.

Время с момента последней загрузки можно получить с помощью elapsedRealtime().

1 голос
/ 11 июля 2012

Я думаю, что это можно использовать так:

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