一、修改内容以及遇到的问题:
前段时间遇到一个问题,修改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版本)引入的重要功能,旨在解决传统分区管理中system
、vendor
等分区大小固定导致的灵活性问题。
1. Super分区的定义与背景
-
目的:传统分区需在物理分区表中固定子分区(如
system
、vendor
)大小,频繁调整需重新编译分区表,效率低下。Super分区通过将多个子分区“打包”到单个动态分区中,实现子分区大小的动态调整。 -
结构:Super分区包含多个逻辑子分区(如
system
、vendor
、product
等),并通过元数据(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-0
、dm-1
、dm-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分区的子分区。