Acceso root a estructura de ficheros SO Android 2.2 en Toshiba Folio 100
Requisitos
- Ubuntu 9.10. Testeado por otros usuarios en 10.04
- Android SDK y platform-tools concretamente la herramienta ADB (Android Debug Bridge)
- Un dispositivo Android, en mi caso una Tablet Toshiba Folio 100 con Android 2.2 con el SO cambiado (el test se realizó con el TNTModFolio de Dexter)
Definición Conceptual
Nuestro problema principal era que teníamos una web desarrollada en un servidor de test y para acceder a ella necesitábamos modificar el archivo <<hosts>> para añadir una directiva de nombres.
Lo primero que apreciamos en la Tablet de Toshiba fue que no podíamos acceder al market ni a las google apps ya que viene restringido de fábrica. Nos decantamos, así, por instalar un mod del SO desarrollado por Dexter. Estos mods tienen una eficacia y mejoras contrastadas y nos decidimos finalmente por el TNTMod.
El TNTMod te permite tener permisos root en tu dispositivo pero para modificar los archivos de sistema hay que ser un poco más creativo.
El único método que me ha dado resultado es el uso y configuración de ADB, una aplicación estilo putty para acceder mediante Shell o comando típicos como pull o push a los archivos de SO de un dispositivo Android. Mediante ADB es posible conectarse con un terminal a los archivos de sistema y comprobar la ruta del archivo hosts. También permite traértelo al pc local, modificarlo y después volverlo a meter en el sistema de archivos del dispositivo.
Procedimiento
Primero de todo hay que descargar e instalar android SDK (necesitarrás JAVA SDK):
- Descargar tar.gz para Linux
- Extraer en carpeta personal
- Acceder a
/home/carpeta_personal/android-sdk/tools/android
- Instalar todos paquetes disponibles
Ahora es momento de conectar la Toshiba Folio 100 al PC y hacer lo siguiente…
- Activar el USB DEBUG en Android (Ajustes -> Aplicaciones -> Desarrollo)
/home/carpeta_personal/android-sdk/platform-tool/adb devices
- Nos devolverá una salida de este tipo: ???????? No Permissions
Hay que configurar el driver para que reconozca la Tablet:
- Entrar en
/etc/udev/rules.d/
- Dentro de este directorio tiene que haber un fichero llamado
51-android.rules
o con otro número. - Editamos este fichero para añadir la siguiente línea:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bb4",ATTRS{idProduct}=="0c97", MODE="0666"
Como, seguramente, no sabremos el idVendor y el idProduct del dispositivo hacemos:
$ lsusb
Esto nos mostrará la información de los dispositivos usb conectados.
Seguidamente le damos permisos y reiniciamos el server de ADB:
$ sudo chmod a+r /etc/udev/rules.d/51-android.rules $ sudo ~/android-sdk/tools/adb kill-server $ sudo ~/android-sdk/tools/adb start-server * daemon not running. starting it now on port 5037 * * daemon started successfully * $ ~/android-sdk/tools/adb devices List of devices attached HT03JNX00008 device
Una vez tenemos el dispositivo vamos a acceder a él:
$ ~/android-sdk/tools/adb shell $ su # mount rootfs / rootfs ro 0 0 tmpfs /dev tmpfs rw,mode=755 0 0 devpts /dev/pts devpts rw,mode=600 0 0 proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0 /dev/block/mtdblock3 /system yaffs2 ro 0 0 /dev/block/mtdblock5 /data yaffs2 rw,nosuid,nodev 0 0 /dev/block/mtdblock4 /cache yaffs2 rw,nosuid,nodev 0 0 /dev/block/mmcblk0p1 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1000,fmask=0711,dmask=0700,codepage=cp437,iocharset=iso8859-1,utf8 0 0
Remontamos el FS como rw para poder escribir o hacer pushes:
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
YA TENEMOS ACCESO COMPLETO
Cosas a tener en cuenta
Si apagamos el dispositivo habrá que hacer otra vez la parte del mount ya que el dispositivo por defecto monta /system en ro. Si se desea dejar permanentemente en rw modificar reglas de mount.
En todo momento del proceso hay que activar el modo debug de USB en la distro de Android que utilicemos.