0 votos

La conversión de imágenes a formato ext4 y viceversa crea un archivo flash defectuoso

Estoy intentando crear una ROM personalizada Rockchip consiguiendo una ROM personalizada existente, desempaquetándola, haciendo pequeñas modificaciones, y luego empaquetándola de nuevo.

Hay un problema con la conversión de la system.img archivo de formato escaso de Android a extformat y viceversa. No hay errores, pero cuando flasheo el paquete resultante, el dispositivo no se inicia.

Este es un experimento que he hecho:

simg2img system.img system-raw.img
img2simg system-raw.img converted-back.img

Si escribo file system.img :

system.img: Imagen dispersa de Android, versión: 1.0, Total de 1048576 bloques de salida de 4096 bytes en 697 trozos de entrada.

Si escribo file converted-back.img :

convertido-back.img: Imagen dispersa de Android, versión: 1.0, Total de 1048576 bloques de salida de 4096 bytes en 9674 trozos de entrada.

¿Debería añadir algún parámetro a img2simg ¿O debería utilizar una herramienta diferente para crear el archivo de imagen dispersa?

Para confirmar que el problema es la conversión de imágenes dispersas y no otra cosa, he hecho con éxito lo siguiente:

  • Usado rkImageMaker para desempaquetar la imagen de firmware original (que produce un cargador de arranque y un nuevo archivo de paquete con la cabecera 'RKAF')
  • Usado afptool para desempaquetar este archivo de paquete a un número de archivos diferentes, incluyendo system.img
  • NO SE HA MODIFICADO NADA
  • Usado afptool para volver a empaquetar estos archivos de imagen en un archivo RKAF
  • Usado rkImageMaker para empaquetar el cargador de arranque y el archivo RKAF en un archivo RKFW.

Este archivo de imagen RKFW recién creado puede ser flasheado en el dispositivo, sin problemas. Sólo cuando añado simg2img y img2simg en la mezcla que las cosas van mal.

Más detalles:

0voto

tapted Puntos 66

No utilice la herramienta img2simg para volver a convertir la imagen en bruto en una imagen dispersa. (Aunque parezca lógico hacerlo).

La herramienta que se utiliza para crear el archivo img del sistema disperso es make_ext4fs .

Conseguí esta herramienta por construir todo el árbol de fuentes de Android para la versión y la arquitectura de destino. (Lo que me llevó días averiguar)

Así es como finalmente invoqué la aplicación make_ext4fs (La construcción estaba en la subcarpeta ~/aosp_build).

sudo mkdir /mnt/system
sudo mount -O pipe system-raw.img /mnt/system
sudo ~/aosp_build/out/host-linux-x86/bin/make_ext4fs -s -l 4096M -a system -S ~/aosp_build/out/target/product/generic_arm64/root/file_contexts.bin ./converted-back.img /mnt/system 

Aquí está mi comprensión incompleta de los parámetros:

+-----------------------------+------------------------------------------+
|  Parameter                  |  Meaning                                 |
+=============================+==========================================+
| -s                          | Output to be in sparse image format      |
+-----------------------------+------------------------------------------+
| -l 4096M                    | Target size of the output image          |
|                             | (I wanted it to be the same size as      |
|                             | the source image, to avoid packaging     |
|                             | complications)                           |
+-----------------------------+------------------------------------------+
| -a system                   | Something about setting an android mount |
|                             | point.                                   |
+-----------------------------+------------------------------------------+
| -S <path>/file_contexts.bin | Something to do with permissions         |
+-----------------------------+------------------------------------------+
| ./converted-back.img        | The output image name                    |
+-----------------------------+------------------------------------------+
| /mnt/system                 | The source folder (generated by mounting |
|                             | the raw image)                           |
+-----------------------------+------------------------------------------+ 

Otras cosas que descubrí:

  • Hay un paquete de Ubuntu Android-sdk-ext4-utils que incluye make_ext4fs . Pero esto no funciona. Se construyó sin soporte para Android. (Ver esta discusión )
  • Hay una serie de bifurcaciones del make_ext4fs paquetes en github. (por ejemplo aquí ). Estos están vinculados a una versión específica de Android. No sé si la herramienta difiere mucho de una versión a otra. Todavía necesitaba el file_contexts.bin por lo que no me han servido de nada.
  • Abrí el dispositivo y vi que la placa base tenía una salida DEBUG de serie. Después de comprar el adaptador USB necesario pude leer la salida de depuración del bootloader a través de PuTTY. Esto fue extremadamente útil.

Si estás leyendo esto, buena suerte. Este es un gran viaje en el que estás.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X