7 votos

¿Cómo depurar el ciclo de arranque?

Tengo un Samsung Galaxy S4 Mini LTE que está en un bucle de arranque (también conocido como GT-i9195 o serranoltexx - esto no es GT-i9195i o serranoveltexx).

Comportamiento actual: cuando el teléfono está apagado, presionar el botón de encendido muestra la pantalla de inicio normal con el texto amarillo habitual en la esquina superior izquierda sobre el kernel personalizado ("Set Warranty Bit: kernel"). La pantalla se mantiene en esta vista durante alrededor de 20 segundos, luego se vuelve negra, el motor de vibración se activa durante dos periodos cortos y el sistema se reinicia. Supongo que el sistema está fallando al arrancar hasta que el perro guardián de hardware reinicia el sistema debido a que se excede el tiempo de espera. Si arranco con Volumen abajo + Inicio + Encendido mantenido, el teléfono entra en modo descarga como de costumbre. Y si arranco con Volumen arriba + Inicio + Encendido mantenido, el teléfono entra en modo de recuperación (versión TWRP 3.3.1.0) donde todo parece funcionar normalmente también. Estaba ejecutando LineageOS 16 (Android 9.0) con la aplicación de seguridad de junio de 2019 y SELinux habilitado. Si mal no recuerdo, el sistema tiene el firmware del módem XXUCOL3.

Al final, puedo arrancar con éxito en el modo de descarga y en la recuperación de TWRP. Sin embargo, el sistema comenzó a fallar al arrancar al sistema normal después de un ciclo normal de apagado y reinicio, y el sistema funcionaba bien antes del apagado. ¿Hay alguna manera de diagnosticar y posiblemente solucionar el problema sin borrar todos los datos?

Los pasos que ya he probado:

  • Borrando la caché de Art/Dalwik, la partición de caché y la partición del sistema y volviendo a instalar la imagen completa del sistema a través de TWRP.
  • Retirando la batería
  • Arrancando sin tarjeta SIM ni tarjeta sd

Realmente quiero entender por qué sucedió esto para evitarlo en el futuro. Realmente no quiero tener un dispositivo que aleatoriamente entre en este estado y la única forma de solucionarlo sea borrar todo el dispositivo. Ser capaz de llevar el sistema actual a un estado utilizable sin una borrada completa sería un bono agradable porque evita tener que reconfigurar todas las configuraciones y aplicaciones nuevamente.

Y sí, sé que este dispositivo es antiguo y tuve que reemplazar anteriormente la placa base debido a que la memoria emmc falló, pero realmente me gusta el factor de forma y ningún fabricante ofrece un dispositivo similar en la actualidad. Si el Sharp Aquos R2 compact no tuviera muescas en la pantalla, sería mi próximo teléfono.

0 votos

Esto puede ser causado por un error de software en la última versión de ROM que estoy usando: forum.xda-developers.com/galaxy-s4-mini/orig-development/… - otras personas también están reportando problemas de que el sistema ya no arranca después de apagarlo. Hasta el momento no se conoce ninguna solución, aparte de borrar todos los datos.

0 votos

Ver la respuesta a continuación. Resultó que era reparable a través de adb en TWRP sin borrar datos.

5voto

JonTheNiceGuy Puntos 376

En la práctica, la única forma de depurar los bucles de inicio temprano es leyendo el registro del kernel de la siguiente manera:

Pasos mínimos para obtener el registro del kernel si tienes adb y TWRP funcionando:

  1. Cuando el dispositivo está en un bucle de inicio, presiona y mantén presionados VOLUMEN ARRIBA + INICIO hasta que el bucle de inicio se repita y obtengas el texto azul "RECOVERY" en la esquina superior izquierda (la secuencia de teclas específica diferirá dependiendo del hardware real, pero lo anterior debería ser correcto para dispositivos Samsung). La parte importante es que debes ingresar directamente en la recuperación de TWRP después de un inicio fallido y los pasos exactos para hacer esto dependen del hardware. El ejemplo anterior debería ser correcto para todos los dispositivos Samsung con botón de inicio de hardware. La firmware puede tener alguna otra indicación sobre cómo ingresar a la partición de recuperación que el texto azul "RECOVERY", que creo que es parte de la implementación del firmware de Samsung.

  2. Conecta el teléfono a la computadora usando un cable USB y espera a que TWRP termine de arrancar (no importa el orden en que conectes el teléfono vs. inicies el arranque de TWRP).

  3. Extrae el registro del kernel del inicio fallido. Ejecuta lo siguiente en la línea de comandos de la computadora host:

El comando requerido para el host de linux:

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

El comando requerido para el host de Windows:

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

Obtendrás un archivo llamado boot-loop-kernel-log.txt en tu escritorio que contiene el registro del kernel del inicio fallido.

Esto funciona porque /proc/last_kmsg contiene los contenidos de memoria del anillo de registro del kernel anterior (esto funciona porque el kernel mantiene este registro en una dirección de memoria conocida y en el próximo arranque guarda el contenido de esa área de memoria antes de escribir el nuevo registro en la misma ubicación). Algunos fabricantes ponen el anillo de registro del kernel anterior en el archivo /sys/fs/pstore/console-ramoops o cat /sys/fs/pstore/console-ramoops-0 por lo que puede que necesites hacer

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

en su lugar, pero la idea sigue siendo la misma. Obviamente, si el firmware sobrescribe toda la memoria con ceros durante el arranque, esto no puede funcionar.

En mi caso específico de bucle de inicio, el problema fue causado por la falla de la corrección de color de "Live Display" durante el proceso de inicio si sus configuraciones se habían cambiado desde los valores predeterminados. Con ese problema específico, la solución fue arrancar en recuperación y ejecutar lo siguiente como root

rm /data/vendor/display/.displaymodedefault

Versión larga de las instrucciones para adquirir el registro de arranque durante un bucle de inicio: https://forum.xda-developers.com/showthread.php?t=1520508

0 votos

¿Y si Android no alcanza el punto en el que puede conectarse a ADB?

0 votos

El modo de recovery de Android utiliza una partición de arranque diferente a la del arranque normal, por lo que deberías poder ingresar a TWRP que proporciona soporte para ADB. Si por ejemplo has flasheado una ROM incorrecta (técnicamente flasheaste la partición del sistema operativo pero los fanáticos de Android lo llaman "ROM" por alguna razón) y además flasheado incorrectamente el código de recuperación, entonces no puedes seguir los pasos anteriores. Algunos dispositivos (por ejemplo, los modernos Qualcomm) admiten el arranque de la imagen de recuperación a través del cable USB utilizando el modo fastboot. Para un arranque+recuperación incorrectos, te recomendaría buscar brick recovery combinado con el nombre de tu dispositivo (por ejemplo, gt-i9195).

0 votos

No, lo que quiero decir es que ya tengo acceso a la partición /data pero no encuentro nada útil allí. Además, Samsung no tiene eso en modo de recuperación.

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