How to extract android boot.img ?

boot: The boot partition contains a kernel image and a RAM disk combined via mkbootimg. In order to flash the kernel directly without flashing a new boot partition, a virtual partition can be used:

  • kernel: The virtual kernel partition overwrites only the kernel (zImage, zImage-dtb, Image.gz-dtb) by writing the new image over the old one. To do this, it determines the start location of the existing kernel image in eMMC and copies to that location, keeping in mind that the new kernel image may be larger than the existing one. The bootloader can either make space by moving any data following it or abandoning the operation with an error. If the development kernel supplied is incompatible, you may need to update the dtb partition if present, or vendor or system partition with associated kernel modules.
  • ramdisk: The virtual ramdisk partition overwrites only the RAM disk by writing the new image over the old one. To do this, it determines the start location of the existing ramdisk.img in eMMC and copies to that location, keeping in mind that the new RAM disk maybe be larger than the existing one. The bootloader can either make space by moving any data following it or abandon the operation with an error.

For extracting boot.img, we need to install abootimg on ubuntu using below command,

$ sudo apt-get install abootimg

Now, lets copy boot.img which we want to extract into temporary directory and check its information as below,

$ mkdir extract_bootimg
$ cd extract_bootimg
$ cp dir_of_bootimage/boot.img .
$ abootimg -i boot.img
Android Boot Image Info:

* file name = boot.img 

* image size = 6301696 bytes (6.01 MB)
  page size  = 2048 bytes

* Boot Name = ""

* kernel size       = 5182480 bytes (4.94 MB)
  ramdisk size      = 1107054 bytes (1.06 MB)
  second stage size = 1107054 bytes (1.06 MB)

* load addresses:
  kernel:       0x10008000
  ramdisk:      0x11000000
  second stage: 0x10f00000
  tags:         0x10000100

* cmdline = pci=noearly vmalloc=256M ptrace.ptrace_can_access=1 earlyprintk=nologger loglevel=8 androidboot.hardware=hw_name androidboot.serialno=01234567890123456789 snd_pcm.maximum_substreams=8 intel_soc_pmu.enable_s3=0

As we can see above “abootimg -i boot.img” displays the boot image information such as kernel image size, ramdisk size and boot arguments of the kernel.

Now, lets extract the boot.img as,

$ abootimg -x boot.img 
writing boot image config in bootimg.cfg
extracting kernel in zImage
extracting ramdisk in initrd.img
extracting second stage image in stage2.img
$ tree
.
├── boot.img
├── bootimg.cfg
├── initrd.img
├── stage2.img
└── zImage

0 directories, 5 files

As we can see above extracting boot.img, we are able to separate kernel image zImage, initrd root file system image initrd.img

Extracting root file system from initrd.img

$ mv initrd.img initrd.gz
$ gunzip initrd.gz
$ mkdir initrd-rfs
$ cp initrd initrd-rfs/
$ cd initrd-rfs/
$ file initrd 
initrd: ASCII cpio archive (SVR4 with no CRC)
$ cpio -id < initrd

This will extract initrd into initrd-rfs/ directory as.

$ tree
.
├── charger -> /sbin/healthd
├── data
├── default.prop
├── dev
├── file_contexts
├── init
├── init.environ.rc
├── init.rc
├── initrd
├── init.trace.rc
├── init.usb.configfs.rc
├── init.usb.rc
├── init.zygote32.rc
├── oem
├── proc
├── property_contexts
├── sbin
│ ├── adbd
│ ├── healthd
│ ├── ueventd -> ../init
│ └── watchdogd -> ../init
├── seapp_contexts
├── selinux_version
├── sepolicy
├── service_contexts
├── sys
├── system
└── ueventd.rc

Referencehttps://github.com/ggrandou/abootimg
https://source.android.com/devices/bootloader/partitions-images

How To Dual-boot Arch Linux and Win... x
How To Dual-boot Arch Linux and Windows 11

Leave a Comment

Sign up to our newsletter!

ADB Commands Android Android Applications Android Build system Application Libraries Application Stack / User Interface Bash / Shell Scripts Bluetooth driver Cloud Technologies Commands and Packages Compilation Content Management System Core Kernel C Programs Development, Debugging and Performance Tools Development and Build Development Environment Setup Django & REST Api Errors & Failures Git Hardware Platforms HTML JAVA Programs Linux, OS Concepts and Networking Linux Device Drivers Linux Host, Ubuntu, SysAdmin Linux Kernel Linux Networking Middleware Libraries, HAL Multimedia NDK / Middleware / HAL Operating System Concepts PHP Programming Languages Scripting and Automation Search Engine Optimisation ( SEO ) Social Media Source Code Management ( SCM ) System Administration, Security Testing and Debugging Uncategorized Web Design and Development Website Hosting Wordpress Yocto Embedded Linux