我们来看一个制作system.img的命令实例:

$ ./make_ext4fs -s -T 1421464178 -S file_contexts -l 1073741824 -a system system.img system/

参数说明:
// -s 表示安静处理,不输出动作,可以不带该参数
// -T 表示Unix时间戳,对system.img中的文件设置修改时间,可以到搜索“站长之家 时间戳”获取某个时间点的时间戳;
// -S 表示sepolicy file_contexts
// -l 表示最大的文件大小(受限于分区大小);
// -a 表示Android的mount点,比如system、userdata、recovery;
// system.img 表示输出文件名;
// system/ 表示输入目录,该目录下有framework、app、bin等目录;

这里需要对file_contexts进行一下说明,该文件是对selinux文件系统的说明,一般在原来镜像文件的root目录下可以找到,如果自己修改/增加/删除了执行文件,可能需要对文件进行修改。具体的内容比较复杂,需要selinux的知识,这里不说了。
-l表示最大的文件大小,受限制于分区大小,如果制作出来的分区镜像大于该值,将会提示失败,这里使用1GB=1073741824B,一般比较新的手机都已经具备该大小了。

这里得到是一个经过压缩的img,无法直接进行mount。如果需要mount后查看,可以通过simg2img命令进行转换然后进行mount:
$ ./simg2img system.img system.ext4.img
$ sudo mount -t ext4 system.img mnt/
当然,如果不需要查看文件,我们只需要拿到system.img就好。system.ext4.img除了在主机上查看文件,对于打包过程没有帮助。

其实制作system.img非常简单简单,这里写出来主要是为了后面一片制作android-5.0以上更新包的博文做一个参考引用。

make_ext4fs和simg2img是两个linux的执行文件,如果有Android源代码,它们是编译后的结果,出现在out/host/linux-x86/bin/目录中。
这里也提供下载路径方便下载:
make_ext4fs: http://download.csdn.net/detail/howellzhu/8370473
simg2img: http://download.csdn.net/detail/howellzhu/8370479v