Dibujando el mundo
17dic/102

Modificar el system.img de android

El archivo system.img corresponde a la imagen de la carpeta /system de android tanto en el emulador como en los dispositivos físicos. Para modificar el contenido de estas imagenes necesitamos distintas herramientas, ya que se trata de un sistema de archivos específico para flash drives; yaffs2.

Desempaquetar

Necesitaremos unyaffs; un proyecto alojado en http://code.google.com/p/unyaffs/ que permite desempaquetar las imagenes. Podemos descargar el archivo binario o el codigo fuente para compilarlo por nuestra cuenta. En cualquier caso yo he depositado el archivo unyaff que resulta de compilar con el comando gcc -o unyaffs unyaffs.c en la carpeta /usr/bin de mi sistema para poder ejecutarlo desde cualquier carpeta.

Una vez tengamos el programa utilizarlo es tan sencillo como copiar la imagen a una carpeta vacía en la que trabajar (esto es recomendable ya que unyaff no acepta parametro de destino del desempaquetado) y desempaquetar dicha imagen:


#desempaquetamos la imagen en la carpeta actual
$unyaffs system.img
#podemos eliminar el archivo original
$rm system.img

Como comprovareis se habrá generado la lista de archivos y carpetas que normalmente colgarían de la carpeta /system en la carpeta en la que os encontrais.

Empaquetar

Para generar de nuevo una imagen en formato yaffs2 necesitaremos la utilidad mkyaffs2image. Podeis encontrarla en distintos lugares, pero la versión que yo estoy utilizando la he sacado de http://code.google.com/p/fatplus/downloads/ en donde encontrareis el código fuente y una archivo ya compilado. Como en el caso anterior, recomiendo depositar dicho archivo en la carpeta /usr/bin.

Generar la imagen es sencillo, en este caso el programa acepta como parametro el origen de los archivos a empaquetar y el destino de la imagen generada. en cualquier caso, es necesario que nos situemos en la carpeta a empaquetar ya que si indicamos la dirección hasta esta, corremos el riesgo de que los archivos empaquetados incluyan dentro de la imagen la ruta a partir del lugar des de el que empaquetamos. Por otro lado también es importante depositar la imagen generada en una ubicacion distinta para evitar que el empaquetado se coma a si mismo.

Ejemplo:


#empaquetamos los archivos de la carpeta actual dejando la imagen en la carpeta superior
$mkyaffs2image . ../system.img

Con esto ya tendremos una imagen funcionando que podemos mandar al dispositivo o arrancar con el emulador especificandolo como parametro:


$emulator -avd nombredeldispositivoemulado -system rutadelaimagen

Comentarios (2) Trackbacks (1)
  1. disculpa una pregunta, como compilaste el unyuffs en /usr/bin ?? gcc -o /usr/bin/unyuffs unyuffs.c ??

  2. ya pude, ahora al lanzar el comando para descomprimir me aparece “Violación de segmento (`core’ generado)”
    :S eso si nose que puede ser


Leave a comment

(required)