当前位置: 首页 > news >正文

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分区内部根据各个实际大小来进行动态调整。

相关文章:

Android 分区相关介绍

目录 一、MTK平台 1、MTK平台分区表配置 2、MTK平台刷机配置表 3、MTK平台分区表配置不生效 4、Super分区的研究 1)Super partition layout 2)Block device table 二、高通平台 三、展锐平台 四、相关案例 1、Super分区不够导致编译报错 经验…...

JMeter监听器与压测监控之 InfluxDB

1. 简介 在本文中,我们将介绍如何在 Kali Linux 上通过 Docker 安装 InfluxDB,并使用 JMeter 对其进行性能监控。InfluxDB 是一个高性能的时序数据库,而 JMeter 是一个开源的性能测试工具,可以用于对各种服务进行负载测试和性能监…...

信息安全管理与评估赛项(网络安全)--应急响应专项训练

web1 题目来源:https://mp.weixin.qq.com/s/89IS3jPePjBHFKPXnGmKfA 题目 1.攻击者的shell密码2.攻击者的IP地址3.攻击者的隐藏账户名称4.攻击者挖矿程序的矿池域名(仅域名)5.有实力的可以尝试着修复漏洞靶机 用户:administrator密码:Zgsfadmin.com题解 攻击者…...

ElasticSearch学习篇18_《检索技术核心20讲》LevelDB设计思想

目录 一些常见的设计思想以及基于LSM树的LevelDB是如何利用这些设计思想优化存储、检索效率的。 几种常见的设计思想 索引和数据分离减少磁盘IO读写分离分层思想 LevelDB的设计思想 读写分离设计分层设计与延迟合并LRU缓存加速检索 几种常见设计思想 索引与数据分离 索引…...

使用 FFmpeg 提取音频的详细指南

FFmpeg 是一个开源的多媒体处理工具,支持视频、音频的编码、解码、转换等多种功能。通过 FFmpeg,提取视频中的音频并保存为各种格式非常简单和高效。这在音视频剪辑、媒体处理、转码等场景中具有广泛的应用。 本文将详细讲解如何使用 FFmpeg 提取音频&a…...

中国省级新质生产力发展指数数据(任宇新版本)2010-2023年

一、测算方式:参考C刊《财经理论与实践》任宇新(2024)老师的研究,新质生产力以劳动者劳动资料劳动对象及其优化组合的质变为 基本内涵,借 鉴 王 珏 和 王 荣 基 的 做 法构建新质生产力发展水平评价指标体系如下所示&a…...

C++设计模式:建造者模式(Builder) 房屋建造案例

什么是建造者模式? 建造者模式是一种创建型设计模式,它用于一步步地构建一个复杂对象,同时将对象的构建过程与它的表示分离开。简单来说: 它将复杂对象的“建造步骤”分成多部分,让我们可以灵活地控制这些步骤。通过…...

Python 快速入门(上篇)❖ Python基础知识

Python 基础知识 Python安装**运行第一个程序:基本数据类型算术运算符变量赋值操作符转义符获取用户输入综合案例:简单计算器实现Python安装** Linux安装: yum install python36 -y或者编译安装指定版本:https://www.python.org/downloads/source/ wget https://www.pyt…...

string接口的模拟实现

文章目录 一. string底层逻辑演示声明和定义分开 二. size()三. operator[]四. 迭代器四. const迭代器五. 预留空间(reserve)六. 尾插一个字符push_back七. 尾插一个字符串append八. operator九. operator 一. string底层逻辑 (1)为了和库里面…...

sed使用扩展正则表达式时, -i 要写在 -r 或 -E 的后面

sed使用扩展正则表达式时, -i 要写在 -r 或 -E 的后面 前言 -r 等效 -E , 启用扩展正则表达式 -E是新叫法,更统一,能增强可移植性 , 但老系统,比如 CentOS-7 的 sed 只能用 -r ### Ubuntu24.04-E, -r, --regexp-extendeduse extended regular expressions in the script(fo…...

Verilog HDL可综合与不可综合语句

目录 什么是逻辑综合 可综合语句 不可综合语句 逻辑综合建模建议 综合流程 什么是逻辑综合 所谓逻辑综合就是在标准单元库和特定的设计约束的基础上,把设计的高层次描述转换成优化的门级网表的过程。 标准单元库(工艺库)可以包含简单的…...

tomcat 后台部署 war 包 getshell

1. tomcat 后台部署 war 包 getshell 首先进入该漏洞的文件目录 使用docker启动靶场环境 查看端口的开放情况 访问靶场:192.168.187.135:8080 访问靶机地址 http://192.168.187.135:8080/manager/html Tomcat 默认页面登录管理就在 manager/html 下&#xff0c…...

网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操解析1

文章目录 1、RAID6配置指南(大致步骤)2、注意事项3、截图和视频 网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操 RAID6是一种在存储系统中实现数据冗余和容错的技术,其最多可以容忍两块磁盘同时损坏而不造成数据丢失。RAID…...

前端面试题大汇总:React 篇

基础知识 1. 什么是 React?它的主要特点是什么? React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发并维护。它主要用于构建单页应用程序(SPA)和复杂的用户界面。React 的主要特点包括: 组件…...

【prism】遇到一个坑,分享!

背景 我通用prism的方式写了一个弹窗,弹窗绑定一个 Loaded 事件,但是Loaded事件一直不触发!!! 具体过程 我的loaded事件也是通过命令的方式绑定的: <i:Interaction.Triggers><i:EventTrigger EventName="Loaded...

Python+Selenium+Pytest+Allure+ Jenkins webUI自动化框架

Python+Selenium+Pytest+Allure+ Jenkins webUI自动化框架 WebUI接口框架使用的工具...

智象未来(HiDream.ai)技术赋能,开启AR眼镜消费时代

Rokid Jungle 2024合作伙伴暨新品发布会于近日隆重举行&#xff0c;标志着AR眼镜跑步进入消费时代&#xff0c;更预示着ARAI技术融合的新篇章。智象未来&#xff08;HiDream.ai&#xff09;&#xff0c;作为多模态生成式人工智能技术的领跑者&#xff0c;与Rokid的深度合作&…...

element dialog 2层弹窗数据同步问题

注意&#xff1a;本帖为公开技术贴&#xff0c;不得用做任何商业用途 element dialog 2层弹窗数据同步问题 如果嵌套dialog&#xff0c;也就是多层dialog嵌套 2个input&#xff0c;key用同样的值 会导致内外2层dialog&#xff0c;用相同key值的input会数据同步 原因如下&a…...

向量数据库FAISS之五:原理(LSH、PQ、HNSW、IVF)

1.Locality Sensitive Hashing (LSH) 使用 Shingling MinHashing 进行查找 左侧是字典&#xff0c;右侧是 LSH。目的是把足够相似的索引放在同一个桶内。 LSH 有很多的版本&#xff0c;很灵活&#xff0c;这里先介绍第一个版本&#xff0c;也是原始版本 Shingling one-hot …...

要素市场与收入分配

生产要素与家庭收入 生产要素&#xff1a;企业用于生产产品或劳务的最初投入&#xff0c;主要分为三类&#xff1a; 劳动&#xff1a;工人的时间和技能 土地&#xff1a;代指自然资源 资本&#xff1a;指的是货币形式的资本&#xff0c;可以供企业用来购置厂房、设备等资本品…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...