Android 各镜像文件img详解

news2024/9/23 19:16:00

Android编译后生成文件,在out/target/product/lime下:

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

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类似,只不过把两个镜像按照一定的格式合并为一个镜像而已。

ramdisk.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

https://cczheng.blog.csdn.net/article/details/105075851 (推荐)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python处理Excel比Vba快100倍,媳妇连连夸赞今晚不用再跪搓衣板----python实战

最近经历了一次把vb脚本改造成python脚本,并获得性能提升数倍的过程,当然,这个过程也不是一帆风顺,中间也经历了一些波折,但是,也收获了一波新的认知。正好最近有时间,姑且写下来记录一下。 什…

水一篇,VB+python实现智能聊天机器人案例

1.分工 理论上单python也能写,但是做gui开发,python要用到thinter库/qt库,稍微麻烦一点。这个案例是python做json截取,VB做gui开发截取json字符。 2.准备工作 编写生成file_controlv2.dll并注册,编写speaker.vbs,准备…

java实现获取当前日期、农历、周

大家好,我是雄雄。 前言 大家先看下面的一段话: 今天是:2022年12月18日,星期日,农历十一月廿五,早安🌞🌞🌞 1.讣告 | 我国著名眼科专家兰绪达在南昌逝世,享…

Linux 多线程(附带线程池代码加注释)

目录 01. Linux线程概念 01.1 什么是线程 01.1.1 轻量级进程ID与进程ID之间的区别 01.1.2 总结(重点) 01.2 线程的优点 01.3 线程的缺点 01.4 线程异常 01.5 线程用途 02. Linux进程VS线程 02.1 进程和线程 02.2 关于多线程和多进程编程 03…

Pytorch中的卷积与反卷积(conv2d和convTranspose2d)

卷积 卷积是特征提取的常用操作,卷积可以改变图片的通道和大小,相比全连接操作,卷积可以减少计算量,并且充分融合图像的局部特征。 import torch import torch.nn as nnx torch.randn(1,1,4,4) model nn.Conv2d(in_channels1,o…

Spring MVC学习 | 注解配置Spring MVC总结

文章目录一、注解配置Spring MVC1.1 初始化类1.2 Spring MVC配置类1.3 完整配置过程二、总结2.1 常用组件2.2 执行流程学习视频🎥:https://www.bilibili.com/video/BV1Ry4y1574R 一、注解配置Spring MVC 1.1 初始化类 🔑注解配置的原理 在…

非零基础自学Golang 第10章 错误处理 10.1 错误处理的方式 10.2 自定义错误

非零基础自学Golang 文章目录非零基础自学Golang第10章 错误处理10.1 错误处理的方式10.2 自定义错误10.2.1 错误类型10.2.2 创建错误10.2.3 自定义错误格式第10章 错误处理 我们在编写程序时,为了加强程序的健壮性,往往会考虑到对程序中可能出现的错误…

大数据必学Java基础(一百一十三):监听器概念引入

文章目录 监听器概念引入 一、什么是监听器? 二、监听器怎么分类?

SQL - MySQL深分页

一、MySQL深分页问题 我们在日常开发中,查询数据量比较大的时候,后端基本都会通过前端,移动端传过来的页码,每页数据行数,通过SQL中的 limit 进行分页,如果查询页数比较小的时候,不会出现太大问…

【有营养的算法笔记】 二分+排序/堆 求解矩阵中战斗力最弱的 K 行

👑作者主页:进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:有营养的算法笔记 ✉️分类专栏:题解 文章目录一、题目描述二、思路及代码实现1. 二分 排序2.…

【学习笔记】JDK源码学习之Vector(附带面试题)

【学习笔记】JDK源码学习之Vector(附带面试题) 什么是 Vector ?它的作用是什么?它的底层由什么组成?是否是线程安全的? 老样子,跟着上面的问题,我们层层深入了解 Vector 吧。 1、…

Linux——linux面试题

cat a.txt | cut -d "/" -f 3 | sort | uniq -c |sort -nrgrep ESTABLISHED | awk -F " " {print $5} |cut -d ":" -f 1 | sort |uniq -c | sort -nr找回mysql的root用户的密码 首先,进入到/etc/my.cnf,插入一句skip-gra…

Apache Hudi Timeline

Timeline | Apache Hudi Hudi维护了在不同时刻在表上执行的所有操作的时间线,这有助于提供表的即时视图,同时也有效地支持按到达顺序检索数据。Hudi的核心是维护表上在不同的即时时间(instants)执行的所有操作的时间轴&#xff08…

windows下配置chrome浏览器驱动的详细攻略

要想使用python去爬取互联网上的数据,尤其是要模拟登录操作。那么selenium包肯定是绕不过的。 selenium包本质上就是通过后台驱动的方式驱动浏览器去。以驱动chrome浏览器为例,搭建环境如下: 1、查看本机chrome浏览器的版本。 方式是&#x…

第三十二章 linux-模块的加载过程二

第三十二章 linux-模块的加载过程二 文章目录第三十二章 linux-模块的加载过程二HDR视图的第二次改写模块导出的符号HDR视图的第二次改写 在这次改写中,HDR视图中绝大多数的section会被搬移到新的内存空间中,之后会根据这些section新的内存地址再次改写…

[附源码]计算机毕业设计Python“小世界”私人空间(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等…

知到/智慧树——程序设计基础(C语言)进阶篇

目录 第一章测试 第二章测试 第三章测试 第四章测试 第五章测试 第一章测试 第1部分总题数: 10 1 【单选题】 (10分) 在C语言中,将属于不同类型的数据作为一个整体来处理时,常用( )。 A. 简单变量 B. 数组类型数据 C. 结…

论文投稿指南——中文核心期刊推荐(力学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

10.union all、N天连续登录

有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续两天都有访问记录的用户) 数据准备 最后需完成的结果表 步骤1,所有用户的总数及平均年龄 (1). 将数据去重 with t1 as (select distinctuser_i…

如何使用交换机、路由器及防火墙进行组网以及他们之间的功能和区别

如何使用交换机、路由器及防火墙进行组网以及他们之间的功能和区别。 几乎大部分网络都有交换机、路由器和防火墙这三种基本设备,因此这三种设备对于网络而言非常重要,很多人对这三种设备的使用容易弄混。 一般网络部署: 或者抽象为这种部署模式: 几乎每个网络都有交换…