Comment extraire boot.img?

15

J'essaie de voir le contenu d'un boot.imgfichier à partir d'une image Android.

J'ai googlé et trouvé cet article à extraire system.img, mais cela ne fonctionne pas boot.img. Lorsque vous essayez de le faire pour boot.img, il affiche les éléments suivants:

Invalid sparse file format at header magi
Failed to read sparse file

Est simg2imgutilisé uniquement pour l'extraction system.img?

  1. Si oui, existe-t-il une autre méthode pour extraire boot.img?
  2. Sinon, quel est le problème pour ne pas extraire boot.img?
Dhasneem
la source
veuillez identifier la distribution linux spécifique et la version du noyau.
mdpc
Il y a une question similaire sur le site Android.SE: Comment décompresser et éditer boot.imgpour le portage ROM?
WhiteWinterWolf du

Réponses:

19

boot.img est un petit fichier (ish) qui contient deux parties principales.

          * kernel(important for android)
          * ramdisk( a core set of instruction & binaries)

Décompressez boot.img:

Il contient les étapes suivantes:

  1. Téléchargez l'outil en utilisant wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz

  2. Extrayez le fichier à l'aide de tar xvzf android_bootimg_tools.tar.gz.

    Il contient des twobinaires:

           * unpackbootimg
           * mkbootimg
    

3.Ensuite, exécutez ./unpackbootimg -i <filename.img> -o <output_path>

It will contain,

           * boot.img-zImage     ----> kernel
           * boot.img-ramdisk.gz ----> ramdisk

Nous pouvons également extraire le disque virtuel, en utilisant la commande suivante

gunzip -c boot.img-ramdisk.gz | cpio -i

Après avoir modifié les fichiers, nous pouvons à nouveau compresser ces fichiers sous boot.img en utilisant mkbootimg

S'amuser!

Dhasneem
la source
Je reçois une erreur à la troisième étape, veuillez m'aider ... le terminal indique que la commande unpackbootimg est introuvable
Rahul Matte
Obtenir la même erreur pour l'étape 3 sur Mint 17 ici. J'ai essayé de les faire fonctionner par sudo et après chmod 755 en vain.
Nisse
À l'étape 3, assurez-vous output_pathqu'il existe déjà, sinon unpackbootimgsegfault.
Aldaviva
2
Le lien vers l'outil est mort.
Addison Crump
Il suffit de cloner le code de github: github.com/osm0sis/mkbootimg
Albus Dumbledore
6

boot.imgn'est pas une image de système de fichiers compressée comme system.img. Il est lu par le chargeur de démarrage et contient un peu plus qu'une image de noyau et une image de disque virtuel.

Certaines distributions binaires expédient séparément les images du noyau et du disque virtuel. Dans ce cas , vous n'avez pas besoin de faire quoi que ce soit avec boot.img, juste régénérer une nouvelle avec mkbootimg.

Si vous avez besoin d'extraire des informations d'un boot.img, essayez split_bootimg(par William Enck , via le wiki Android ).

Gilles 'SO- arrête d'être méchant'
la source
Le lien vers split_bootimgn'est plus valide.
Nathan Osman
@NathanOsman Remplacé par un lien vers la copie sur la page de William Enck.
Gilles 'SO- arrête d'être méchant'
4

J'utilise opensuse. J'ai installé abootimg. Si vous voulez extraire (boot | recovery) .img lancez ceci:

abootimg -x (boot|recovery).img

Ensuite, vous obtenez les fichiers suivants: bootimg.cgf, zImage et initrd.img Si vous voulez emballer l'image que vous exécutez telle

abootimg --create (boot|recovery).img -f bootimg.cfg -k zImage -r initrd.img

Ensuite, vous obtiendrez (boot | recovery) .img

Prendre plaisir

user199575
la source
1

Vous pouvez utiliser l'outil suivant pour extraire et reconditionner l'image de démarrage Android

$ git clone https://github.com/cfig/Android_boot_image_editor.git

copiez votre boot.img dans le référentiel git cloné. Courir:

$ ./gradlew unpack

La première fois, vous devrez télécharger les bibliothèques nécessaires sur Internet, soyez patient. Vous pouvez obtenir le contenu dans "build / unzip_boot /", comme ceci:

build/unzip_boot/
├── bootimg.json (boot image info)
├── kernel
├── second (2nd bootloader, if exists)
├── boot.img.avb.json (AVB only)
└── root
cfig
la source
C'est la réponse, car ce code et ce projet sont à jour et maintenus.
Gabriel Fair