sábado, 15 de diciembre de 2012

Custom recovery en un Nexus S

Con mi Galaxy S3 rooteado y tras migrarle todos los datos de usuario, dispongo de un veterano Nexus S (GT-I9023) de casi dos años de antigüedad liberado para usarlo como conejillo de indias para mis experimentos que comparto aquí por si fueran de ayuda o interés. He empezado por algo tan simple como instalar un custom recovery para hacer después un nandroid backup.

Aviso antes de borrar los datos.

Primer paso: desbloqueo del bootloader

Es cierto que la serie Nexus de Google vienen "liberados" incluso si se adquieren a través de un operador. Pero esto "sólamente" significa que están SIM unlocked, es decir que pueden usar la red móvil de cualquier operador insertando la SIM correspondiente.

Sin embargo sí tienen inicialmente el bootloader bloqueado, es decir, sólo arrancará imagenes firmadas de stock, por lo que hay que desbloquearlo para conseguir arrancar con una imagen que no sea legítima, como por ejemplo la de un recovery custom.

Se puede inciar los Nexus en un modo especial, llamado fastboot, que emplea el protocolo del mismo nombre para la gestión remota y carga de imagenes en el dispositivo (analogo a Odin para los Samsung). La utilidad fastboot del SDK de Android usa este protocolo para además permitir de manera oficial el desbloqueo del bootloader.

Con el terminal conectado por USB al PC se debe ejecutar el comando fastboot oem unlock que desbloquea el bootloader y tiene el efecto colateral de borrar todas las particiones de datos del dispositivo. Tras esto el terminal quedará en el estado inicial de una instalación base de Android ("factory reset") y en el siguiente arranque se presentará la secuencia de personalización inicial de Android.

Instalación de ClockworkMod Recovery (CWM)

Existen dos recoveries custom populares CWM y TWRP. He elegido CWM por ser del que he encontrado más referencias y el método es en principio sencillo:
  1. Instalar en el PC el SDK de Android. Se usará la herramienta fastboot.exe  que se encuentra en el directorio Android SDK/platform-tools
  2. Apagar el teléfono e iniciar pulsando los botones Volume Up y Power simultáneamente  el terminal Nexus S mostrará el menú de arranque del modo fastboot.
  3. Comprobar que se detecta el terminal en modo fastboot usando el comando fastboot devices (podría fallar, en ese caso no continuar hasta resolver el problema, ver más adelante).
  4. Desbloquear (y borrar) el terminal con el comando fastboot oem unlock. Se avisará del borrado de los datos personales ("factory data reset").
  5. Descargar la imagen del recovery custom CWM al directorio Android SDK/platform-tools/ 
  6. Apagar el teléfono e iniciar en modo fastboot con Volume Up + Power.
  7. Conectar el dispositivo al puerto USB del PC
  8. Desbloqueo exitoso del bootloader.
  9. Desde el PC ejecutar: fastboot flash recovery <imagen recovery descargada>

En mi caso la imagen que he descargado de www.clockworkmod.com ha sido la recovery-clockwork-6.0.1.0-crespo.img.

He seguido los pasos y he encontrado dos dificultades:

Fastboot no se llega a detectar ningún dispositivo desde mi PC.

El problema aparece en el paso 4 y es debido a un fallo en los drivers USB de Google para Windows 7 64 bit. Existe una solución alternativa usando drivers no oficiales de un producto llamado PDAnet que casualmente funcionan para este proposito y que se deben instalar previamente a iniciar el Nexus S en modo fastboot. Para ello hay que seguir los siguientes pasos:
  1. Cuando se de la opción, reinstalar driver, e ignorar advertencia de firma del controlador. 
  2. Cuando solicite conectar el teléfono a un puerto USB, es necesario hacerlo con Android iniciado y modo depuración de USB. Esto es imprescindible para que el instalador complete con éxito.
  3. Cuando se de la opción, elegir no habilitar recepción SMS. Esta funcionalidad no es necesaria, sólo se necesita instalar el driver.
  4. Una vez completada la instalación desconectar el terminal del puerto USB y reiniciarlo en modo fastboot.
  5. Conectar el telefono al puerto USB. En el PC se inicializará el driver, en mi caso con esto fue suficiente. Se debería detectar el terminal con el comando fastboot devices.
  6. Si aun así no se reconoce, se puede intentar los siguiente (no lo he probado): 
    • En el administrador de dispositivos, buscar dispositivo Android 1.0, aparecerá con un warning (triangulo amarillo).
    • Actualizar el driver usando el que la instalación de PDAnet ha dejado en C:\Program Files (x86)\PdaNet for Android\
Si todo lo anterior falla siempre existe la opción de usar un Linux como base de operaciones.

Al reiniciar aparece el androide tumbado con un triangulo rojo encima. 

Tras un rato desaparece y arranca la versión de Android de stock. Ya no es posible arrancar de nuevo el recovery custom.

Parece ser que las instalaciones stock de Android en el Nexus S (p.ej las recibidas con las actualizaciones OTA, pero también la resultante del desbloqueo del bootleader) sobrescriben en su primer inicio la partición de recovery con una imagen de stock, y se pierde cualquier recovery custom que hubiera instalado. Esto ocurre durante el momento que se muestra el androide tumbado.

Para una instalación permanente de CWM (o de cualquier otro custom recovery) habría que modificar los archivos de la partición de sistema Android para inhabilitar el script /system/etc/install-recovery.sh responsable de sobreescribir la partición de recovery. Las ultimas versiones de CWM permiten, justo antes de invocar el reinicio del dispositivo ("reboot system now")  la opción "Yes - Disable recovery flash" que se encarga de deshabilitar este script. En mi caso usar esta opción dio éxito y en sucesivos reinicios se mantuvo el recovery CWM.

NANDroid backup

He utilizado CWM para hacer un nandroid backup usando la opción "backup/restore" y que deja imagenes de las particiones y blobs en una carpeta de Android llamada /sdcard/clockworkmod que posteriormente se puede copiar mediante transferencia USB convencional a un PC para ser recuperada en caso de necesidad.

CWM se podría usar para reinstalar Android usando este backup previo. Como se trata de una versión stock (debido al reseteo de fastboot oem unlock) también se podrían usar las imagenes oficiales de stock que suministra google para llegar al mismo punto.

Por el camino he encontrado...

Informes de problemas con la luminosidad pantalla en arranque fastboot que impiden interaccionar con el dispositivo. Este es un problema que aparece específicamente en modelos que no implementan la pantalla AMOLED original sino la LCD con la que se distribuyó en Europa el Nexus S, que es la que poseo. Al parecer es algo exclusivamente de la versión 4.0.3 de Android ICS. Yo no he observado ese problema ya que partía de una versión 4.1.2

Una explicación bastante completa de las particiones de un dispositivo Android y su contenido.

Un tutorial de desbloqueo de bootloader, instalacion de custom recovery (con CWM y  TWRP), rooteado y  instalación de custom ROMs para Nexus S con pantallazos de guía de cada paso.

Una recopilación de un conjunto interesante de Nexus S Hacks.



No hay comentarios:

Publicar un comentario