2012-03-13 26 views
17

Estoy usando una ROM personalizada de Android en mi dispositivo, también con un boot.img personalizado (kernel personalizado + cmdline + ramdisk). Ahora quiero poder ver los registros del kernel inmediatamente después del pánico del kernel, pero desafortunadamente no puedo usar una consola serial.Android: ¿Cómo obtener los registros del kernel después de kernel panic?

Las buenas noticias: Parece que hay algunas fuentes/módulos en el kernel de Linux de Android que están escritos exactamente para este propósito. Por ejemplo, las siguientes líneas se activan en mi archivo .config para el núcleo:

CONFIG_ANDROID_RAM_CONSOLE=y 
CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y 
CONFIG_APANIC=y 
CONFIG_APANIC_PLABEL="oem_log" 

Mi problema es: Después de Forcé una emergencia en el kernel con el fin de probar esto, es decir, por la carga de un módulo del núcleo de pánico sencillo con insmod panic.ko , parece que no se escribió ningún registro en el MTD llamado oem_log (que existe en mi dispositivo). En segundo lugar, la memoria RAM tampoco contiene registros después del reinicio porque parece que se borró, o los registros tampoco se escriben.

Entonces, ¿cómo puedo obtener los registros del kernel después de un ataque de pánico? También sería útil si hubiera una manera de probar el APANIC en el sistema en ejecución. Tal vez mediante el uso del sistema de depuración kernel? Por ahora soy bastante nuevo en esto.

¡Gracias de antemano por cualquier ayuda!

Respuesta

23

En cuanto a mí,

cat /proc/last_kmsg 

al reiniciar el sistema (causada por el pánico del kernel durante insmod) hace mensajes de la lista pertinentes al accidente, al igual que

[ 424.909515] Kernel panic - not syncing: Fatal exception 
[ 424.909606] Backtrace: 
[ 424.909790] [<c005a5ec>] (dump_backtrace+0x0/0x10c) from [<c05f38dc>] (dump_stack+0x18/0x1c) 
[ 424.909973] r6:c5cccf00 r5:00000000 r4:c08505a0 r3:00000000 

Por lo que puede al menos intentarlo. Estoy trabajando con Linux 3.0.31-g4f6d371 en Galaxy Nexus.

+0

Estoy marcando esto como la respuesta correcta, pero parece funcionar solo si esta funcionalidad se implementó correctamente para el dispositivo en particular. Lo cual, para mí (en el momento en que hice la pregunta y para mi dispositivo particular) no era el caso. – mreichelt

+1

¿Existe este archivo? El dispositivo no ha entrado en pánico –

+0

No existe, kernel versión 3.0.8+. – ogurets

-4

Se puede acceder al registro del kernel de Linux con el comando dmesg. Puede leer sobre el sistema de registro de Android here.

+3

No, se puede' t. Cuando se produce un ataque de kernel, todos los programas de espacio de usuario se detienen inmediatamente, por lo que no puede detectar la causa del pánico. Esto es lo mismo para dmesg,/proc/kmsg y logcat. – mreichelt

1

Me enfrenté a problema similar de de recopilación de registros de cierre en Android. Había publicado esta pregunta hace mucho tiempo y tiene 2 enfoques. Utilizo el segundo como el primero no funciona para mí. Aquí está la pregunta

Where does Android store shutdown logs?

Espero que esto ayude.

+0

Desafortunadamente, todos los archivos aquí descritos solo están disponibles si el módulo APANIC funciona correctamente, que es lo que intento lograr ... – mreichelt

+0

@mreichelt No tuve suerte al conectar con 'adb' y tratar de extraer' kmsg'? –

+0

kmsg es el registro * actual *. Quiero obtener los registros del kernel * después de que se produjo un pánico en el kernel, es decir, cuando el sistema se bloqueó y el dispositivo se reinicia. Para eso está APANIC. – mreichelt

8

¿Qué tal la carpeta /data/dontpanic? Después de que se produce el pánico del kernel, puede conectar el cable USB con su dispositivo Android y verificar los archivos en esa carpeta a través del ADB.

Encontré que esta carpeta contiene algunos archivos apanic después de un ataque de kernel. Por ejemplo, si un pánico del kernel que acaba de pasar y vas comprobar la carpeta, es posible encontrar estos dos archivos:

apanic_console

apanic_threads

puede averiguar en apanic_threads que se enroscan/proceso se ejecuta cuando el pánico del kernel sucede. En apanic_console puede encontrar más información, como el seguimiento de la pila y los valores de algunos registros críticos: PC, LR, etc.
Lo ayudarán a iniciar la depuración.

+0

Tengo esta carpeta, pero no hay archivos dentro (después del pánico). Se ejecutó 'find/-name' * panic * "'y se encontró algo interesante:"/sys/module/kernel/parameters/panic "y"/proc/sys/kernel/panic ", ambos con" 2 "en mi dispositivo. – ogurets

2

Android crea una consola de RAM e intenta guardar el último búfer de mensajes de kernel para usted en la RAM (suponiendo que la energía no se apaga). Se puede acceder a este archivo a través de la interfaz proc y en mi sistema que se pueda leer:

cat /proc/last_kmsg 

Para más información ver el código del núcleo conductores @/puesta en escena/android/ram_console.c

1

lo que parece a Android -7,0 o superior, el registro se mueve a last_kmesg:/sys/fs/Pstore/console-ramoops, a fin de tratar:

cat /sys/fs/pstore/console-ramoops 

funciona bien para mí en Nexus-5x

Cuestiones relacionadas