2011-06-13 19 views
6

Estoy trabajando en un teléfono Android basado en el kernel de Linux. Estoy usando kmsg para los registros del kernel y adb logcat -v time para los registros de la plataforma. El problema es Kernel logs muestra el tiempo desde 0.000000 y Logcat se muestra desde el inicio de la hora del sistema (Por ejemplo, si el tiempo en el teléfono es 10.43.00, mostrará el primer registro a partir de este momento)¿Cómo sincronizar el tiempo del núcleo y el tiempo de logcat?

Ahora no puedo comparar eventos de estos 2 registros ya que la base de tiempo (referencia) es diferente. ¿Alguien puede indicar amablemente cómo sincronizar estas 2 veces?

Respuesta

2

Pavan,

Tal vez con usted puede etiquetar sus impresiones LogCat con el tiempo desde el último arranque? Esto debería ser más cercano al tiempo mostrado en kmsg.

El tiempo desde el último inicio se puede recuperar con elapsedRealtime().

+0

@willytale: ¡Muchas gracias! Funciona bien :) ¡Pero el problema es que necesito agregar 'elapsedRealtime()' en cada registro! Así que me registré en el código logcat. El formato de tiempo se realiza en 'android_log_formatLogLine()' en 'logprint.cpp'. Pero 'elapsedRealtime()' está en java y no sé cómo acceder a él desde un archivo cpp. No puedo encontrar un equivalente que pueda usar de este archivo cpp –

5

puede crear un único archivo que contiene tanto el núcleo como los registros de la plataforma de la siguiente manera:

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

se puede diferenciar ambos los registros mediante marcas de tiempo en los registros de la plataforma. Y luego tirar del archivo en la unidad local utilizando

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

Consulte http://jai-tech.blogspot.com/2012/01/taking-kernel-and-platform-logs-of.html. Espero que esto ayude.

Saludos, JP

1

creo que se puede utilizar de esta manera:

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

El método de una sola fila descrito anteriormente es agradable, pero no siempre puede ser útil como la entrada de Logcat y kmsg podría ser retrasado debido al almacenamiento en búfer. Por lo tanto, lo más probable es que vea un bloque de entradas de kmsg y luego un bloque de entradas de logcat que aún podrían estar intercaladas en tiempo real.

Dicho esto, es posible que pueda sincronizar el tiempo kmsg y hora Logcat mediante la búsqueda de dispositivo de suspender mensajes en kmsg (grep UTC):

< 6> [249.485,550811] suspender: salir de la suspensión, ret = 0 (2012-12-27 16: 16: 46.300872527 UTC)

Como puede ver esas entradas en kmsg informan el tiempo de reloj de pared del sistema actual que luego se puede sincronizar con el valor de tiempo kmsg. Sin embargo, tenga en cuenta que el valor de tiempo kmsg no aumenta cuando el dispositivo está dormido, mientras que el tiempo de reloj de pared obviamente lo hace. Para ello, tendrá que volver a sincronizar la hora del reloj de pared en cada entrada suspendida y salir para obtener la hora correcta del reloj de pared.

6

Otra solución sería similar a la respuesta de jpg, pero en la otra dirección, redirigir los mensajes del núcleo en logcat. Esto es mejor, porque demasiados mensajes de logcat pueden sobrecargar la consola serie (si la tiene activa).

puede ejecutar esto en una cáscara androide:

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

o esta en una cáscara de acogida:

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

La primera vez que inicie el comando que va a ver todos los mensajes dmesg actuales en un solo lugar, pero cualquier mensaje adicional se intercalará, cuando aparezca.

y luego examine logcat en un shell diferente. Si examina Logcat con el tiempo -v, entonces los mensajes del núcleo contendrán las marcas de tiempo logcat y kernel. Por supuesto, puede haber demoras entre los dos.

Otra forma aún más sencilla de ver los mensajes intercalados sería:

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

Pero en este caso es un poco más difícil de identificar los mensajes que vienen del núcleo, y no se puede decir como núcleo de marcas de tiempo se relacionan con marcas de tiempo logcat.

+0

Este método es genial ~ Gracias –

Cuestiones relacionadas