Как извлечь 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?
Dhasneem
источник
Пожалуйста, укажите конкретный дистрибутив 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

Веселиться!

Dhasneem
источник
Я получаю ошибку на третьем шаге, пожалуйста, помогите мне ... терминал говорит, что команда unpackbootimg не найдена
Rahul Matte
Получение такой же ошибки для шага 3 на Mint 17 здесь. Пробовал запускать их по sudo и после chmod 755 безрезультатно.
Nisse
На шаге 3 убедитесь, что он output_pathуже существует, в противном случае unpackbootimgвозникнет ошибка.
Aldaviva
2
Ссылка на инструмент мертва.
Эддисон Крамп
Просто клонируйте код из github: github.com/osm0sis/mkbootimg
Альбус Дамблдор
6

boot.img не сжатый образ файловой системы, как system.img . Он читается загрузчиком и содержит чуть больше, чем образ ядра и образ виртуального диска.

Некоторые бинарные дистрибутивы поставляют образы ядра и ramdisk отдельно. В этом случае вам не нужно ничего делать boot.img, просто создайте новый сmkbootimg .

Если вам нужно извлечь информацию из a boot.img, попробуйте split_bootimg( Уильям Энк , через вики Android ).

Жиль "ТАК - перестань быть злым"
источник
Ссылка на split_bootimgбольше не действительна.
Натан Осман
@NathanOsman Заменяется ссылкой на копию на странице Уильяма Энка.
Жиль "ТАК - перестань быть злым"
4

Я использую opensuse. Я установил abootimg. Если вы хотите извлечь (boot | recovery) .img, запустите такой:

abootimg -x (boot|recovery).img

Затем вы получаете следующие файлы: bootimg.cgf, zImage и initrd.img. Если вы хотите упаковать образ, вы запускаете такой

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

Тогда вы получите (boot | recovery) .img

наслаждаться

user199575
источник
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
cfig
источник
Это ответ, так как этот код и проект актуален и поддерживается.
Габриэль Ярмарка