Android 14 super分区修改记录

一、修改内容以及遇到的问题:

前段时间遇到一个问题,修改super分区大小后,导致原生设置中进行系统更新时无法下载OTA包,当时的报错是这样的:

该super分区的修改是在AML方案基础上进行的,由于这个项目包含了gms套件所以在gpt分区表会多一个,首先给出修改路径:

device\amlogic\t7_an400\BoardConfig.mk

device\amlogic\t7_an400\part_table_5_15.txt

device\amlogic\t7_an400\part_table_5_15_gms.txt

当时修改BoardConfig.mk的地方如下,将super分区扩展至8g:

ifeq ($(PRODUCT_USE_DYNAMIC_PARTITIONS), true)
ifeq ($(AB_OTA_UPDATER),true)
ifeq ($(TARGET_BUILD_KERNEL_VERSION),4.9)
BOARD_SUPER_PARTITION_SIZE := 8589934592
else
ifeq ($(TARGET_BUILD_KERNEL_VERSION),5.15)
ifneq ($(TARGET_BUILD_GMS), true)
ifeq ($(LAUNCH_VERSION),U)
BOARD_SUPER_PARTITION_SIZE := 8589934592
else
BOARD_SUPER_PARTITION_SIZE := 8589934592
endif # endif for LAUNCH_VERSION
else
BOARD_SUPER_PARTITION_SIZE := 8589934592
endif # endif for gms
else
BOARD_SUPER_PARTITION_SIZE := 8589934592
endif # endif for kernel 5.15
endif # endif for kernel 4.9
else
BOARD_SUPER_PARTITION_SIZE := 8589934592
endif #endif for ota updater
BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT := true

BOARD_SUPER_PARTITION_GROUPS := amlogic_dynamic_partitions

ifeq ($(AB_OTA_UPDATER),true)
ifeq ($(TARGET_BUILD_KERNEL_VERSION),4.9)
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8589934592
else
ifeq ($(TARGET_BUILD_KERNEL_VERSION),5.15)
ifneq ($(TARGET_BUILD_GMS), true)
ifeq ($(LAUNCH_VERSION),U)
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8589934592
else
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8589934592
endif
else
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8589934592
endif # endif for gms
else
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8589934592
endif #endif for kernel 5.15
endif
else
ifeq ($(LAUNCH_ON_S),false)
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8589934592
else
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8589934592
endif
endif

需要修改的地方是BOARD_SUPER_PARTITION_SIZE 和BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE这两个变量,当时的修改是将这两个变量的值全设置成8G,换算成字节数为8589934592。

然后在part_table_5_15.txt和part_table_5_15_gms.txt文件中,修改如下:

 修改完成后就会出现OTA升级时下载失败,根据aml开发人员的回复如下:

二、对应问题的解决方案 

所以马上按照要求进行修改,由于修改时我是将BOARD_SUPER_PARTITION_SIZE 和BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE的大小改成一样了,所以只需要将 BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE的大小再减去10MB字节数即可:

ifeq ($(PRODUCT_USE_DYNAMIC_PARTITIONS), true)
ifeq ($(AB_OTA_UPDATER),true)
ifeq ($(TARGET_BUILD_KERNEL_VERSION),4.9)
BOARD_SUPER_PARTITION_SIZE := 8589934592
else
ifeq ($(TARGET_BUILD_KERNEL_VERSION),5.15)
ifneq ($(TARGET_BUILD_GMS), true)
ifeq ($(LAUNCH_VERSION),U)
BOARD_SUPER_PARTITION_SIZE := 8589934592
else
BOARD_SUPER_PARTITION_SIZE := 8589934592
endif # endif for LAUNCH_VERSION
else
BOARD_SUPER_PARTITION_SIZE := 8589934592
endif # endif for gms
else
BOARD_SUPER_PARTITION_SIZE := 8589934592
endif # endif for kernel 5.15
endif # endif for kernel 4.9
else
BOARD_SUPER_PARTITION_SIZE := 8589934592
endif #endif for ota updater
BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT := true

BOARD_SUPER_PARTITION_GROUPS := amlogic_dynamic_partitions

#dynamic partition size need less than super partition size
#reserve 10M
ifeq ($(AB_OTA_UPDATER),true)
ifeq ($(TARGET_BUILD_KERNEL_VERSION),4.9)
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8579448832
else
ifeq ($(TARGET_BUILD_KERNEL_VERSION),5.15)
ifneq ($(TARGET_BUILD_GMS), true)
ifeq ($(LAUNCH_VERSION),U)
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8579448832
else
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8579448832
endif
else
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8579448832
endif # endif for gms
else
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8579448832
endif #endif for kernel 5.15
endif
else
ifeq ($(LAUNCH_ON_S),false)
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8579448832
else
BOARD_AMLOGIC_DYNAMIC_PARTITIONS_SIZE := 8579448832
endif
endif

修改了super分区可以是需要全编的,也可以按照aml说的,将out目录下的gpt.bin文件删除,再编译验证,也可以make clean&&make installclean清除后再编译,这样问题就得到解决了。

三、关于super分区

Android中的super分区(也称为动态分区,Dynamic Partition)是自Android 10(R版本)引入的重要功能,旨在解决传统分区管理中systemvendor等分区大小固定导致的灵活性问题。

1. Super分区的定义与背景
  • 目的:传统分区需在物理分区表中固定子分区(如systemvendor)大小,频繁调整需重新编译分区表,效率低下。Super分区通过将多个子分区“打包”到单个动态分区中,实现子分区大小的动态调整。

  • 结构:Super分区包含多个逻辑子分区(如systemvendorproduct等),并通过元数据(metadata)记录各子分区的名称、块范围及属性

 四、查看super分区的剩余空间

1.查看系统当前super分区的大小:

    用lpdump命令:

------------------------
  Name: amlogic_dynamic_partitions_a
  Maximum size: 8589934592 bytes
  Flags: none
------------------------

得到当前动态分区A分区总大小8589934592 byte,也就是8GB

2.查看已经使用的系统分区容量

使用df命令查看super分区的使用情况:

130|console:/ # df
Filesystem            1K-blocks    Used Available Use% Mounted on
tmpfs                   4021156    1488   4019668   1% /dev
tmpfs                   4021156       0   4021156   0% /mnt
/dev/block/mmcblk0p24     63488   34964     28524  56% /metadata
/dev/block/dm-0         1283824 1283824         0 100% /
/dev/block/dm-4          143084  143084         0 100% /system_ext
/dev/block/dm-6             632     632         0 100% /system_dlkm
/dev/block/dm-1          199480  199480         0 100% /vendor
/dev/block/dm-2         1243068 1243068         0 100% /product
/dev/block/dm-3             420     420         0 100% /odm
/dev/block/dm-5          105836  105836         0 100% /vendor_dlkm
/dev/block/dm-7              60      60         0 100% /odm_dlkm
/dev/block/mmcblk0p18     24688      24     24664   1% /oem
tmpfs                   4021668      28   4021640   1% /apex
tmpfs                   4021668     828   4020840   1% /linkerconfig
/dev/block/loop3            760     732        28  97% /apex/com.android.tzdata@341510070
/dev/block/loop2          35780   35748        32 100% /apex/com.android.i18n@1
/dev/block/loop0          25860   25812        48 100% /apex/com.android.vndk.v34@1
/dev/block/loop1           7096    7056        40 100% /apex/com.android.runtime@1
tmpfs                   4021668       0   4021668   0% /odm/lib/ms12
/dev/block/mmcblk0p16     11248   10116      1132  90% /mnt/vendor/odm_ext
/dev/block/mmcblk0p15     10224    3836      6388  38% /mnt/vendor/param
/dev/block/mmcblk0p9      24560      28     24532   1% /mnt/vendor/tee
/dev/block/mmcblk0p4       8164      44      8120   1% /mnt/vendor/factory
/dev/block/dm-43      237171712 3240540 233931172   2% /data
tmpfs                   4021668       0   4021668   0% /data_mirror
/dev/fuse             237171712 3240540 233931172   2% /mnt/user/0/emulated
console:/ # 
 3.分析输出信息
  • 动态子分区(dm-*

        从输出中可以看到多个逻辑卷(dm-0dm-1dm-2 等)挂载到不同路径(如 /system/vendor/product),这些均属于 Super 分区的子分区。

  • 每个子分区的使用情况

         所有子分区的 Use% 列均显示 100%,表明每个子分区已完全占用其分配的逻辑空间(例 如 /system 的 dm-0 使用了 1283824 1K-blocks)

2. Super分区的总使用量计算

Super分区的总使用量需统计所有子分区的已用空间之和,步骤如下:

1.提取所有子分区的 Used 值(单位:1K-blocks)

/(dm-0):1283824 KB

/system_ext(dm-4):143084 KB

/system_dlkm(dm-6):632 KB

/vendor(dm-1):199480 KB

/product(dm-2):1243068 KB

/odm(dm-3):420 KB

/vendor_dlkm(dm-5):105836 KB

/odm_dlkm(dm-7):60 KB
  2. 计算总和:
1283824 + 143084 + 632 + 199480 + 1,243068 + 420 + 105836 + 60 = 2976404 KB
3.转化为字节:
2976404 KB × 1024 = 3047837696 字节(约 2.84 GB)

根据上面内容,已经给super分区分配了8G的空间,因此剩余的空间显而易见,因此往系统分区内置东西最多5.16G,这5.16G是压缩过的文件大小,如果你放的原始文件可以被压缩,那就可能超过5.16G都没问题。

8G - 2.84G = 5.16G

怎么看df命令中的哪些分区是属于动态分区:

   a.先确定你的系统是动态分区,getprop ro.boot.dynamic_partitions返回true表示使用了动态分区;

   b.通过lpdump命令可以看出哪些分区是super分区的:

Partition table:
------------------------
  Name: system_a
  Group: amlogic_dynamic_partitions_a
  Attributes: readonly
  Extents:
    0 .. 2616799 linear super 2048
------------------------
  Name: system_b
  Group: amlogic_dynamic_partitions_b
  Attributes: readonly
  Extents:
------------------------
  Name: vendor_a
  Group: amlogic_dynamic_partitions_a
  Attributes: readonly
  Extents:
    0 .. 406743 linear super 2619392
------------------------
  Name: vendor_b
  Group: amlogic_dynamic_partitions_b
  Attributes: readonly
  Extents:
------------------------
  Name: product_a
  Group: amlogic_dynamic_partitions_a
  Attributes: readonly
  Extents:
    0 .. 2533743 linear super 3026944
------------------------
  Name: product_b
  Group: amlogic_dynamic_partitions_b
  Attributes: readonly
  Extents:
------------------------
  Name: odm_a
  Group: amlogic_dynamic_partitions_a
  Attributes: readonly
  Extents:
    0 .. 1015 linear super 5562368
------------------------
  Name: odm_b
  Group: amlogic_dynamic_partitions_b
  Attributes: readonly
  Extents:
------------------------
  Name: system_ext_a
  Group: amlogic_dynamic_partitions_a
  Attributes: readonly
  Extents:
    0 .. 291807 linear super 5564416
------------------------
  Name: system_ext_b
  Group: amlogic_dynamic_partitions_b
  Attributes: readonly
  Extents:
------------------------
  Name: vendor_dlkm_a
  Group: amlogic_dynamic_partitions_a
  Attributes: readonly
  Extents:
    0 .. 215879 linear super 5857280
------------------------
  Name: vendor_dlkm_b
  Group: amlogic_dynamic_partitions_b
  Attributes: readonly
  Extents:
------------------------
  Name: system_dlkm_a
  Group: amlogic_dynamic_partitions_a
  Attributes: readonly
  Extents:
    0 .. 1455 linear super 6074368
------------------------
  Name: system_dlkm_b
  Group: amlogic_dynamic_partitions_b
  Attributes: readonly
  Extents:
------------------------
  Name: odm_dlkm_a
  Group: amlogic_dynamic_partitions_a
  Attributes: readonly
  Extents:
    0 .. 679 linear super 6076416
------------------------
  Name: odm_dlkm_b
  Group: amlogic_dynamic_partitions_b
  Attributes: readonly
  Extents:

这列出的是super list分区集合,都是super分区的子分区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值