adb的强大之处在于可以在PC端直接操控手机,可以说是通用的工具!那么今天带来的这款工具的强大,估计会让爱好者灰常之兴奋,用好这款工具你就可以动手修改boot.img了,而不是简简单单的精简ROM或者美化美化加加字体等每个人都可以完成的工作!
个人常用功能
1、解包/打包boot.img/recovery.img
2、解包/打包ramdisk
3、解包data/system.img
4、解密/生成rle加密图片(开机第二屏图片,不是开机动画哦)
另外:还支持解包updata.app(本人未用过)
背景知识
一、Android手机的文件系统 Android手机的文件系统有许多存储器组成,以下是在adb shell下面的输出:
1 cat/proc/mtd
注意,不同的手机在上述存储设备的顺序可能会各不相同!一定要检查您的手机,确定在以下的操作中选择正确的设备号(mtdX,这个X的序号一定要检查清楚)。 根目录以及分区的定义(在Android源代码的root.c文件中定义)
根目录: | Linux 块设备 | /挂载点/ | 文件系统 | 大小 | 描述 |
BOOT: | /dev/mtdblock[?] | / | (RAM) | Raw | 内核、内存盘和引导配置。 |
DATA: | /dev/mtdblock5 | /data/ | yaffs2 | 91904kb | 用户、系统配置,软件配置以及软件(没有a2sd的话) |
CACHE: | /dev/mtdblock4 | /cache/ | yaffs2 | 30720kb | OTA缓存,recovery/更新配置及临时文件夹 |
MISC: | /dev/mtdblock[?] | N/A | Raw,[?]kb | (等待添加) | |
PACKAGE: | (相对于刷机包) | N/A | 刷机包的伪文件系统。 | ||
RECOVERY: | /dev/mtdblock[?] | / | (RAM) | Raw,[?]kb | recovery和更新环境的内核和内存盘。类似于BOOT:。 |
SDCARD: | /dev/mmcblk0(p1) | /sdcard/ | fat32 | 32MB-32GB | TF卡。通常刷机包就放在这里。 |
SYSTEM: | /dev/mtdblock3 | /system/ | yaffs2 | 92160kb | 系统分区,静态且是只读的。 |
TMP: | /tmp/ | (RAM) | 标准的Linux临时文件夹 | 在关机/重启时清空。 |
您首先应该要做的事情是使用您的recovery对您的ROM进行备份,以免操作失误照成数据的丢失!
二、boot和recovery映像的文件结构
boot和recovery映像并不是一个完整的文件系统,它们是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk内存盘,然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)。
/*
** +-----------------+
** | boot header | 1 page
** +-----------------+
** | kernel | n pages
** +-----------------+
** | ramdisk | m pages
** +-----------------+
** | second stage | o pages
** +-----------------+
**
** n = (kernel_size + page_size - 1) / page_size
** m = (ramdisk_size + page_size - 1) / page_size
** o = (second_size + page_size - 1) / page_size
**
** 0. all entities are page_size aligned in flash
** 1. kernel and ramdisk are required (size != 0)
** 2. second is optional (second_size == 0 -> no second)
** 3. load each element (kernel, ramdisk, second) at
** the specified physical address (kernel_addr, etc)
** 4. prepare tags at tag_addr. kernel_args[] is
** appended to the kernel commandline in the tags.
** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr
** 6. if second_size != 0: jump to second_addr
** else: jump to kernel_addr
*/
boot的ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,例如:初始化init进程以及init.rc(可以用于设置很多系统的参数&