Android 各镜像文件img详解
Android编译后生成文件,在out/target/product/xxx下:
cache.img、cust.img、metadata.img、misc.img(本地无)、recovery.img、super.img、userdata.img、vbmeta.img、vbmeta_system.img
abl.elf、boot.img、dtbo.img、dtb.img、ramdisk.img、vendor.img(产出的都是AP的img)
Android 10(Q版本)出现了动态分区(https://source.android.com/devices/tech/ota/dynamic_partitions/implement#implement-dynamic-partitions-new-devices)
cache.img(缓存镜像)
:用于存储系统或用户应用产生的临时数据。
vendor.img
:包含所有不可分发给 Android 开源项目 (AOSP) 的二进制文件。如果没有专有信息,则可以省略此分区。
misc.img
:misc 分区供恢复映像使用,存储空间不能小于 4KB。
userdata.img
:userdata 分区包含用户安装的应用和数据,包括自定义数据。
vbmeta.img
:用于安全验证,bootloader验证vbmeta的签名,再用vbmeta的key以及hash值验证dtbo/boot/system/vendor。
system.img(系统镜像)
:系统镜像是地址ROM最常使用的一个镜像,用于存储Android系统的核心文件,System.img就是设备中system目录的镜像,里面包含了Android系统主要的目录和文件。一般这些文件是不允许修改的。
userdata.img(用户数据镜像)
:将会被挂接到 /data 下,包含了所有应用相关的配置文件,以及用户相关的数据 。
system.img、userdata.img、vendor.img、persist.img都是sparse压缩文件系统镜像,目的是方便传输/刷机/存储等。
recovery.img
: recovery分区的镜像,一般用作系统恢复(刷机)。
boot.img(Linux内核镜像): Android系统中,通常会把zImage ( 内核镜像uImage文件) 和ramdisk.img打包到一起,生成一个boot.img镜像文件,放到boot分区,由bootloader来引导启动,其启动过程本质也是和分开的uImage&ramdisk.img类似,只不过把两个镜像按照一定的格式合并为一个镜像而已。
amdisk.img(内存磁盘镜像)
是根文件系统:android启动时 首先加载ramdisk.img镜像,并挂载到/目录下,并进行了一系列的初始化动作,包括创建各种需要的目录,初始化console,开启服务等,尽管ramdisk.img需要放在Linux内核镜像(boot.img)中,但却属于Android源代码的一部分。
ramdisk、boot.img、recovery.img
之间的关系:
- ramdisk.img会被打包到boot.img和recovery.img中 (不是同一个ramdisk.img).在不同分区中的作用不同。
- ramdisk.img中比较重要的文件是"init",“init.rc”,其中init是system/core/init/init.c编译而来,boot.img中ramdisk里的init.rc位于system/core/init/init.rc,而recovery.img中ramdisk里的init.rc位于bootable/recovery/etc/init.rc。
- kernel加载结束以后第一个进程是执行init,init会解析init.rc文件,并起相应的服务。由此可以知道正常开机和进入recovery模式起的进程是不同的。
从本质上说,recovery.img和boot.img高达90%是一样的。这就意味着,recovery.img也是Linux内核(zImage)和内存磁盘镜像(ramdisk.img)组成的。这两个镜像中的Linux内核是完全一样的,区别只是ramdisk.img中的少部分文件存在差异。其中最主要的差异是recovery.img和ramdisk.img中的sbin目录中多了一个recovery命令进入Recovery主界面,而不会正常启动Android系统。实现的原理是Recovery.img和boot.img在自己的分区各自有一个Linux内核(zImage),尽管Linux内核都一样,但Linux内核调用的init命令解析的init.rc及其相关文件的内容有一定的差异。而Bootloader根据用户的选择决定使用boot.img中Linux内核,还是使用Recovery.img中的Linux内核启动系统。如果使用前者,Android系统就会正常启动,如果使用后者,就会进入Recovery选择菜单,所以recovery.img和boot.img的第二个差异就是其中的init.rc及其相关配置文件的内容略有不同。
参考连接:
https://blog.csdn.net/lijunjun1120/article/details/108720372
https://blog.csdn.net/dongyi1988/article/details/103994321
https://source.android.google.cn/devices/bootloader/partitions-images?hl=zh-cn
更多推荐
所有评论(0)