Wie extrahiere ich boot.img?

Ich versuche, den Inhalt einer boot.img -Datei von einem Android-Image aus anzuzeigen.

Ich habe gegoogelt und diesen Artikel gefunden, um system.img zu extrahieren, aber es funktioniert nicht für boot.img. Wenn Sie versuchen, dies für boot.img zu tun, wird Folgendes angezeigt:

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

Wird simg2img nur zum Extrahieren von system.img verwendet?

  1. Wenn ja, gibt es eine andere Methode zum Extrahieren von boot.img?
  2. Wenn nicht, was ist das Problem, wenn boot.img nicht extrahiert wird?

Kommentare

Antwort

boot.img ist eine kleine (ish) Datei, die zwei Hauptteile enthält.

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

Entpacken Sie boot.img:

Es enthält die folgenden Schritte:

  1. Laden Sie das Tool mit wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz

  2. Extrahieren Sie die Datei mit tar xvzf android_bootimg_tools.tar.gz.

    Sie enthält two Binärdateien:

     * unpackbootimg * mkbootimg 

3. Führen Sie dann ./unpackbootimg -i <filename.img> -o <output_path>

It will contain, * boot.img-zImage ----> kernel * boot.img-ramdisk.gz ----> ramdisk 

aus

Wir können Ramdisk auch mit dem folgenden Befehl extrahieren.

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

Nach dem Ändern der Dateien können wir diese Dateien mit mkbootimg

Viel Spaß!

Kommentare

  • Beim dritten Schritt wird ein Fehler angezeigt Bitte helfen Sie mir … das Terminal sagt, dass der Befehl zum Entpacken nicht gefunden wurde.
  • Hier wird der gleiche Fehler für Schritt 3 auf Mint 17 angezeigt. Es wurde versucht, sie von sudo und nach chmod 755 ohne Erfolg auszuführen.
  • Stellen Sie in Schritt 3 sicher, dass output_path bereits vorhanden ist, andernfalls unpackbootimg wird segfault.
  • Der Link für das Tool ist tot.
  • Fix für: " Befehl unpackbootimg nicht gefunden ", Sie führen 32-Bit-Binärdateien auf einem 64-Bit-Computer ohne 32-Bit-Abhängigkeiten aus. Installieren Sie sie mit " apt-get install gcc-multilib "

Antwort

boot.img ist kein komprimiertes Dateisystem-Image wie system.img. Es wird vom Bootloader gelesen und enthält kaum mehr als ein Kernel-Image und ein Ramdisk-Image.

Einige Binärdistributionen liefern die Kernel- und Ramdisk-Images separat. In diesem Fall müssen Sie mit boot.img nichts tun. Generieren Sie einfach eine neue mit mkbootimg.

Wenn Sie Informationen aus einem boot.img extrahieren müssen, versuchen Sie es mit split_bootimg (von William Enck über das Android-Wiki ).

Kommentare

  • Der Link zu split_bootimg ist nicht mehr gültig.
  • @NathanOsman Ersetzt durch einen Link zur Kopie auf der Seite von William Enck '.

Antwort

Ich verwende opensuse. Ich habe abootimg installiert. Wenn Sie (boot | recovery) .img extrahieren möchten, führen Sie Folgendes aus:

abootimg -x (boot|recovery).img 

Dann erhalten Sie die nächsten Dateien : bootimg.cgf, zImage und initrd.img Wenn Sie ein Image packen möchten, führen Sie Folgendes aus:

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

Dann erhalten Sie (boot | recovery) .img

Viel Spaß

Antwort

Mit dem folgenden Tool können Sie das Android-Boot-Image extrahieren und neu packen.

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

Kopieren Sie Ihre boot.img in das geklontes Git-Repository. Ausführen:

$ ./gradlew unpack 

Beim ersten Ausführen müssen die erforderlichen Bibliotheken aus dem Internet heruntergeladen werden. Seien Sie geduldig. Sie können den Inhalt unter „build / unzip_boot /“ wie folgt abrufen:

build/unzip_boot/ ├── bootimg.json (boot image info) ├── kernel ├── second (2nd bootloader, if exists) ├── boot.img.avb.json (AVB only) └── root 

Kommentare

  • Dies ist die Antwort, da dieser Code und dieses Projekt aktuell sind und gepflegt werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.