中兴U930HD手机CPU采用的是联芯科技的LC1810,该平台系统的recovery.img 和boot.img 的打包格式跟其他平台(如高通、MTK、英伟达等)不一致,研究了半天终于将930HD的recovery替换了,步骤如下
1、用第三方工具root手机之后,采用dd命令导出recovery.img到sd卡
adb shell
su
dd if=/dev/block/platform/comip-mmc.1/by-name/recovery of=/sdcard/recovery.img
导出后发现只有1M左右的大小,理论上按照android标准格式应该有6 M以上,甚至10多M,奇怪了。。。。。。
到Linux环境下,采用 file命令查看文件格式
file recovery.img
//输出
recovery.img: gzip compressed data, was "recovery", from Unix, last modified: Wed May 7 09:25:06 2014
原来这个img是个gzip的压缩包,那就好办了,解压缩来看看到底什么东东。。。
2、解压缩recovery.img
gunzip -S .img recovery.img //因为后缀不是.gz,所以用-S 选项
在当前目录下生成新的recovery文件,在用file命令查看
file recovery
recovery: ASCII cpio archive (SVR4 with no CRC)
原来是一个cpio格式的文件
怎么样,心里是不是暗自得意了?有戏了。。。。
再次解压cpio文件
先创建一个recovery_ok的目录
mkdir recovery_ok
cd recovery_ok
cpio -i -F ../recovery
ls -al 命令查看发现里面的目录结构就是根文件系统ramdisk的结构。
从这里大概就知道了,原来联芯方案的recovery.img仅仅是包含了ramdisk,而没有包含kernel。
接下来替换掉sbin目录下的recovery二进制程序。
3、重新打包生成recovery.img
也就是个逆过程,首先用cpio命令,再用gzip命令
find . | cpio -o -H newc > ../recovery
3009 blocks
gzip -c recovery > recovery.img
这个recovery.img就是我们最新生成的recovery,用adb命令重新烧写到手机里即可体现,具体烧写过程请参考博文
Android 采用fastboot刷system.img boot.img recovery.img