一下操作的前提是手机以获得root权限
1、备份boot.img
首先 adb shell 进入手机终端,然后执行 cat /proc/mtd 命令,察看机器的分区情况。如下图:
可以看到boot分区在mtd0上。
备份boot分区:cat /dev/mtd/mtd0 >/sdcard/boot.img 将boo.img备份到了SD卡上。
2、解压boot.img
将boot.img拷贝到机器上,在机器上创建一个目录,如boot目录用来存放boot.img,
通过split_bootimg.pl脚本文件对boot.img进行解压。
将split_bootimg.pl文件也放到刚才创建的boot目录,然后执行 ./split_bootimg.pl boot.img,这是会在该目录下生成两个文件,
一个文件是boot.img-kernel,这个就是kernel的镜像文件Image
另一个文件是boot.img-ramdisk.gz 这个文件就是ramdisk.img,也就是编译出来的out/target/product/你的产品名目录/ 目录下的root 目录
下载split_bootimg.pl
3、解压boot_img-ramdisk.gz:
执行 :gzip -dc ../boot.img-ramdisk.gz | cpio -i 命令后会在当前面目录下生成一个ramdisk目录,这个目录的内容就是上面个说的root目录
里面的内容,在这里面你可以修改init.rc 和default.prop 文件
a、在init.rc里可以修改系统目录为都写权限,修改system为读写mount yaffs2 mtd@system /system rw remount
b、使adb具有root权限
default.prop
修改为:
default.prop
ro.secure=0
ro.allow.mock.location=1
ro.debuggable=1
persist.service.adb.enable=1
命令解释:
ro.secure=0 默认开启未知源APK想修添加自己的服务可以在init.rc里添加。这里不在介绍。
4、把修改的内容在打包成boot.img
首先用mkbootfs 命令将解压的ramdisk目录在打成boot.img-ramdisk.gz,
执行 mkbootfs ramdisk | gzip >boot.img-ramdisk.gz
然后在用新生成的boot.img-ramdisk.gz生成boot.img
执行 mkbootimg --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz --base 0x02600000 -o boot.img
这样就生成了一个修改过的boot.img镜像文件,将boot.img镜像文件弄到机器里重启后就会有相应的功能了。
注:对mkbootimg --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz --base 0x02600000 -o boot.img 命令中的基地址
0X02600000的确定简单的介绍一下,首先看下面两附图:
圈一:安卓的boot.img标准的文件头格式:ANDROID!(8字节)
圈二:kernel_size(4字节)
圈三:kernel_addr(4字节)
圈四:ramdisk_size(4字节)
圈五:ramdisk_addr(4字节)
圈六:second_stage_size(4字节)
圈七:second_stage_addr(4字节)
图八:tags_addr(4字节)
圈九:page_size(4字节)
kernel地址,应为base+0x00008000 (一般都是固定的)
ramdisk地址,应为base+0x01000000 (一般都是固定的)
secondstage地址,应为base+0x00f00000 (一般都是固定的)
tags地址,应为base+0x00000100 (一般都是固定的)
page是页长,为1k(1024)的整数倍。此处为0x00000800,十进制为2048。 (这个每个系统可以会不同)
kernel_size:0030f68c
kernel_addr:02608000
所以基地址=0x02608000-0x00008000=02600000
ramdisk_size:0003742e
ramdisk_addr:03600000
所以基地址=0x03600000-0x01000000=02600000
second_stage_size:00000000
second_stage_addr:03500000
所以基地址=0x03500000-0x00f00000=02600000
tags_addr:02600100
所以基地址=0x02600100-0x00000100=02600000
这四个基地址不一样是,以少数服从多数原则选择,打包完成后手工修正不相同的那个addr。
通过fastboot命令将boot.img push 到机器里看下篇文章