Páginas

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.



jueves, 6 de diciembre de 2012

Rooteando un Samsung Galaxy S III

Acabo de comprar un Galaxy S3. Después de mirar algunos precios me he decidido a comprar por amazon.es: Samsung Galaxy S III (I9300) - Smartphone libre Android (...) color azul [importado de Alemania] (aprox. 450€), aunque las ofertas de PC Componentes (aprox. 440€) para este telefono también son muy atractivas. Al ser importado de Alemania traería en principio personalizaciones para ese país pero al inicializarlo eligiendo idioma español no he detectado nada importante en ese idioma, salvo algunas apps destinadas a aquel mercado. He dado de de alta el terminal en Samsung (para realizar seguimiento en caso de perdida mediante el Samsung Dive). También he registrado mi cuenta de Dropbox para conseguir los 50GB gratis por dos años de promoción por la compra del telefono, aunque creo debería haber dado de alta una cuenta nueva ya que al registrar la cuenta gratuita que ya tenía,  me han upgradeado "sólo" de 2GB a 50GB, con lo que me han dado 48GB en vez de los 50GB prometidos...

Mi siguiente paso era rootearlo, pero soy novato (noob) y no me atraía la idea de briquear mi flamante telefono probando a ciegas métodos de dudosa fiabilidad sacados de un blog cualquiera así que he decidido entender un poco el proceso antes de nada. Como al final he visto que es necesario algo de dedicación para encontrar lo que hay disponible, elegir lo que uno quiere y decidir lo que es sensato hacer, publico aquí los pequeños apuntes y decisiones que he ido tomando y enlaces que he recopilado sobre el tema por si le pueden ser útiles a alguien más.

Aunque no existe una única referencia oficial sobre estos temas parece que http://forum.xda-developers.com es el foro más popular, dónde los desarrolladores que hacen las contribuciones más importantes las publican y dan soporte. Leyendo por allí uno encuentra los siguientes

Conceptos:


Rootear: es conseguir acceso al superusuario "root" del sistema Linux que subyace en Android, para tener acceso sin restricciones desde cualquier aplicación a los recursos del dispositivo. Rootear es distinto e independiente de instalar una ROM custom, que es básicamente, una reinstalación de Android pero personalizada, con características distintas a la que viene de fábrica (o de "stock"). En mi caso no tengo interés de momento en instalar o upgradear el sistema de stock, sólamente quiero rootear con el propósito de poder hacer un backup completo del dispositivo usando Titanium Backup y no tener restricciones para usar algunas otras utilidades adicionales.

El rooteo se consigue introduciendo el binario "su" (analogo al de Unix) con los permisos de ejecución adecuados en el sistema de archivos de Android. Este binario se invocará desde otras aplicaciones que necesiten escalar sus privilegios. Esta instalación normalmente se acompaña de otras apps (SuperUser or SuperSU) para que el usuario del telefono pueda controlar qué aplicaciones tienen acceso legítimo a esta escalada de privilegio y dejar trazas de su uso.

Para conseguir esta modificación hay que explotar previamente varios componentes del sistema dispositivo-Android:

Recovery: Un sistema de recovery es una instalación auxiliar paralela a la principal de Android que permite realizar operaciones de mantenimiento "offline" como backups completos, la actualización de la instalación principal o su sustitución (flashear una ROM) . De fabrica el dispositivo ya viene con una instalación de recovery (stock), en una partición separada.

Bootloader: En el inicio del dispositivo se ejecuta el bootloader, que determina desde qué partición se arranca. El bootloader es específico de cada terminal y es un programa que el fabricante graba en una memoria no volatil del dispositivo. Aunque por defecto el bootloader arrancará la instalación principal (Android) se puede cambiar usando una combinación de teclas (Vol Down+Home+Power) para arrancar el recovery que haya instalado.

Bloqueo: Si el bootloader está bloqueado, como suele pasar con los terminales ligados a operadores, llevará en su interior cableada una firma que le permite identificar si la partición seleccionada para arrancar (se la de Android o la de recovery) es legítima. Esto implica que para poder arrancar con una instalación alternativa (ROM ó recovery) es imprescindible disponer de un bootloader desbloqueado (unlocked). Si el terminal no es libre hay que realizar antes el desbloqueo, que es un proceso dependiente del terminal y del operador.

Por lo tanto el rooteo puede consistir esencialmente en arrancar el sistema auxiliar o recovery custom desde el cual se modifica el sistema de archivos del sistema base y se inserta el binario su con los permisos adecuados, así como apps auxiliares. Para que esta secuencia sea posible es prerequisito que el bootloader esté desbloqueado para que permita arrancar con un recovery que no sea el original.

Además de lo anterior, la imagen del custom recovery se debe transferir a la memoria del dispositivo con una herramienta que pueda situarla de modo que el bootloader la encuentre. Para la carga del custom recovery en  los dispositivos Samsung hay quién recomienda Odin ya que parece que es la que emplea el fabricante y que se ha filtrado a los foros. Por este motivo es propietaria, no está distribuida oficialmente y su codigo y funcionamiento no es conocido ni verificado, por lo que otros recomiendan Heimdall que sí es un proyecto open source.

Existe una versión en app de Odin llamada Mobile Odin que hace lo mismo pero desde dentro del sistema Android, para que funcione necesita permisos de root, por lo que esta versión no se puede usar sin haber rooteado previamente. Esta app va orientada al flasheo de ROMs

El procedimiento de rooteo, es específico de aquel dispositivo dónde es posible. Para mi terminal (GT-I9300, banda base I9300XXDLID) he encontrado esta lista de metodos de la cual he seleccionado la que se aplica a la versión internacional y que ha sido desarrollado por un tal chainfire, de la que hay dos variantes:

Chainfire CF-root: chainfire dio soporte durante un tiempo a este sistema rápido de rooteo llamado CF-root que automatizaba cuatro tareas:
  • Instalar app gestión acceso root: SuperSU
  • Instalar custom recovery: ClockWorkMod
  • Instalar app gestión recovery: CWM Manager
  • Rooteado del dispositivo propiamente dicho
este desarrollador abandonó el metodo CF-root en favor de CF-Auto-root y ya no da soporte al software que lo realizaba, aunque las versiones publicadas siguen siendo validas para realizar rooteos de los terminales ya probados.

La ventaja de este metodo es que deja instalado el recovery CWM que es mucho más versátil que el de stock y permite ejecutar otras instalaciones y realizar una imagen de backup de la instalación de Android (nandroid backup), imprescindible para aquel que quiera jugar con seguridad con el flasheo de ROMs.

Chainfire CF-Auto-Root: Ahora chainfire da soporte únicamente a CF-Auto-Root  (página oficial del autor) que es esencialmente lo mismo pero sin la instalación del CWM recovery ya que emplea el recovery stock del dispositivo, lo que parece que evita ciertos problemas con OTA y con algunos mecanismos de seguridad en los dispositivos más modernos, como el conteo de grabaciones de la flash de recovery.

Esto parece que lo consigue haciendo un backup del recovery stok antes de cargar un recovery temporal. Tras rootear la instalacion de Android se recupera el recovery original. Suponiendo que el bootloader ya estaba desbloqueado, el único "rastro" que podría quedar es que aumente un contador que indica el numero de veces que se ha grabado la flash de recovery y que puede hacer que en el arranque el terminal muestre un simbolo de advertencia parecido a un triangulo amarillo indicando que ha sido modificado. Este contador se podría inicializar una vez rooteado el terminal usando la aplicación (de pago) triangle away, también de chainfire, con algunos riesgos de briqueo si no se hace cuidadosamente.

Rooteando:


Finalmente he usado el CF-Auto-Root para el GT-I9300, siguiendo los pasos muy bien indicados por chainfire:
  1. Descargar y descomprimir Odin3-v1.85.zip, aunque tambien viene incluida en el archivo de autoroot del GT-I9300 
  2. Descargar el archivo de CF-Auto-Root para el GT-I9300: CF-Auto-Root-m0-m0xx-gti9300.zip
  3. Descomprimir el CF-Autor-Root para obtener el archivo CF-Auto-Root-m0-m0xx-gti9300.tar.md5 (no hay que descomprimir ese de nuevo).
  4. Desconectar el cable USB del telefono al PC. Asegurarse que KIES (la aplicación de Samsung de gestión del telefono desde el PC) está parada
  5. Iniciar Odin3
  6. Pulsar en el botón  "PDA" y seleccionar CF-Auto-Root-m0-m0xx-gti9300.tar.md5
  7. Poner el terminal en modo de descarga (apagar, después mantener "Bajar volumen"+"Boton home"+"Power" pulsados simultaneamente, si pide pulsar un boton para continuar presionarlo)
  8. Conectar con el cable USB el terminal al PC
  9. Asegurarse que la opción "Repartition" NO está seleccionada
  10. Pulsar el botón "Start"
  11. Esperar a que inicie Android
y en efecto, según dice el autor, no se tarda ni un minuto en completar los pasos si todo va bien. Tras el rooteado aparece instalada la app SuperSu que se invocará cada vez que alguna aplicación intente acceder a root. He descargado el Root Checker Free y, tras autorizar su ejecución, he comprobado que el rooteo parece exitoso:

 

Aunque en teoría CF-Auto-Root está diseñado para modificar lo mínimamente posible el dispositivo, hay que tener en cuenta que cualquier rooteo del dispositivo normalmente invalida la garantía. Conviene estar preparado para revertir el proceso en caso del que sea necesario acudir al fabricante por un fallo del hardware. Para ello hay que conservar un firmware de stock para flashearlo y revertir el recovery a su estado original.

Una página que según parece descarga los firmware de stock desde Samsung es sammobile (tambien conocidos por samfirmware). En este formulario se puede buscar el firmware concreto a partir de tres parametros que se pueden conseguir marcando en el telefono el codigo *#1234# , que a mi me devolvió:

AP: I9300XXDLIH
CP: I9300XXDLID
CSC: I9300DBTDLI2

o bien obtenerlos desde Kies que me informó que tengo:

PDA:LIH
PHONE:LID
CSC:LI2 (DBT)

Y la ficha del firmware correspondiente en sammobile informa que:

GT-I9300 - Germany
PDA: I9300XXDLIH
CSC: I9300DBTDLI2
Version: 4.1.1
Date: 2012-10-03
Regions: Austria, Belgium, France, Germany, Hungary, Italy, Spain, United Kingdom

y permite descargar la imagen zipeada, si estamos registrados en la pagina.

Actualmente tengo la versión 4.1.1 de Android y ya empieza a difundirse en algunos paises la 4.1.2 via OTA. Ya he podido comprobar que no se actualizará automáticamente tras el rooteo, tal como se comenta en los foros. Aunque se resetee el contador de flasheos la firma de la instalación de Android se modifica y no se permite la instalación OTA apareciendo un mensaje que dice "Su dispositivo ha sido modificado. Las actualizaciones no estan disponibles".

Estimo que tengo tres alternativas para las actualizaciones, las tres implican realizar de nuevo el rooteo, ya que se flashea una imagen stock:
  1. Revertir a una imagen stock disponible (no actualización) y permitier la actualización via OTA.
  2. Esperara a que la actualización esté disponible por Kies e intentar la actualización, aunque podría fallar como por OTA.
  3. Descargar la imagen cuando esté disponible en sammobile y grabarla con Odin, esto en principio siempre es posible.
Pero esto ya es otra historia... Más información en próximos episodios de mis aventuras con mi Galaxy S3 y Android ;)


Enlaces


Sobre el Samsung Galaxy S3 y de caracter general: