0 votes

La conversion d'images au format ext4 et retour crée un mauvais fichier flash

J'essaie de créer une ROM personnalisée Rockchip en récupérant une ROM personnalisée existante, en la déballant, en faisant de petites modifications, puis en la remballant.

Il y a un problème avec la conversion de la system.img du format sparse Android au format ext et inversement. Il n'y a pas d'erreur, mais lorsque je flashe le paquet résultant, l'appareil ne démarre pas.

Voici une expérience que j'ai faite :

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

Si je tape file system.img :

system.img : Image Android sparse, version : 1.0, Total de 1048576 blocs de sortie de 4096 octets dans 697 morceaux d'entrée.

Si je tape file converted-back.img :

converted-back.img : Image Android sparse, version : 1.0, Total de 1048576 blocs de sortie de 4096 octets dans 9674 morceaux d'entrée.

Devrais-je ajouter un paramètre à img2simg ou dois-je utiliser un autre outil pour créer le fichier d'images éparses ?

Pour confirmer que c'est bien la conversion d'images éparses qui pose problème et pas autre chose, j'ai réussi à faire ce qui suit :

  • Utilisé rkImageMaker pour décompresser l'image originale du firmware (qui produit un chargeur de démarrage et un nouveau fichier de paquetage avec l'en-tête 'RKAF')
  • Utilisé afptool pour décompresser ce fichier de paquetage vers un certain nombre de fichiers différents, notamment system.img
  • RIEN MODIFIÉ
  • Utilisé afptool pour reconditionner ces fichiers image dans un fichier RKAF
  • Utilisé rkImageMaker pour empaqueter le chargeur de démarrage et le fichier RKAF dans un fichier RKFW.

Ce fichier image RKFW nouvellement créé peut être flashé sur l'appareil, sans problème. C'est seulement quand j'ajoute simg2img y img2simg dans le mélange que les choses tournent mal.

Plus de détails :

0voto

Andrew Shepherd Points 101

Ne pas utiliser l'outil img2simg pour reconvertir l'image brute en une image éparse. (Même s'il semble logique de le faire).

L'outil que vous utilisez pour créer le fichier img du système sparse est le suivant make_ext4fs .

J'ai obtenu cet outil en construire l'ensemble de l'arbre des sources d'Android pour la version et l'architecture cible. (Ce qui a pris des jours à comprendre)

Voici comment j'ai finalement invoqué l'application make_ext4fs. (La compilation était dans le sous-dossier ~/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 

Voici ma compréhension sommaire des paramètres :

+-----------------------------+------------------------------------------+
|  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)                           |
+-----------------------------+------------------------------------------+ 

D'autres choses que j'ai découvertes :

  • Il existe un paquet Ubuntu Android-sdk-ext4-utils qui comprend make_ext4fs . Mais cela ne fonctionne pas ! Il a été construit sans le support d'Android. (Voir cette discussion )
  • Il existe un certain nombre de bifurcations du make_ext4fs sur github. (par exemple ici ). Ceux-ci sont liés à une version spécifique d'Android. Je ne sais pas si l'outil diffère beaucoup d'une version à l'autre. J'ai toujours eu besoin du file_contexts.bin donc ils ne m'ont pas été utiles.
  • J'ai ouvert le périphérique et j'ai vu que la carte mère avait une sortie DEBUG en série. Après avoir acheté l'adaptateur USB nécessaire, j'ai pu lire la sortie de débogage du chargeur de démarrage via PuTTY. C'était extrêmement utile.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X