您的位置:首页 > 运维架构 > Linux

recovery: ASCII cpio archive (SVR4 with no CRC)——cpio格式的recovery解压缩和重新打包的方法

2014-05-07 09:49 1386 查看
         中兴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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐