Jak wyodrębnić boot.img?

15

Próbuję zobaczyć zawartość boot.imgpliku z obrazu Androida.

Poszukałem google i znalazłem ten artykuł do wyodrębnienia system.img, ale nie działa boot.img. Próbując to zrobić boot.img, wyświetla następujące informacje:

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

Czy simg2imgsłuży tylko do ekstrakcji system.img?

  1. Jeśli tak, to czy jest jakaś inna metoda do wyodrębnienia boot.img?
  2. Jeśli nie, to na czym polega problem z brakiem wyodrębniania boot.img?
Dhasneem
źródło
proszę określić konkretną dystrybucję Linuksa i wersję jądra.
mdpc
Podobne pytanie znajduje się na stronie Android.SE: Jak rozpakować i edytować boot.imgportowanie ROM?
WhiteWinterWolf

Odpowiedzi:

19

boot.img to mały (ish) plik zawierający dwie główne części.

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

Rozpakuj boot.img:

Zawiera następujące kroki:

  1. Pobierz narzędzie za pomocą wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz

  2. Wyodrębnij plik za pomocą tar xvzf android_bootimg_tools.tar.gz.

    Zawiera twopliki binarne:

           * unpackbootimg
           * mkbootimg
    

3. Następnie wykonaj ./unpackbootimg -i <filename.img> -o <output_path>

It will contain,

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

Możemy również wyodrębnić ramdysk, używając następującego polecenia

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

Po zmianie plików możemy ponownie spakować te pliki jako boot.img przy użyciu mkbootimg

Baw się dobrze!

Dhasneem
źródło
1
Dostaję błąd przy trzecim kroku, pomóżcie mi ... terminal mówi, że nie znaleziono polecenia unpackbootimg
Rahul Matte
1
Uzyskiwanie tego samego błędu dla kroku 3 na mennicy 17 tutaj. Próbowałem uruchomić je przez sudo i po chmod 755 bezskutecznie.
Nisse
W kroku 3 upewnij się, że output_pathjuż istnieje, w przeciwnym razie unpackbootimgsegfault.
Aldaviva
2
Link do narzędzia jest martwy.
Addison Crump,
1
Poprawka dla: „Nie znaleziono polecenia unpackbootimg”, uruchamiasz 32-bitowy plik binarny na 64-bitowej maszynie bez 32-bitowych zależności. Zainstaluj je za pomocą „apt-get install gcc-multilib”
WHol
6

boot.imgnie jest skompresowanym obrazem systemu plików jak system.img. Jest odczytywany przez bootloader i zawiera niewiele więcej niż obraz jądra i obraz ramdysku.

Niektóre dystrybucje binarne wysyłają osobno obrazy jądra i ramdysku. W takim przypadku nie musisz nic robić boot.img, po prostu zregeneruj nowy za pomocą mkbootimg.

Jeśli chcesz wyodrębnić informacje z boot.img, spróbuj split_bootimg(autor: William Enck , za pośrednictwem wiki Androida ).

Gilles „SO- przestań być zły”
źródło
Link do split_bootimgnie jest już ważny.
Nathan Osman,
@NathanOsman Zastąpiony linkiem do kopii na stronie Williama Encka.
Gilles „SO - przestań być zły”,
4

Używam opensuse. Zainstalowałem abootimg. Jeśli chcesz wyodrębnić (boot | recovery) .img uruchom takie:

abootimg -x (boot|recovery).img

Następnie otrzymujesz kolejne pliki: bootimg.cgf, zImage i initrd.img Jeśli chcesz spakować obraz, uruchom taki

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

Wtedy otrzymasz (boot | recovery) .img

Cieszyć się

użytkownik199575
źródło
1

Możesz użyć następującego narzędzia, aby wyodrębnić i ponownie spakować obraz rozruchowy Androida

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

skopiuj plik boot.img do sklonowanego repozytorium git. Biegać:

$ ./gradlew unpack

Podczas pierwszego uruchomienia konieczne będzie pobranie niezbędnych bibliotek z Internetu, bądź cierpliwy. Możesz pobrać zawartość z „build / unzip_boot /”, w następujący sposób:

build/unzip_boot/
├── bootimg.json (boot image info)
├── kernel
├── second (2nd bootloader, if exists)
├── boot.img.avb.json (AVB only)
└── root
cfig
źródło
To jest odpowiedź, ponieważ ten kod i projekt są aktualne i utrzymywane.
Gabriel Fair