android - modificar - kernel adiutor tutorial
Android: ¿Cómo obtener los registros del kernel después del pánico del kernel? (6)
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 de un error de kernel, pero desafortunadamente no puedo usar una consola serie.
La buena noticia: 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 están activadas en mi archivo .config para el kernel:
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 forzar un pánico en el kernel para probar esto, es decir, al cargar un módulo de kernel de pánico simple 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 RAM tampoco contiene registros después del reinicio porque parece estar borrada, o los registros tampoco se escriben.
Entonces, ¿cómo puedo obtener los registros del kernel después de un pánico? También sería útil si hubiera alguna manera de probar APANIC en el sistema en ejecución. ¿Tal vez usando el sistema de depuración del kernel? A partir de ahora soy bastante nuevo en esto.
¡Gracias de antemano por cualquier ayuda!
¿Qué /data/dontpanic
carpeta /data/dontpanic
? Después de que ocurra el pánico del kernel, puede conectar el cable USB con su dispositivo Android y verificar los archivos en esa carpeta a través de ADB
.
Encontré que esta carpeta contiene algunos archivos apanic
después de que ocurre un pánico en el kernel. Por ejemplo, si acaba de producirse un error de kernel y va a revisar la carpeta, puede encontrar estos dos archivos:
apanic_console
apanic_threads
Puede averiguar en apanic_threads
qué subproceso / proceso se está ejecutando cuando ocurre el pánico del kernel. 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.
Ellos le ayudarán a comenzar su depuración.
Android crea una consola de memoria RAM e intenta guardar el último búfer de mensajes del kernel en la memoria RAM (suponiendo que el poder no se apague). Puede acceder a este archivo a través de la interfaz proc y en mi sistema es legible en todo el mundo:
cat /proc/last_kmsg
Para obtener más información, consulte el código del kernel @ drivers / staging / android / ram_console.c
Como para mí,
cat /proc/last_kmsg
después de reiniciar (causado por el pánico del kernel durante insmod), enumera los mensajes relevantes al fallo, como
[ 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
Así que al menos puedes intentarlo. Estoy trabajando con Linux 3.0.31-g4f6d371 en Galaxy Nexus.
Me enfrenté a un problema similar de recopilación de registros de apagado en Android. Había publicado esta pregunta hace mucho tiempo y tiene 2 enfoques. Uso el segundo ya que el primero no funciona para mí. Aquí está la pregunta
¿Dónde almacena Android los registros de apagado?
Espero que esto ayude.
Parece que en Android-7.0 o superior, el registro de last_kmesg se mueve a: / sys / fs / pstore / console-ramoops, así que intente:
cat /sys/fs/pstore/console-ramoops
me funciona bien en nexus-5x
Se puede acceder al registro del kernel de Linux con el comando dmesg
. Puedes leer sobre el sistema de registro de Android here .