web-dev-qa-db-fra.com

Android: Comment obtenir les journaux du noyau après une panique du noyau?

J'utilise un Android Custom ROM sur mon appareil, également avec un boot.img personnalisé (noyau personnalisé + cmdline + ramdisk). Je veux maintenant être capable d'afficher les journaux du noyau immédiatement après une panique du noyau, mais malheureusement je ne peux pas utiliser une console série.

La bonne nouvelle: il semble y avoir des sources/modules dans le noyau Linux de Android qui sont écrits exactement à cet effet. Par exemple, les lignes suivantes sont activées dans mon fichier .config pour le noyau:

CONFIG_Android_RAM_CONSOLE=y
CONFIG_Android_RAM_CONSOLE_ENABLE_VERBOSE=y
CONFIG_APANIC=y
CONFIG_APANIC_PLABEL="oem_log"

Mon problème est le suivant: après avoir forcé une panique du noyau afin de le tester, c'est-à-dire en chargeant un simple module du noyau de panique avec insmod panic.ko, il semble qu'aucun journal n'a été écrit sur le MTD nommé oem_log (qui existe sur mon appareil). Deuxièmement, le RAM ne contient pas non plus de journaux après le redémarrage car il semble être effacé - ou les journaux ne sont pas écrits non plus.

Alors, comment puis-je obtenir les journaux du noyau après une panique? Il serait également utile de pouvoir tester l'APANIC sur le système en cours d'exécution. Peut-être en utilisant le système de débogage du noyau? À partir de maintenant, je suis assez nouveau dans ce domaine.

Merci d'avance pour votre aide!

23
mreichelt

Comme pour moi,

cat /proc/last_kmsg 

après le redémarrage (causé par la panique du noyau pendant insmod) répertorie les messages pertinents pour le crash, comme

[  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

Vous pouvez donc au moins essayer. Je travaille avec Linux 3.0.31-g4f6d371 sur Galaxy Nexus.

26
h22

Il semble que sur Android-7.0 ou supérieur, le journal last_kmesg soit déplacé vers:/sys/fs/pstore/console-ramoops, alors essayez:

cat /sys/fs/pstore/console-ramoops

ça marche bien pour moi sur nexus-5x

9
zhiqiu

Que diriez-vous /data/dontpanic dossier? Après que la panique du noyau se soit produite, vous pouvez connecter un câble USB à votre appareil Android et vérifier les fichiers dans ce dossier via ADB.

J'ai trouvé que ce dossier contient des fichiers apanic après une panique du noyau. Par exemple, si une panique du noyau vient de se produire et que vous allez vérifier le dossier, vous pourriez trouver ces deux fichiers:

apanic_console

apanic_threads

Vous pouvez le découvrir dans apanic_threads quel thread/processus est en cours d'exécution lorsque la panique du noyau se produit. Dans apanic_console vous pouvez trouver plus d'informations telles que la trace de la pile et les valeurs de certains registres critiques: PC, LR, etc.
Ils vous aideront à démarrer le débogage.

8
Weilin Luo

Android crée une console RAM et essaie de sauvegarder le dernier tampon de messages du noyau pour vous dans RAM (en supposant que l'alimentation ne s'éteint pas). Vous pouvez accéder à ce fichier via l'interface proc et sur mon système il est lisible par tout le monde:

cat /proc/last_kmsg

Pour plus d'informations, consultez le code du noyau @ drivers/staging/Android/ram_console.c

3
Kyle

J'ai rencontré un problème similaire de collecte des journaux d'arrêt dans Android. J'avais posté cette question depuis longtemps et elle a 2 approches. J'utilise le 2ème car le 1er ne fonctionne pas pour moi. Voici la question

Où est-ce que Android stocke les journaux d'arrêt?

J'espère que cela t'aides.

1
Pavan Manjunath