¿Mensajes de arranque de Android para depuración?

23

Estoy tratando de averiguar si Android (es decir, Galaxy Nexus, Nexus S y / o Motorola Xoom) vienen con algún tipo de capacidad para producir un registro de "arranque". (algo así como la pantalla de inicio de Linux) Sería inmensamente útil determinar qué tan lejos llega el teléfono en las etapas de inicio antes de que falle (como el gestor de arranque de la primera etapa, el gestor de arranque principal, luego la carga del kernel, etc.). ¿Alguien sabe cómo habilitar el teléfono para escupir este archivo de registro o habilitar un modo de arranque "detallado" (e imprimir mensajes reales en el terminal de la computadora Linux a la que tiene conectado el teléfono)?

Mi teléfono se atasca en un "bucle de arranque" con mi compilación modificada actual y me gustaría depurarlo si es posible.

Alternativamente, ¿alguien sabe de recursos útiles o tutoriales que expliquen cómo "piratear" fácilmente el teléfono para hacer esto (sin meterse con el hardware)? ¿O de algún foro donde mi pregunta puede haber sido formulada pero de una forma más oscura?

Este ha sido un problema frustrante reciente, por lo que cualquier ayuda sería muy apreciada.

9exceptionThrower9
fuente
Sé que comienza a escribir en el logcat muy pronto, pero eso se borra una vez que se reinicia. debería comenzar a escribir tan pronto como muestre la "animación de arranque" (o tal vez incluso un poco antes).
Ryan Conrad
2
¿Cómo accederías a logcat sin "adb"? Adb solo funciona cuando el teléfono está en un estado estable, lo que contradice todo el punto, supongo, de por qué existe logcat (a quién le importa si el teléfono se inicia con éxito, no se necesita mucho la herramienta).
9exceptionThrower9
adb es uno de los primeros servicios que se inician. si ve la animación de arranque, adb ya se está ejecutando. adb incluso está disponible cuando está en modo de recuperación.
Ryan Conrad
Bueno, no estoy seguro de ver la animación de arranque de la que estás hablando. Después del símbolo de "carga" de la batería, el teléfono se cuelga de la pantalla con "Google" en blanco antes de que se bloquee. No hay pantalla de bienvenida de "Android" después de eso, ni ninguna animación de arranque. Así que no creo que ADB funcione todavía ...
9exceptionThrower9

Respuestas:

14

Hay un par de formas de hacer esto:

  • cat /proc/last_kmsg > /sdcard/last_kernel_message_log.txt
  • dmesg > /sdcard/kernel_boot_log.txt
  • conecte el cable usb con el teléfono inteligente apagado. Luego emita el comando adb logcatdesde su cmd de Windows o terminal de Linux, se colgará esperando que el dispositivo se conecte, ahora encienda el teléfono inteligente. El logcat debería comenzar a desplazarse entonces.

Dado que expresó interés en averiguar qué tan lejos llega el teléfono en las etapas de arranque antes de que se bloquee , esos métodos deberían ayudar. La cuestión es que debes ser bastante rápido para tomar el registro del kernel (los dos primeros métodos que se muestran arriba).

Lo que haría es esto, en mi caja Arch Linux, dos ventanas de terminal, una para adb logcatla otra, para tomar el registro en el momento en que logcat comienza a desplazarse.

Editar:

Tenga en cuenta que hay diferencias con el uso de adby fastboot!

fastbootfunciona de manera diferente, solo se usa para flashear imágenes en particiones especificadas, y está más relacionado con el proceso del cargador de arranque, es decir, puede comprender el mecanismo del cargador de arranque. También requiere que:

  • bajo Windows, privilegio 'Administrador' para ejecutarlo
  • bajo Linux, privilegio 'root'

La razón por la que lo requiere es porque omite ciertas entradas / salidas del hardware y, por lo tanto, no "habla" en el adbprotocolo, sino que es "hablar" directamente con el gestor de arranque. Algo que no se puede hacer como usuario normal. Aquí está la ayuda para el uso de fastboot.

$ sudo fastboot
usage: fastboot [ <option> ] <command>

commands:
  update <filename>                        reflash device from update.zip
  flashall                                 flash boot + recovery + system
  flash <partition> [ <filename> ]         write a file to a flash partition
  erase <partition>                        erase a flash partition
  getvar <variable>                        display a bootloader variable
  boot <kernel> [ <ramdisk> ]              download and boot kernel
  flash:raw boot <kernel> [ <ramdisk> ]    create bootimage and flash it
  devices                                  list all connected devices
  continue                                 continue with autoboot
  reboot                                   reboot device normally
  reboot-bootloader                        reboot device into bootloader
  help                                     show this help message

options:
  -w                                       erase userdata and cache
  -s <serial number>                       specify device serial number
  -p <product>                             specify product name
  -c <cmdline>                             override kernel commandline
  -i <vendor id>                           specify a custom USB vendor id
  -b <base_addr>                           specify a custom kernel base address
  -n <page size>                           specify the nand page size. default: 2048

A-uso conocido bien de fastbootes para destellar por ejemplo, a parpadear una imagen de recuperación: sudo fastboot flash recovery recovery.img, otro es a parpadear directamente una imagen sin procesar, sudo fastboot flash system system.img. Para más sobre el caso del desarrollo del kernel, usando esto fastboot boot new_kernel, esto descarga temporalmente un nuevo kernel y arranca usando eso sin tocar el arranque del cargador de arranque.

También hay una limitación en el tamaño de una imagen en bruto que requiere ser flasheada, cuando digo imagen en bruto, me refiero a un archivo que tiene una .imgextensión, la imagen no debe exceder los 128Mb. ( Descubrí esto cuando desarrollé ics4blade, después de que se completó la compilación, el system.img era 162Mb, ¡y traté de flashearlo pero fastboot se negó! Para evitar la limitación, tuve que crear un archivo zip CWM flashable para hacerlo y moverse eso! )

Tenga cuidado y asegúrese de que la partición sea correcta y vuelva a verificar y vuelva a verificar, si es necesario, aléjese de la computadora, tómese un descanso, regrese nuevamente y vuelva a verificar, aquí es donde puede salir terriblemente mal, flashear el archivo incorrecto en la partición incorrecta ... bueno, se encoge de hombros

t0mm13b
fuente
3
Esta es una gran idea, pero un problema ... adb solo funciona si el demonio adb puede detectar el dispositivo. Si el teléfono no se ha iniciado correctamente, adb no funciona. Entonces, un "bucle de arranque", cuando necesitarías más logcat, no funcionaría, y no lo es en este momento mientras lo intento. Lo único que tiene acceso a los comandos que no le importa si el teléfono se ha iniciado correctamente es "arranque rápido". ¿Qué es una alternativa en este caso entonces?
9exceptionThrower9
@ 9exceptionThrower9 ha editado mi respuesta para incluir el concepto de fastboot y para responder en tu comentario, fastboot no funcionará :)
t0mm13b
La única alternativa que se me ocurre es borrar rápidamente la partición cachey la datapartición: ¡no soy responsable de nada desagradable si continúas! E intente actualizar la ROM nuevamente a través de CWM. Aún mejor , se olvidan de fastboot y el uso de CWM para limpiar tanto la memoria caché y los datos , parece que el bootloop se debe a una caché de datos o borked ...
t0mm13b
Como cuestión de interés, ¿ qué hiciste exactamente para que se iniciara en el bootloop? Esa es una pregunta crucial y te gustaría saber qué pasos tomaste.
t0mm13b
Modifiqué el kernel de Android (maguro) para Galaxy Nexus, particularmente el archivo "socket.h" para anular el registro de INET con el proyecto de investigación FINS de mi equipo (que extrae protocolos de Internet en el espacio de usuario para investigadores de redes). Después de modificar este archivo (solo unas pocas líneas), volví a compilar el kernel con éxito, inserté este kernel en el árbol de compilación de Android maguro, reconstruí la imagen del sistema Android y luego actualicé los nuevos archivos de recuperación, arranque, sistema y userdata.img en el teléfono ...
9exceptionThrower9
0

Puedes usar LiveBoot. Está en Google Play Store. Hará exactamente lo que está pidiendo.

Narcóticos
fuente
¿Qué pasa si tengo bootloop? ¿Hay alguna manera de hacerlo con un cable USB?
beppe9000