android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中,ramdisk.img是emulator(模拟器)的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator负责加载这3个映像文件。
下面我们来简要分析一下这三个镜像文件。
如下图所示是编译之后生成的相关文件。
其中三个镜像对应的文件夹上图也很明了了。android系统启动后,会把system.img和userdata.img分别加载到 ramdisk文件系统中的system和 userdata目录下。
init.rc的部分内容截图
这里要着重强调一下,从名字上就可以看出来ramdisk文件系统是一个基于内存的文件系统,所以利用adb shell等修改其内容后,
一旦系统重启,修改的内容都会被还原的。
前面说了ramdisk.img就是root文件夹,和在Linux下利用busybox制作的文件系统一样,init.rc是要被首先解析的一个配置文件,
里面包含了文件夹的创建,权限,以及启动android重要服务的规则。要想修改init.rc里面的内容,那么在修改之后要重新打包镜像。
下面是编译这些镜像时的编译命令:
1.system.img
make systemimage
2.userdata.img
make userdataimage
3.ramdisk.img
make ramdisk
4.boot.img
make bootimage
5.system打包
make snod
这个不检查依赖关系,只是把 out\target\product\XXX\system 目录打包成system.img,用于简单替换文件时打包。
当然执行make命令会生成所有的系统镜像,另外说一下boot.img其实是将ramdisk.img和Kernel打成的一个镜像,在真实产品中会有这个镜像,模拟器中不需要这个镜像。