Android 镜像文件制作 【ramdisk.img system.img userdata.img】

Android项目生成的镜像文件包括ramdisk.img, system.img, userdata.img

ramdisk.img 是out/target/product/项目名/root 目录经过打包压缩而成; system.img是out/target/product/项目名/system目录打包压缩而成; userdata.img是out/target/product/项目名/data目录经过打包压缩而成。

Android启动时,会把ramdisk挂载为rootfs(根文件系统"\"),把system.img挂载到ramdisk.img下面的system目录,把userdata.img挂载到ramdisk.img下面的data目录。

用file XX.img来查看一下这几个文件的类型

 

经file命令查看后可以发现ramdisk.img是gzip的压缩格式,system.img和userdata.img是executable格式。不同格式采用不同的解压和压缩方法。

 

首先来解压ramdisk.img

1、将ramdisk.img拷贝到一个临时目录tmp下面

cp ramdisk.img /tmp

cd tmp

2、修改ramdisk.img的文件名为ramdisk.img.gz

mv ramdisk.img ramdisk.img.gz

3、解压

gunzip ramdisk.img.gz

解压后生成ramdisk.img文件,查看该文件格式是cpio archive

 Android 镜像文件制作 【ramdisk.img system.img userdata.img】_第1张图片

4、用cpio命令提取内容

当前目录下新建一个目录ramdisk,内容将提取到该目录下

Android 镜像文件制作 【ramdisk.img system.img userdata.img】_第2张图片

然后你可以对ramdisk下面的相关文件做修改。注意ramdisk下的data和system目录分别由userdata.img和system.img挂载,所以往这个里面加东西最终在机器上将miss!,要往这里面加东西需要修改userdata.img或者system.img(后面将说明)。

 

修改完之后就可以进行重新打包啦~, 打包可以继续使用cpio命令,也可以使用Android自带的mkbootfs工具,mkbootfs在Android工程下的out/host/linux-x86/obj/EXECUTABLE/mkbootfs_intermedidatas/mkboofs

回到tmp目录,拷贝mkboofs到tmp目录下,并移除原来的ramdisk.img文件

Android 镜像文件制作 【ramdisk.img system.img userdata.img】_第3张图片

使用mkbootfs打包ramdisk目录,这一步将在tmp目录下面生成新的ramdisk.img。这个ramdisk.img就可以替换手机端或者sdk中的ramdisk.img了(为了避免错漏,替换之前务必备份原档)

Android 镜像文件制作 【ramdisk.img system.img userdata.img】_第4张图片

 

========================================================================================================

system.img以及userdata.img的解包和打包,两种文件格式一样,这里我们就以system.img 为例

需要用到两个工具:unyaffs、mkyaffs2image。unyaffs可以从android官网下载源码编译得到(网上也有编译好的版本),mkyaffs2image在Android源码的out/host/linux-x86/bin/mkyaffs2image。

1、在tmp目录下新建system目录,并拷贝以上的两个工具以及system.img到该目录下面:

2、使用unyaffs解包system.img

Android 镜像文件制作 【ramdisk.img system.img userdata.img】_第5张图片

3、解包后出现system目录就是终端中根目录下的system,在这里我们可以往该目录(当然也包括子目录)添加或修改。然后使用mkyaffs2image来重新打包

Android 镜像文件制作 【ramdisk.img system.img userdata.img】_第6张图片

 

以上是关于Android中img文件的解包,和打包,感谢您的阅读~

 

 

 

 

 

 

 

 

你可能感兴趣的:(Android编译)