Jak wyodrębnić plik boot.img?

Próbuję wyświetlić zawartość pliku boot.img z obrazu Androida.

Wyszukałem w Google i znalazłem ten artykuł , aby wyodrębnić system.img, ale nie działa w przypadku . Gdy próbujesz to zrobić dla boot.img, pokazuje:

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

Czy simg2img jest używany tylko do wyodrębniania system.img?

  1. Jeśli tak, czy jest inny metoda wyodrębniania boot.img?
  2. Jeśli nie, jaki jest problem z niewyodrębnianiem boot.img?

Komentarze

Odpowiedź

boot.img to mały (ish) plik składający się z dwóch głównych 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 two binaria:

     * 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ż wypakować 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 używając mkbootimg

Baw się dobrze!

Komentarze

  • W trzecim kroku pojawia się błąd proszę, pomóż mi … terminal mówi, że nie znaleziono polecenia unpackbootimg
  • Otrzymuję ten sam błąd dla kroku 3 w Mint 17 tutaj. Próbowałem uruchomić je przez sudo i po chmod 755 bezskutecznie.
  • W kroku 3 upewnij się, że output_path już istnieje, w przeciwnym razie unpackbootimg spowoduje segfault.
  • Link do narzędzia jest martwy.
  • Poprawka dla: " unpackbootimg polecenie nie zostało znalezione ", używasz 32-bitowego pliku binarnego na 64-bitowej maszynie bez 32-bitowych zależności. Zainstaluj je za pomocą " apt-get install gcc-multilib "

Odpowiedź

boot.img nie jest skompresowanym obrazem systemu plików, takim jak system.img. Jest odczytywany przez program ładujący i zawiera niewiele więcej niż obraz jądra i obraz ramdysku.

Niektóre dystrybucje binarne dostarczają oddzielnie obrazy jądra i ramdysku. W takim przypadku nie musisz nic robić z boot.img, po prostu wygeneruj nowy za pomocą mkbootimg.

Jeśli chcesz wyodrębnić informacje z boot.img, spróbuj split_bootimg (przez Williama Enck , przez wiki Androida ).

Komentarze

  • Link do split_bootimg jest już nieaktualny.
  • @NathanOsman Zastąpiony przez link do kopii na stronie Williama Encka '.

Odpowiedź

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

abootimg -x (boot|recovery).img 

Następnie otrzymasz następne 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 „dostaniesz (boot | recovery) .img

Ciesz się

Odpowiedz

Możesz użyć następującego narzędzia do wyodrębnienia i ponownego spakowania obrazu rozruchowego Androida

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

skopiuj plik boot.img do sklonowane repozytorium git. Uruchom:

$ ./gradlew unpack 

Pierwsze uruchomienie będzie wymagało pobrania niezbędnych bibliotek z Internetu, bądź cierpliwy. Zawartość można pobrać pod adresem „build / unzip_boot /”, na przykład:

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

Komentarze

  • To jest odpowiedź, ponieważ ten kod i projekt są aktualne i utrzymywane.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *