Ver Mensaje Individual
  #2  
Viejo 30/04/12, 01:05:48
Array

[xs_avatar]
Naproxeno Naproxeno no está en línea
Miembro del foro
 
Fecha de registro: jul 2010
Mensajes: 48
Modelo de smartphone: Samsung Galaxy S I9000
Tu operador: Vodafone
Sea cual sea la alternativa que hayamos elegido, ya tenemos un fichero boot.img listo para meterle mano. Pero, ¿no había una forma más sencilla de llegar a él?

La respuesta es sí, y además implica que nuestra tableta es prácticamente inmune al brickeo. Presentamos...

El modo "flasheo"

Nombre completamente no oficial.

Como sugiere BQ en sus instrucciones para hacer un hard reset, existe un modo especial, controlado por hardware, en el que la tableta responde a 3 órdenes simples: leer un bloque de la memoria interna, escribir un bloque de la memoria interna y reiniciar. Como hemos dicho, este modo está controlado por hardware, de forma que, aunque cometido los abusos más pérfidos con su memoria interna, siempre que tengamos una imagen de restauración a mano, podremos volver a dejarla como salida de fábrica (para los usuarios de smartphones de Samsung: esto es muy parecido al modo "download" y Odin).

Para activar este modo, hay que conectar el cable USB al ordenador, con la tableta apagada, mientras pulsamos la tecla de bajar volumen. Si todo va bien... no veremos nada, ya que la pantalla permanecerá apagada. Pero, si ejecutamos:

Código:
lsusb
Debería aparecer algo así:

Código:
Bus 002 Device 004: ID 2207:290a
Si vemos esto, la tableta ya está preparada para recibir órdenes. Para dárselas, usaremos las herramientas de João Pinto, basadas en rkflashtool. Con ellas, extraer la partición boot es tan sencillo como ejecutar:

Código:
img-manager.py dump boot
Cuando concluya, tendremos un fichero boot.img sacado directamente de la memoria interna de la Pascal 2. Con él, ya estamos listos para...


Desempaquetar boot.img

Ya tenemos el fichero boot.img, ahora vamos a ver qué contiene. Como se mencionó anteriormente, la partición boot, en su formato moderno, contiene tanto el kernel como el ramdisk, así que primero tendremos que separarlos. Para ello, ejecutamos:

Código:
split_bootimg.pl boot.img
Lo que creará dos ficheros: boot.img-kernel y boot.img-ramdisk.gz. Guardad el primero, porque nos hará falta más adelante pero, por el momento, usaremos el segundo para...


Modificar el ramdisk

El ramdisk no es más que un fichero comprimido de cierta forma. Podemos descomprimirlo ejecutando:

Código:
mkdir ramdisk
cd  ramdisk
gunzip -c ../boot.img-ramdisk.gz | sudo cpio -i
Con esto, encontraremos en el directorio "ramdisk" los ficheros que lo componen. Para cambiar el logo de arranque, tendremos que manipular el fichero "initlogo.rle".

Para crear nuestro propio logo, tenemos dos opciones: basarnos en el logo original o hacer el nuestro desde cero. Para esta última opción, tan solo necesitaremos crear un fichero PNG de 800x480 píxeles.

Una vez tengamos un logo preparado (initlogo.png), tendremos que convertirlo a un formato adecuado. Para ello, usaremos las herramientas convert, de ImageMagick, y to565, de esta forma:

Código:
convert -depth 8 initlogo.png rgb:initlogo.raw
to565 -rle < initlogo.raw > initlogo.rle
Tras esto, podemos borrar (o al menos, sería conveniente mover a otro directorio) los ficheros intermedios initlogo.png e initlogo.raw.

Ya estamos listos para generar un nuevo ramdisk. Para ello, ejecutamos, en el directorio "ramdisk":

Código:
find . ! -name "." | sort | cpio -oa -H newc | gzip -n > ../newinitrd.gz
Que, a pesar de parecer un poco intimidatorio, lo único que hace es comprimir los ficheros en un orden y formato específicos. Si todo ha salido bien, en el directorio padre encontraremos "newinitrd.gz", nuestro ramdisk listo para el último paso...


Empaquetar y grabar boot y kernel

Como se comentó anteriormente, no se conocen todos los detalles de como generar una partición boot con el nuevo formato que sea admitida por nuestra tableta. Por fortuna, sí que podemos grabar el ramdisk y el kernel por separado, siguiendo el formato antiguo. Para ello, usaremos la imagen del kernel que obtuvimos anteriormente (boot.img-kernel) y nuestro nuevo ramdisk.

En primer lugar, tenemos que añadir un CRC a ambas imágenes. Para ello, ejecutamos:

Código:
rkcrc -k boot.img-kernel kernel.img
rkcrc -k newinitrd.gz boot-new.img
Y ya estamos listos para grabarlas en la tableta. ¡Ojo! En este paso vamos a escribir en la memoria interna de la Pascal 2 y debería ser seguro pero no me hago responsable de cualquier imprevisto. Como comenté antes, la Pascal 2 es prácticamente imposible de brickear y con lo que vamos a hacer ni siquiera vamos a perder nada que hayamos instalado pero seguro que alguien se empeña en llevarme la contraria.

Dicho esto, vamos al lío. Simplemente hay que ejecutar:
no
Código:
img-manager.py write kernel kernel.img
img-manager.py write boot boot-new.img
Y como colofón, reiniciamos la tableta con:

Código:
rkflashtool b
Cruzamos los dedos y... ¡Listo! Deberíais poder ver vuestro flamante nuevo logo.

Como se ve en el vídeo, en el proceso de arranque hay 3 pasos y este sustituye el logo del paso 2. El logo del paso 1 no se sabe muy bien si está en el cargador de arranque (bootloader) o en el kernel, así que habrá que investigar. El logo del paso 3 es estándar de Android y admite animaciones. Seguro que encontráis mucha información por ahí acerca de como personalizarlo.

Espero que os haya gustado este tutorial y que hayáis aprendido algo acerca de como se puede modificar la Pascal 2. Como he dicho, siempre que tengáis a mano una imagen de restauración no hay nada que temer, así que espero que le hayáis perdido un poco el miedo al cacharreo. Estoy deseando ver qué se os ocurre hacer con todo esto. ¡Suerte!

Última edición por Naproxeno Día 02/05/12 a las 20:23:14. Razón: Tutorial Extraer imagen de restauración y modificar logo de arranque (parte 2)
Responder Con Cita
Los siguientes 10 usuarios han agradecido a Naproxeno su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]