7 votes

Comment déboguer la boucle de démarrage ?

J'ai une boucle de démarrage Samsung Galaxy S4 Mini LTE (également connu sous le nom GT-i9195 ou serranoltexx - ce n'est pas GT-i9195i ou serranoveltexx ).

Comportement actuel : lorsque le téléphone est éteint, appuyer sur le bouton d'alimentation fait apparaître un écran de démarrage normal avec le texte jaune habituel dans le coin supérieur gauche concernant le noyau personnalisé ("Set Warranty Bit : kernel"). L'écran reste dans cette vue pendant environ 20 secondes, devient noir, le moteur de vibration fonctionne pendant deux courtes périodes et le système redémarre. Je suppose que le système ne parvient pas à démarrer jusqu'à ce que le chien de garde matériel réinitialise le système en raison de l'expiration du délai. Si je démarre avec Volume down + Home + Power tenu, le téléphone passe en mode téléchargement comme d'habitude. Et si je démarre avec Volume up + Home + Power tenu, le téléphone entre en mode récupération (TWRP version 3.3.1.0) où tout semble fonctionner comme d'habitude, aussi. J'exécutais LineageOS 16 (Android 9.0) avec l'application SELinux activée avec les correctifs de sécurité de juin 2019. Le système a XXUCOL3 le micrologiciel du modem si je me souviens bien.

En fin de compte, je peux démarrer avec succès en mode téléchargement et dans la récupération TWRP. Cependant, le système a commencé à ne pas réussir à démarrer le système normal après le cycle normal d'arrêt et de redémarrage et le système fonctionnait bien avant l'arrêt. Existe-t-il un moyen de diagnostiquer et éventuellement de résoudre le problème sans effacer toutes les données ?

Des étapes que j'ai déjà essayées :

  • Effacement du cache Art/Dalwik, de la partition Cache et de la partition Système et réinstallation de l'image système complète via TWRP.
  • Retrait de la batterie
  • Démarrage avec carte SIM et sdcard retirées

Je veux vraiment comprendre pourquoi cela s'est produit afin de l'éviter à l'avenir. Je ne veux vraiment pas avoir un appareil qui se met dans cet état de façon aléatoire et dont la seule façon de le réparer est de l'effacer entièrement. Pouvoir ramener le système actuel à un état utilisable sans effacement complet serait un bonus appréciable car cela évite de reconfigurer à nouveau tous les paramètres et toutes les applications.

Et oui, je sais que cet appareil est vieux et que j'ai déjà dû remplacer la carte mère en raison de la défaillance de la puce emmc, mais j'aime vraiment le facteur de forme et aucun fournisseur ne propose aujourd'hui un appareil similaire. Si le Sharp Aquos R2 compact n'avait pas d'encoches sur l'écran, ce serait mon prochain téléphone.

5voto

JonTheNiceGuy Points 376

En pratique, la seule façon de déboguer les boucles de démarrage précoce est de lire le journal du noyau comme suit :

Etapes minimales pour obtenir le log si vous avez un adb fonctionnel et TWRP :

  1. Lorsque l'appareil démarre en boucle, appuyez sur les touches VOLUME UP + HOME et maintenez-les enfoncées jusqu'à ce que la boucle de démarrage se répète et que vous obteniez le texte bleu "RECOVERY" dans le coin supérieur gauche (la séquence de touches spécifique varie en fonction du matériel mais ce qui précède devrait être correct pour les appareils Samsung). La partie importante est que vous devez entrer dans la récupération TWRP directement après l'échec du démarrage et les étapes exactes pour le faire dépendent du matériel. L'exemple ci-dessus devrait être correct pour tous les appareils Samsung avec bouton d'accueil matériel.

  2. Connectez le téléphone à l'ordinateur à l'aide d'un câble USB et attendez que TWRP finisse de démarrer (l'ordre de connexion du téléphone et de démarrage de TWRP n'est pas important).

  3. Extraire le journal du noyau d'un démarrage raté. Exécutez ce qui suit sur la ligne de commande de l'ordinateur hôte :

La commande requise pour l'hôte linux :

adb shell cat /proc/last_kmsg > ~/Desktop/boot-loop-kernel-log.txt

La commande requise pour l'hôte Windows :

adb shell cat /proc/last_kmsg > %UserProfile%/Desktop/boot-loop-kernel-log.txt

Vous vous retrouverez avec un fichier appelé boot-loop-kernel-log.txt sur votre bureau qui contient le journal du noyau de l'échec du démarrage.

Cela fonctionne parce que /proc/last_kmsg contient le contenu de l'anneau de journalisation du noyau de démarrage précédent (cela fonctionne parce que le noyau conserve cet anneau dans une adresse mémoire connue et que le démarrage suivant sauvegarde le contenu de cette zone mémoire avant d'écrire le nouvel anneau au même endroit). Certains fournisseurs placent l'anneau de journalisation du noyau d'amorçage précédent dans le fichier /sys/fs/pstore/console-ramoops o cat /sys/fs/pstore/console-ramoops-0 donc vous devrez peut-être faire

adb shell cat '/sys/fs/pstore/console-ramoops*' > ~/Desktop/boot-loop-kernel-log.txt

à la place, mais l'idée reste la même. Évidemment, si le matériel écrase toute la mémoire avec des zéros au démarrage, cela ne peut pas fonctionner.

Dans mon cas spécifique de boucle de démarrage, le problème était causé par la correction des couleurs "Live Display" qui échouait pendant le processus de démarrage si ses paramètres avaient été modifiés par rapport aux paramètres par défaut. Avec ce problème spécifique, la solution consiste à démarrer en mode de récupération et à exécuter ce qui suit en tant que Root

rm /data/vendor/display/.displaymodedefault

Version longue des instructions pour acquérir le journal de démarrage pendant une boucle de démarrage : https://forum.xda-developers.com/showthread.php?t=1520508

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X