Як витягти boot.img?


15

Я намагаюся бачити вміст у boot.imgфайлі із зображення Android.

Я гуглив і знайшов цю статтю витягти system.img, але вона не працює boot.img. При спробі зробити це для boot.imgцього показано наступне:

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

Є чи simg2imgвикористовуватися тільки для вилучення system.img?

  1. Якщо так, чи є інший спосіб вилучення boot.img?
  2. Якщо ні, то в чому проблема не видобутку boot.img?

будь ласка, визначте конкретний дистрибутив Linux та версію ядра.
mdpc

Відповіді:


19

boot.img - це невеликий (ish) файл, який містить дві основні частини.

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

Розпакуйте boot.img:

Він містить такі етапи:

  1. Завантажте інструмент, використовуючи wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz

  2. Витягніть файл за допомогою tar xvzf android_bootimg_tools.tar.gz.

    Він містить twoдвійкові файли:

           * unpackbootimg
           * mkbootimg
    

3. Потім виконати ./unpackbootimg -i <filename.img> -o <output_path>

It will contain,

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

Ми також можемо витягти ramdisk, використовуючи наступну команду

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

Після зміни файлів ми можемо знову запакувати ці файли як boot.img, використовуючи mkbootimg

Веселіться!


1
Я отримую помилку на третьому кроці, будь ласка, допоможіть мені ... термінал каже, що команда unpackbootimg не знайдена
Rahul Matte

1
Отримати ту саму помилку для кроку 3 на Монетному дворі 17 тут. Спробував запустити їх на sudo та після chmod 755 безрезультатно.
Ніссе

На кроці 3 переконайтесь, що він output_pathуже існує, інакше unpackbootimgбуде сегментація за замовчуванням.
Алдавіва

2
Посилання на інструмент мертве.
Аддісон Кримп

1
Виправлення: "команда unpackbootimg не знайдена", ви використовуєте 32-бітовий двійковий файл на 64-бітній машині без 32-бітової залежності. Встановіть їх за допомогою "apt-get install gcc-multilib"
WHol

6

boot.img- це не стиснене зображення файлової системи system.img. Він зчитується завантажувачем і містить трохи більше, ніж зображення ядра та зображення рамного диска.

Деякі двійкові дистрибутивні передають зображення ядра та рамдиска окремо. У такому випадку вам нічого не потрібно робити boot.img, просто відновіть нове mkbootimg.

Якщо вам потрібно отримати інформацію з програми boot.img, спробуйте split_bootimg( Вільям Енк , через вікі Android ).


Посилання на split_bootimgбільше не дійсне.
Натан Осман

@NathanOsman Замінено посиланням на копію на сторінці Вільяма Енка.
Жил "ТАК - перестань бути злим"

4

Я використовую opensuse. Я встановив abootimg. Якщо ви хочете витягти (завантаження | відновлення) .img, виконайте такі дії:

abootimg -x (boot|recovery).img

Тоді ви отримуєте наступні файли: bootimg.cgf, zImage та initrd.img Якщо ви хочете запакувати зображення, ви запускаєте такі

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

Тоді ви отримаєте (завантаження | відновлення) .img

Насолоджуйтесь


1

Ви можете скористатися наступним інструментом для витягування та повторної упаковки завантажувального зображення Android

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

скопіюйте свій boot.img у клонований сховище git. Виконати:

$ ./gradlew unpack

Перший час запуску потрібно буде завантажити потрібні лінзи з Інтернету, набратися терпіння. Ви можете отримати вміст у "build / unzip_boot /", наприклад:

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

Це відповідь, оскільки цей код та проект поточний та підтримується.
Ярмарок Габріеля
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.