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?
- Wenn ja, gibt es eine andere Methode zum Extrahieren von
boot.img
? - Wenn nicht, was ist das Problem, wenn
boot.img
nicht extrahiert wird?
Kommentare
- Bitte geben Sie die spezifische Linux-Distribution und die Kernel-Version an.
- Auf der Android.SE-Website gibt es eine ähnliche Frage : Wie entpacke und bearbeite ich
boot.img
für die ROM-Portierung?
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:
-
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
-
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, andernfallsunpackbootimg
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.