¿Cómo extraer boot.img?

15

Estoy tratando de ver el contenido en un boot.imgarchivo de una imagen de Android.

Busqué en Google y encontré este artículo para extraer system.img, pero no funciona boot.img. Al intentar hacer esto boot.img, muestra lo siguiente:

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

¿Se simg2imgusa solo para extracción system.img?

  1. Si es así, ¿hay algún otro método para extraer boot.img?
  2. Si no, ¿cuál es el problema para no extraer boot.img?
Dhasneem
fuente
Identifique la distribución específica de Linux y la versión del núcleo.
mdpc
Hay una pregunta similar en el sitio Android.SE: ¿Cómo desempaquetar y editar boot.imgpara portar ROM?
WhiteWinterWolf

Respuestas:

19

boot.img es un archivo pequeño (ish) que contiene dos partes principales.

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

Descomprima boot.img:

Contiene los siguientes pasos:

  1. Descargue la herramienta usando wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz

  2. Extraiga el archivo usando tar xvzf android_bootimg_tools.tar.gz.

    Contiene twobinarios:

           * unpackbootimg
           * mkbootimg
    

3.Entonces ejecuta ./unpackbootimg -i <filename.img> -o <output_path>

It will contain,

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

También podemos extraer ramdisk, usando el siguiente comando

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

Después de cambiar los archivos, nuevamente podemos empacar esos archivos como boot.img usando mkbootimg

¡Que te diviertas!

Dhasneem
fuente
Recibo un error en el tercer paso, por favor, ayúdenme ... el terminal dice que no se encontró el comando unpackbootimg
Rahul Matte
Obteniendo el mismo error para el paso 3 en Mint 17 aquí. Intenté ejecutarlos por sudo y después de chmod 755 en vano.
Nisse
En el paso 3, asegúrese de que output_pathya exista, de lo contrario unpackbootimgse segfault.
Aldaviva
2
El enlace para la herramienta está muerto.
Addison Crump
Simplemente clone el código de github: github.com/osm0sis/mkbootimg
Albus Dumbledore
6

boot.imgno es una imagen de sistema de archivos comprimido como system.img. Lo lee el gestor de arranque y contiene poco más que una imagen del núcleo y una imagen de disco ram.

Algunas distribuciones binarias envían las imágenes de kernel y ramdisk por separado. En ese caso, no necesita hacer nada boot.img, solo regenere uno nuevo con mkbootimg.

Si necesita extraer información de a boot.img, intente split_bootimg(por William Enck , a través de la wiki de Android ).

Gilles 'SO- deja de ser malvado'
fuente
El enlace a split_bootimgya no es válido.
Nathan Osman
@NathanOsman Reemplazado por un enlace a la copia en la página de William Enck.
Gilles 'SO- deja de ser malvado'
4

Yo uso opensuse. He instalado abootimg. Si desea extraer (boot | recovery) .img ejecute tal:

abootimg -x (boot|recovery).img

Luego obtienes los siguientes archivos: bootimg.cgf, zImage e initrd.img Si quieres empacar una imagen, ejecutas tal

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

Luego obtendrá (boot | recovery) .img

Disfrutar

usuario199575
fuente
1

Puede usar la siguiente herramienta para extraer y volver a empaquetar la imagen de arranque de Android

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

copia tu boot.img en el repositorio clonado de git. Correr:

$ ./gradlew unpack

La primera vez que se ejecute deberá descargar las bibliotecas necesarias de Internet, tenga paciencia. Puede obtener el contenido en "build / unzip_boot /", así:

build/unzip_boot/
├── bootimg.json (boot image info)
├── kernel
├── second (2nd bootloader, if exists)
├── boot.img.avb.json (AVB only)
└── root
cfig
fuente
Esta es la respuesta, ya que este código y proyecto son actuales y se mantienen.
Gabriel Fair