9 votos

¿Cómo puedo habilitar last_kmsg?

Estoy tratando de diagnosticar un reinicio aleatorio en LineageOS 14. last_kmsg no está en /proc, ni tampoco está en /sys/fs/pstore/console-ramoops.

EDIT:

~# mount | grep PSTORE
~# mkdir /mnt/pstore && mount pstore -t pstore /mnt/pstore && ls /mnt/pstore
mount: 'pstore'->'/mnt/pstore': No such device

13voto

Jack Wade Puntos 231

En 2012, /proc/last_kmsg (1) solía ser un volcado de mensajes de consola del kernel, exportado después de reboots por la funcionalidad ram_console de Android (CONFIG_ANDROID_RAM_CONSOLE), que utilizaba persistent_ram (CONFIG_ANDROID_PERSISTENT_RAM) para manejar un bloque de RAM que no se borraba en reboots (2).

persistent_ram se basaba en el código de Linux upstream de RAMOOPS que registraba mensajes de pánico y fallos en la RAM. RAMOOPS fue obsoleto en favor de PSTORE (3) (manejo de memoria) y PSTORE_RAM (4) (registro de panics/oops en pstore/dmesg-ramoops). Más tarde se añadió soporte para PSTORE_CONSOLE (5, 6) para registrar no solo los panics/oops, sino todos los mensajes de consola del kernel en pstore/console-ramoops-N que pueden ser leídos más tarde montando pstore (7). Por lo tanto, la especificidad de Android de RAM_CONSOLE (8, 9) y PERSISTENT_RAM (10) fueron eliminados por completo.

Ahora pstore también ofrece el registro de mensajes de espacio de usuario (PSTORE_PMSG) (11) y otras funciones (12). Además, admite múltiples backends para almacenamiento persistente si son compatibles con el hardware, aunque los SoC en dispositivos Android solo admiten almacenamiento en RAM (controlador ramoops, que yo sepa).

Por lo tanto, no es posible habilitar last_kmsg en un kernel upstream, en su lugar pstore ofrece una funcionalidad más versátil.

mount: 'pstore'->'/mnt/pstore': No such device

Indica que tu kernel no está construido con soporte pstore. Todo lo que necesitas hacer es usar un kernel construido con CONFIG_PSTORE_CONSOLE y opcionalmente CONFIG_PSTORE_RAM (aunque con errores). El init de Android monta por defecto pstore en /sys/fs/pstore (13) desde donde se pueden leer dmesg-ramoops (en panics/oops solamente) y console-ramoops.

Puedes buscar en foros una ROM personalizada que incluya dicho kernel. O si tienes el código fuente del kernel, puedes compilarlo tú mismo en una máquina Linux.

NOTA: Algunos dispositivos nuevos, como Samsung, aún exponen la interfaz /proc/last_kmsg; no estoy seguro si utilizan la implementación original o pstore como backend.


LECTURA ADICIONAL: Leyendo registros del kernel

1 votos

Gracias de nuevo por la ayuda, muy informativo

0 votos

/sys/fs/pstore/console-ramoops ¿solo es accesible si se tiene acceso de root?

0voto

Ne Mo Puntos 48

Finalmente logré configurar algún tipo de trabajo cron que escribía el registro en un archivo cada pocos segundos. No puedo recordar cómo, lo siento, fue hace más de dos años.

El registro no me dio una respuesta, lo cual me resultó desconcertante. Me preguntaba si el registro no se estaba copiando lo suficientemente rápido antes del apagado.

Eso podría ser un problema para algunas personas, pero pronto descubrí que el problema era muy simple: la batería estaba defectuosa. Este modelo (s5) tiene una batería extraíble, así que la cambié y el problema desapareció. Haz primero las cosas sencillas.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X