Enter the machine using adb shell
Run cat /proc/partitions
# Path Purpose Size
0 /dev/block/mmcblk0 7761920
1 /dev/block/mmcblk0p1 data 6085631
2 /dev/block/mmcblk0p2 bootloader 16384
3 /dev/block/mmcblk0p3 1
5 /dev/block/mmcblk0p5 uboot 16384
6 /dev/block/mmcblk0p6 kernel 16384
7 /dev/block/mmcblk0p7 system 786432
8 /dev/block/mmcblk0p8 misc 16384
9 /dev/block/mmcblk0p9 recovery 32768
10 /dev/block/mmcblk0p10 sysrecovery 16384
11 /dev/block/mmcblk0p11 private 16384
12 /dev/block/mmcblk0p12 Reserve0 16384
13 /dev/block/mmcblk0p13 klog 32768
14 /dev/block/mmcblk0p14 Reserve1 16384
15 /dev/block/mmcblk0p15 Reserve2 655360
Dump the partition to a file using dd
dd if=/dev/block/mmcblk0p6 of=/data/kernel_ramfs.img
Extract it to your linux system adb pull /data/kernel_ramfs.img
Run sudo apt-get install abootimg
Run abootimg -i kernel_ramfs.img
. It need to show
Android Boot Image Info:
* file name = kernel_ramfs.img
* image size = 16777216 bytes (16.00 MB)
page size = 2048 bytes
* Boot Name = ""
* kernel size = 9797076 bytes (9.34 MB)
ramdisk size = 2017625 bytes (1.92 MB)
* load addresses:
kernel: 0x40008000
ramdisk: 0x41000000
tags: 0x40000100
* empty cmdline
* id = 0x7c37c0d4 0xcefde745 0xe81b85ba 0xf05275ba 0xbe7de0ad 0x00000000 0x00000000 0x00000000
That means you dump the correct kernel+ramfs
abootimg -x kernel_ramfs.img
It will extract zImage
and also initrd.img
mkdir initrd
cd initrd
cat ../initrd.img | gunzip | cpio -vid
Modify the ramdisk accordingly (e.g. you modify init.rc or add another additonal files) Then repack accordingly
cd initrd
find . | cpio --create --format='newc' | gzip > ../myinitrd.img
abootimg --create myboot.img -f bootimg.cfg -k zImage -r myinitrd.img
adb push myboot.img /data/myboot.img
adb shell dd if=mybootimg of=/dev/block/mmcblk0p6
Reboot - And pray for the best
copy kernel_ramfs.img to /sdcard and pull it from sdcard