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之间的关系:

  1. ramdisk.img会被打包到boot.img和recovery.img中 (不是同一个ramdisk.img).在不同分区中的作用不同。
  2. 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。
  3. 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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐