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