Android 分区相关介绍

目录

一、MTK平台

1、MTK平台分区表配置

2、MTK平台刷机配置表

3、MTK平台分区表配置不生效

4、Super分区的研究

1)Super partition layout

2)Block device table

二、高通平台

三、展锐平台

四、相关案例

1、Super分区不够导致编译报错

经验一:在MTK平台针对分区表配置不生效或者跟实际对不上的情况,需要搜索是否存在BOARD_MTK_XXX_SIZE_KB的客制化。

结论一:针对super分区应该只关心super分区总大小,其内部各个子分区大小不用根据实际情况来进行调整,例如product_a实际使用了1.7G,但是分区表配置的256MB并没有导致什么报错或者异常,system_a和system_b分区在分区表配置了3G,即这两部分加起来都超过super配置的4G了,但同样也没有存在什么报错或者异常。其原因为super分区内部根据各个实际大小来进行动态调整。


在刷Android镜像的时候会涉及到很多分区,这里统一介绍一下各个平台相关联的知识。

一、MTK平台

1、MTK平台分区表配置

MTK官方文档专门针对分区表进行介绍:FAQ28492

Legacy单分区的分区配置路径:

alps/vendor/mediatek/proprietary/tools/ptgen/MTxxxx/partition_table_emmc.csv  

AB 版本双分区的分区配置路径:

alps/vendor/mediatek/proprietary/tools/ptgen/MTxxxx/partition_table_emmc_ab.csv  

其中几个重要解释如下:

  • Type:RAW data 或 EXT4,这种定义其实只有在 正在运行挂载时才会被用到,但对OTA 升级的同仁,就要注意,因为某些判断脚本中会根据这个type 类型决定加入镜像
  • Size_KB:分区大小单位kb,这个定义了 eng 和 user 版本在storage中占用的空间。但目前user 和eng 版本没有区分,所以只需要设定一个即可
  • Region:分区所在的区域,如:EMMC_BOOT1_BOOT2,UFS_LU0_LU1 就表明在 EMMC 和 UFS 的 boot区域;而在 EMMC_USER 或 UFS_LU2,就表明 在EMMC 和 UFS 的user区域,也就是可供客制化的区域
  • Group:可以填写动态分区的名称,默认只有main 函数。感觉没有什么用
  • Reserved:用的不多,后续补充~应该是预留的空间,一般分区都是 N
  • Download:是否下载标记,这个比较重要,关联刷机包的配置
  • Download File:下载的镜像,这个也比较重要,我们可以很直观了解到对应哪个IMG文件
  • OTA Update:分区是否支持升级
  • EmptyBoot_Needed:在pl 阶段可以起来的分区,如 gz、tee、logo几个分区
  • FastBoot_Erase:fastboot是否可以擦除,像super、userdata通常配置为yes,即可以通过恢复出厂设置擦除?
  • FastBoot_Download:fastboot是否可以下载
  • Operation_Type:操作类型。AUTO就会根据对齐进行调整大小;BOOTLOADERS表示设备启动镜像(例如preloader分区);INVISIBLE不可见不用刷机只定义范围;PROTECTED/BINREGION/RESERVED表示需要保留的分区,固件升级Fireware upgrade会备份数据,只有格式化刷机才会擦除
  • Addr_Align:对齐方式,为写保护
  • Delete_Rule:是否需要这个分区,通过判断条件来确定是否需要这个分区。例如le(PRODUCT_SHIPPING_API_LEVEL,30)表示PRODUCT_SHIPPING_API_LEVEL小于30就会删除此分区

2、MTK平台刷机配置表

MTK平台的刷机工具Flash Tool工具加载MTXXXX_Android_scatter.txt文件,改工具根据txt文件里面定义的标准格式解析如下信息:分区名称,起始地址和结束地址,镜像的路径来进行刷机。scatter.txt文件的内容者根据第一节分区表配置而来。

其原理就是build ptgen阶段会解析默认分区表文件partition_table_MT65XX.xls并生成相关的partition .c/.h文件和flash download使用的scatter file。他的格式如下:

如上Flash Tools工具显示的需要下载的分区和镜像文件也和分区表中配置的Download与Download File字段一致

3、MTK平台分区表配置不生效

在某些时候分区配置表与手机实际大小并不一致,或者分区表配置修改了后没有生效,如下两个FQA回答了可能的原因:FAQ11445   FAQ21282

4、Super分区的研究

Super分区也叫做dynamic动态分区,动态分区是Android的用户空间分区系统,在Android R版本开始引入,目的是为了解决system和vender等分区size不能动态调整的问题。例如物理分区表配置固定size后,如果软件版本对system,verdor分区size需要频繁调整时,需要修改物理分区表和重新编译gpt表,使用起来不是很便利。

我们可以通过命令adb shell lpdump来输出打印super分区的具体内容:

$ lpdump
Slot 0:
Metadata version: 10.2
Metadata size: 1000 bytes
Metadata max size: 65536 bytes
Metadata slot count: 3
Header flags: virtual_ab_device
Partition table:
------------------------Name: product_aGroup: main_aAttributes: readonlyExtents:0 .. 253743 linear super 2048
------------------------Name: product_bGroup: main_bAttributes: readonlyExtents:
------------------------Name: system_aGroup: main_aAttributes: readonlyExtents:0 .. 1410975 linear super 256000
------------------------Name: system_bGroup: main_bAttributes: readonlyExtents:0 .. 15647 linear super 1667072
------------------------Name: system_ext_aGroup: main_aAttributes: readonlyExtents:0 .. 700503 linear super 1683456
------------------------Name: system_ext_bGroup: main_bAttributes: readonlyExtents:
------------------------Name: vendor_aGroup: main_aAttributes: readonlyExtents:0 .. 430351 linear super 2385920
------------------------Name: vendor_bGroup: main_bAttributes: readonlyExtents:
------------------------
Super partition layout:
------------------------
super: 2048 .. 255792: product_a (253744 sectors)
super: 256000 .. 1666976: system_a (1410976 sectors)
super: 1667072 .. 1682720: system_b (15648 sectors)
super: 1683456 .. 2383960: system_ext_a (700504 sectors)
super: 2385920 .. 2816272: vendor_a (430352 sectors)
------------------------
Block device table:
------------------------Partition name: superFirst sector: 2048Size: 2147483648 bytesFlags: none
------------------------
Group table:
------------------------Name: defaultMaximum size: 0 bytesFlags: none
------------------------Name: main_aMaximum size: 2145386496 bytesFlags: none
------------------------Name: main_bMaximum size: 2145386496 bytesFlags: none
------------------------

其中重点需要关注的内容如下:

1)Super partition layout

此部分记录了super分区从第一个扇区到最后一个扇区的内容

super: 2048 .. 255792: product_a (253744 sectors) 

         ---->super的第2048扇区到255792扇区是product_a,总共占用了253744个扇区 
super: 256000 .. 1666976: system_a (1410976 sectors)

         ---->super的第256000扇区到1666976扇区是system_a,总共占用了1410976个扇区
super: 1667072 .. 1682720: system_b (15648 sectors)

         ---->super的第1667072扇区到1682720扇区是system_b,总共占用了15648个扇区
super: 1683456 .. 2383960: system_ext_a (700504 sectors)

         ---->super的第1683456 扇区到2383960扇区是system_ext,总共占用了700504个扇区
super: 2385920 .. 2816272: vendor_a (430352 sectors)

        ---->super的第2385920扇区到2816272扇区是vendor_a,总共占用了430352个扇区

注意:单位为扇区,因此需要转换为MB,公式为sectors * 512 /1024/1024

即这段内容表明super分区按照顺序包含如下几个分区:product_a占用124MB,system_a占用689MB,system_b占用8MB,system_ext_a占用342MB,vendor_a占用210MB

2)Block device table

此部分记录了super分区的总大小,即2147483648 /1024  /1024 = 2048MB,此值应该和上面的super分区表的值对应,如果不对应,需要check第三节的内容,是否存在定制

  Partition name: super
  First sector: 2048
  Size: 2147483648 bytes
  Flags: none

二、高通平台

三、展锐平台

四、相关案例

1、Super分区不够导致编译报错

问题背景:此项目需要集成google mainline和google gms包,集成之后导致super分区不够编译失败,报错日志如下:

问题分析:根据如上日志进行解读,在编译super的时候,produc_a先申请了1795MB,system_a申请了749MB,system_b申请了54MB,system_ext_a需要428MB,最后vendor_a需要申请226MB,但因为空间不够无法申请。

前后对比:因为上面日志是加了google mainline gms包之后的,加之前这块的编译日志如下,即product_a从129MB飙升到1795MB,挤压super空间,导致最后的vendor_a分区没有足够的大小。

解决思路:从日志已经很明确是super分区不够,从日志中显示super分区为3244949504b即大约3094MB,从前面的produc_a+system_a+system_b+system_ext_a+vendor_a = 3252MB即,刚好差200多M。查看分区表配置信息如下:

通过adb shell lpdump之前的机器,super各个分区的大小和这个编译日志能够匹配的上,super大小和编译日志里面记录的'super:3244949504'一致,和分区表配置的4G完全不一样,最后通过MTK的FQA,找到BoardConfig.mk中对super分区有客制化定义

经过此案例以及可疑点我们可以得出如下几个结论:

经验一:在MTK平台针对分区表配置不生效或者跟实际对不上的情况,需要搜索是否存在BOARD_MTK_XXX_SIZE_KB的客制化。
结论一:针对super分区应该只关心super分区总大小,其内部各个子分区大小不用根据实际情况来进行调整,例如product_a实际使用了1.7G,但是分区表配置的256MB并没有导致什么报错或者异常,system_a和system_b分区在分区表配置了3G,即这两部分加起来都超过super配置的4G了,但同样也没有存在什么报错或者异常。其原因为super分区内部根据各个实际大小来进行动态调整。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库类型介绍

1. 关系型数据库(Relational Database, RDBMS): • 定义:基于关系模型(即表格)存储数据,数据之间通过外键等关系相互关联。 • 特点:支持复杂的SQL查询,数据一致性和完整…

当产业经济插上“数字羽翼”,魔珐有言AIGC“3D视频创作大赛”成功举办

随着AI技术的飞速发展,3D数字人技术已成为驱动各行各业转型升级的重要力量。在这一背景下,2024山东3D数字人视频创作大赛应运而生,并在一番激烈的角逐后圆满落幕,为科技与创意的交融写下浓墨重彩的一笔。 11月20日,一…

经济增长初步

1.人均产出 人均产出,通常指的是一个国家、地区或组织在一定时期内,每个劳动人口平均创造的生产总值。它是衡量一个地区或国家经济效率和劳动生产率的重要指标。具体来说,人均产出可以通过以下公式计算: 人均产出总产出/劳动人口…

图像增强夜视仪行业全面而深入的分析

图像增强夜视设备(I2ND 或 INVD)是一种增强监视、安全和军事应用的微光可见度的技术。 它允许用户在非常弱的光线甚至完全黑暗的条件下看到东西。 一、市场研究 1. 市场规模与增长趋势 据QYResearch调研团队最新报告,预计2029年全球图像增强…

002 MATLAB语言基础

01 变量命名规则 变量名只能由字母、数字和下划线组成,且必须以字母开头; 变量名区分字母的大小写; 变量名不能超过最大长度限制; 关键字不能作为变量名,如for、end和if等; 注意:存变量命名时…

greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用

简略图 greater<>()(a, b) a > b 返回true&#xff0c;反之返回false less<>()(a, b) a < b 返回true&#xff0c;反之返回false 在cmp中使用&#xff08;正着理解&#xff09; 规则返回true时a在前&#xff0c;反之b在前 在priority_queue中使用 &#xff…

冲破AI 浪潮冲击下的 迷茫与焦虑

在这个科技日新月异的时代&#xff0c;人工智能如汹涌浪潮般席卷而来&#xff0c;不断改变我们的生活。你是否对 AI 充满好奇&#xff0c;却不知它将如何改变你的工作与生活&#xff1f;又是否会在 AI 浪潮的冲击下陷入迷茫与焦虑&#xff1f;《AI 时代&#xff1a;弯道超车新思…

嵌入式LVGL自定义纯数字键盘

嵌入式LVGL自定义纯数字键盘 一、前言二、设置自定义数字键盘三、使用一、前言 嵌入式UI项目中有时候会使用到纯数字密码的需求,所以打算使用LVGL构建自定义的纯数字键盘。 二、设置自定义数字键盘 参考这个文章,以LV_KEYBOARD_MODE_USER_1为例,增加一个数字键盘,如下图所…

第6篇 寻找最大数___ARM C语言程序<二>

Q&#xff1a;如何创建基于ARM处理器的C语言程序寻找一组数据列表中的最大数呢&#xff1f; A&#xff1a;和基于Nios II处理器的C语言程序一样&#xff0c;在ARM处理器C语言中也使用printf库函数显示程序的运行结果&#xff0c;若要调用printf函数&#xff0c;必须在C程序中包…

【11.22更新】Win11 24H2正式版:26100.2454镜像一键获取!

今日&#xff0c;系统之家小编就给大家带来2024年11月最新推出的Windows11 24H2正式版系统&#xff0c;该版本系统包含最新可选更新补丁KB5046740&#xff0c;用户安装后版本号升至26100.2454。更新此系统后&#xff0c;用户就能通过文件资源管理器和桌面上的右键菜单将内容分享…

python小课堂(一)

基础语法 1 常量和表达式2 变量和类型2.1 变量是什么2.2 变量语法 3 变量的类型3.1 动态类型特性 4 注释4.1注释是什么 5 输入输出5.1 print的介绍5.2 input 6 运算符6.1 算术运算符在这里插入图片描述6.2 关系运算符6.3 逻辑运算符6.4赋值运算符 1 常量和表达式 在print()中可…

区块链网络示意图;Aura共识和Grandpa共识(BFT共识)

目录 区块链网络示意图 Aura共识和Grandpa共识(BFT共识) Aura共识 Grandpa共识(BFT共识) Aura与Grandpa的结合 区块链网络示意图 CP Blockchain:这是中央处理区块链(或可能指某种特定的处理单元区块链)的缩写。它可能代表了该区块链网络的主要处理或存储单元。在这…

springboot整合hive

springboot整合hive pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

跨视角差异-依赖网络用于体积医学图像分割|文献速递-生成式模型与transformer在医学影像中的应用

Title 题目 Cross-view discrepancy-dependency network for volumetric medical imagesegmentation 跨视角差异-依赖网络用于体积医学图像分割 01 文献速递介绍 医学图像分割旨在从原始图像中分离出受试者的解剖结构&#xff08;例如器官和肿瘤&#xff09;&#xff0c;并…

WebApis学习笔记,第二节:高级语法

WebApis学习笔记&#xff0c;第二节&#xff1a;高级语法 一、JS组成 我们再回顾一下JS的组成&#xff1a;ECMAScript: 规定了js基础语法核心知识。 比如&#xff1a;变量、分支语句、循环语句、对象等等Web APIs : DOM 文档对象模型&#xff0c; 定义了一套操作HTML文档的AP…

二叉树路径相关算法题|带权路径长度WPL|最长路径长度|直径长度|到叶节点路径|深度|到某节点的路径非递归(C)

带权路径长度WPL 二叉树的带权路径长度(WPL)是二叉树所有叶节点的带权路径长度之和&#xff0c;给定一棵二叉树T&#xff0c;采用二叉链表存储&#xff0c;节点结构为 其中叶节点的weight域保存该节点的非负权值&#xff0c;设root为指向T的根节点的指针&#xff0c;设计求W…

飞桨大模型PaddleOCR

一、新建项目PaddleOCRProject 二、查看开源 pip install paddlepaddle pip install paddleocr指定镜像源下载才快&#xff1a; pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple 三…

Python创建虚拟环境报错:Error: Command......

文章目录 环境说明问题描述原因分析解决方法 环境说明 系统 # lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammyPython版本 # python3 --version Python 3.13.0问题描…

Linux INPUT 子系统详解

目录 一、引言 二、INPUT 子系统的架构 1.输入设备驱动层 2.核心层 3.事件处理层 三、INPUT 子系统的工作原理 1.设备注册与初始化 2.事件产生与提交 3.事件分发与处理 4.应用程序访问输入设备 四、使用 INPUT 子系统进行设备驱动开发 1.编写输入设备驱动程序 2.注…

sql注入报错分享(mssql+mysql)

mysql mysql的报错内容比较多 网上也有比较多的 这里重复的就不多介绍了。一笔带过 溢出类 bigint 当超过mysql的整形的时候&#xff0c;就会导致溢出&#xff0c;mysql可能会将错误信息带出。这里user()是字母默认为0 取反以后1可能就会导致异常。 报错特征 BIGINT UNSIG…