1 votes

Bizarreries Lecture de boot.img - Beaucoup trop gros et erreurs dans le noyau

Ceci est lié à cette question mais comme j'ai fait des progrès depuis et que je me suis heurté à des problèmes assez différents qui m'obligeraient à la réécrire pour en faire une question totalement différente, j'ai décidé de poser une nouvelle question. Comme dans cette question, quelques informations sur les appareils :

  • C'est une BLU ADVANCE 4.0
  • La carte est Mediatek MT6572
  • La version d'Android est 4.2.2
  • La version du noyau est 3.4.5.
  • J'ai un accès Root

J'ai essayé de faire une sauvegarde de certaines partitions de mon téléphone (boot.img, system.img, recovery.img) mais j'ai rencontré quelques problèmes.

J'ai trouvé des sauvegardes en ligne pour ce modèle, pris des sauvegardes avec MTK Droid Root and Tools et essayé de lire directement à partir de /dev/bootimg et /dev/recovery. J'ai rencontré plusieurs problèmes différents. Il y en a trois principaux et je les inclus tous ici car je pense qu'ils sont liés. Je vais commencer par celui qui est cohérent dans tous ces cas :

Numéro 1

La partie noyau de mon boot.img semble être beaucoup trop petite (environ 18.0KiB - ce n'est pas correct, n'est-ce pas ?) et se termine par une série de messages d'erreur avant le GZIP 1F8B qui, je pense, marque le début du ramdisk. Voici les messages :

System halted.
Attempting division by 0!...
Uncompressing Linux.....
decompressor returned an error.. 
done, booting the kernel...
invalid distance too far back...
invalid distance code...
invalid literal/length code.
incorrect header check..
unknown compression method..
invalid window size.invalid block type..
invalid stored block lengths....
too many length or distance symbols.
invalid code lengths set....
invalid bit length repeat...
invalid literal/lengths set.
invalid distances set...
incorrect data check....
Out of memory while allocating output buffer....
Out of memory while allocating input buffer.
Out of memory while allocating z_stream.
Out of memory while allocating workspace....
Not a gzip file.
header error....
read error..
uncompression error........

Les retours à la ligne sont de moi, j'ai essayé de le formater du mieux que je pouvais. Je ne comprends pas très bien ce qui se passe ici, car je ne fais que lire l'image - il ne devrait pas y avoir de messages d'erreur. Est-ce que je vois juste des listes d'erreurs possibles dans le noyau ?


Numéro 2

Je ne peux pas extraire le contenu du ramdisk dans les noyaux de taille correcte (je veux vérifier que les sauvegardes ont fonctionné correctement) comme dans ce guide sur le déballage des images de démarrage Quand je lance cette commande :

gunzip -c ../your-ramdisk-file | cpio -i

Je reçois les messages suivants (tout un tas comme le premier et finissant par les deux derniers) :

cpio: Malformed number (K
gzip: ../ramdisk.gz: decompression OK, trailing garbage ignored
cpio: premature end of file

et aucun nouveau fichier n'est produit. Notez que je peux dézipper le fichier en omettant le bit cpio et en redirigeant la sortie et cela produira un fichier contenant du texte reconnaissable dans un éditeur hexagonal, donc je suppose que l'extraction a réussi.


Numéro 3

Le boot.img lu depuis /dev/bootimg, bien qu'il semble être valide au départ, est beaucoup, beaucoup trop gros - je l'ai arrêté à 3.0GiB+. Pour référence, celui que j'ai trouvé en ligne et celui que j'ai généré avec MTK Droid Tools and Root font 6.0MiB. En le tronquant à 500MiB, j'ai pu trouver la même structure de noyau que dans les autres, bien que je ne sois pas sûr de la fin du ramdisk et que je ne puisse pas le vérifier de manière fiable.

Je suppose que ma question est essentiellement : qu'est-ce qui ne va pas avec mon boot.img ? Est-il valide (malgré les erreurs et l'impossibilité d'extraire le ramdisk) et sûr à utiliser comme sauvegarde ?

0voto

John McDonnell Points 612

Il s'avère que la plupart des problèmes semblent provenir du fait que j'ai essayé de séparer les images de démarrage et de récupération au mauvais endroit. J'essayais d'extraire le noyau et le disque virtuel au 1F8B pour gzip (le noyau avant, le disque virtuel après), mais il y avait plusieurs instances de 1F8B (spécifiquement 1F8B 0800) dans le code hexadécimal et la première était no le bon.

Après avoir divisé l'image au bon endroit, j'ai obtenu un noyau de taille plus réaliste et un disque RAM qui a été extrait avec succès.

J'ai également pu obtenir boot.img et recovery.img via adb à partir de /dev/bootimg et /dev/recovery en limitant explicitement la taille comme indiqué dans le tableau suivant Commentaire de aureljared sur la question concernant mon problème initial :

dd if=/dev/bootimg of=/where/to/store/it bs=6291456 count=1

Bien que les images contiennent toujours les messages d'erreur, je pense qu'ils sont probablement censés être là car je les ai trouvés dans d'autres bonnes images connues en ligne.

Notez que je n'ai pas vraiment testé la validité des images car ce ne sont que des sauvegardes et la seule façon de les tester est de les flasher, ce qui pourrait faire exploser mon téléphone si elles sont mauvaises. Je suis assez confiant que ce problème est résolu puisque je peux extraire le ramdisk, cependant.

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