news 2026/6/15 8:21:26

Android动态分区实战:从BoardConfig.mk到super分区的完整配置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android动态分区实战:从BoardConfig.mk到super分区的完整配置指南

1. 动态分区基础概念

动态分区是Android 10引入的重要特性,它彻底改变了传统Android系统的分区管理方式。简单来说,动态分区允许系统在OTA更新时动态调整分区大小,而不再需要预先为每个分区分配固定空间。这就像给你的手机存储空间装上了"弹性伸缩"功能,系统可以根据实际需求灵活调配空间。

传统分区方案中,每个分区(如system、vendor等)都有固定大小。这会导致两个典型问题:一是分区空间可能浪费(比如system分区有大量闲置空间但vendor分区已满),二是OTA更新时可能因为空间不足而失败。动态分区通过引入super分区解决了这些问题,它将多个分区合并到一个大的存储池中,由系统动态管理。

动态分区的核心组件包括:

  • super分区:所有动态分区的容器,相当于一个"超级大仓库"
  • 分区组:逻辑上的分区集合,用于限制组内分区总大小
  • 元数据:记录分区布局和属性的信息

2. BoardConfig.mk关键配置

BoardConfig.mk是动态分区配置的核心文件,位于device/<厂商>/<设备名>/目录下。下面我们详细解析关键配置项:

2.1 基础开关配置

首先需要启用动态分区功能:

# 启用动态分区 PRODUCT_USE_DYNAMIC_PARTITIONS := true # 如果是升级现有设备到动态分区,还需要设置 PRODUCT_RETROFIT_DYNAMIC_PARTITIONS := true

2.2 super分区设置

super分区是整个动态分区的基础,需要指定其总大小:

# super分区总大小(单位:字节) BOARD_SUPER_PARTITION_SIZE := 12884901888 # 12GB # 元数据存储设备(通常是system分区) BOARD_SUPER_PARTITION_METADATA_DEVICE := system

2.3 分区组配置

动态分区通过分组管理,每个组有大小限制和包含的分区列表:

# 定义分区组 BOARD_SUPER_PARTITION_GROUPS := my_dynamic_partitions # 设置组大小 BOARD_MY_DYNAMIC_PARTITIONS_SIZE := 6442450944 # 6GB # 组内包含的分区 BOARD_MY_DYNAMIC_PARTITIONS_PARTITION_LIST := system vendor product

对于更复杂的设备,可以定义多个分区组:

BOARD_SUPER_PARTITION_GROUPS := group_a group_b BOARD_GROUP_A_SIZE := 4831838208 BOARD_GROUP_A_PARTITION_LIST := system product_services BOARD_GROUP_B_SIZE := 1610612736 BOARD_GROUP_B_PARTITION_LIST := vendor product odm

3. 动态分区实战配置

3.1 新设备配置流程

对于全新支持动态分区的设备,配置步骤如下:

  1. 创建super分区:在分区表中添加super分区,移除system/vendor等独立分区
  2. 设置分区对齐:确保super分区与I/O请求大小对齐
# 检查设备最小I/O大小 cat /sys/block/sda/queue/minimum_io_size # 检查分区对齐偏移 cat /sys/block/sda/sda17/alignment_offset
  1. 配置device.mk
PRODUCT_USE_DYNAMIC_PARTITIONS := true
  1. 配置BoardConfig.mk:如前面章节所示设置分区组和大小

3.2 现有设备升级配置

将现有设备升级到动态分区需要额外配置:

# 指定用于存储动态分区的块设备 BOARD_SUPER_PARTITION_BLOCK_DEVICES := system vendor # 设置每个块设备的大小 BOARD_SUPER_PARTITION_SYSTEM_DEVICE_SIZE := 3221225472 # 3GB BOARD_SUPER_PARTITION_VENDOR_DEVICE_SIZE := 1073741824 # 1GB # 计算super分区总大小 BOARD_SUPER_PARTITION_SIZE := 4294967296 # 4GB

4. 分区大小优化技巧

动态分区的一个主要优势是可以优化存储空间使用:

  1. 启用块级去重:减少重复数据占用空间
BOARD_EXT4_SHARE_DUP_BLOCKS := true
  1. 自动最小化分区:构建系统会自动计算最小所需空间
# 系统会自动计算最小分区大小 # 不需要设置BOARD_SYSTEMIMAGE_PARTITION_SIZE
  1. 手动保留空间(非必要不建议):
# 为product分区保留50MB空间 BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE := 52428800
  1. 大小计算原则
  • A/B设备:组大小 ≤ (BOARD_SUPER_PARTITION_SIZE / 2) - 4MB
  • 非A/B设备:组大小 ≤ BOARD_SUPER_PARTITION_SIZE - 4MB

5. 常见问题解决

5.1 编译错误排查

  1. 分区大小超出限制
Error: Dynamic partition size is too large

解决方案:检查分区组大小计算,确保留有足够开销(建议4MB)

  1. 冲突配置
Error: BOARD_BUILD_SYSTEM_ROOT_IMAGE cannot be true with dynamic partitions

解决方案:动态分区不能与system-as-root同时启用

5.2 运行时问题

  1. adb remount失败: 动态分区下需要启用overlayfs:
# 在BoardConfig.mk中启用 BOARD_USES_OVERLAYFS := true
  1. 分区挂载失败: 检查fstab配置,确保包含必要标志:
# 示例fstab条目 system /system ext4 ro,barrier=1 wait,slotselect,avb=vbmeta,logical,first_stage_mount
  1. AVB验证失败: 动态分区需要使用AVB 2.0,并配置vbmeta分区:
BOARD_AVB_VBMETA_SYSTEM := system BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA2048

6. 高级配置技巧

6.1 多槽位(A/B)设备配置

对于支持无缝更新的A/B设备,需要特别注意:

# 确保组大小不超过super分区的一半 BOARD_GOOGLE_DYNAMIC_PARTITIONS_SIZE := 6442450944 # 6GB BOARD_SUPER_PARTITION_SIZE := 12884901888 # 12GB # OTA更新分区列表 AB_OTA_PARTITIONS += system vendor product

6.2 内核命令行配置

动态分区设备需要添加boot_devices参数:

# 示例:根据实际设备路径修改 BOARD_KERNEL_CMDLINE += androidboot.boot_devices=soc/100000.ufshc

6.3 SELinux策略配置

需要为super分区块设备添加标签:

# 在file_contexts中添加 /dev/block/platform/soc/10000\.ufshc/by-name/super u:object_r:super_block_device:s0

7. 调试与验证

7.1 查看动态分区信息

编译完成后,可以检查生成的动态分区信息:

# 查看super.img信息 lpdump super.img # 查看设备上的动态分区 adb shell lpdump /dev/block/by-name/super

7.2 分区使用情况检查

# 启用adb验证 adb enable-verity adb reboot # 查看分区使用情况 adb shell df -h

7.3 构建产物验证

检查生成的super.img是否包含预期分区:

# 解压super.img检查内容 simg2img super.img super.raw.img mkdir super_mount && sudo mount super.raw.img super_mount ls -l super_mount
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 15:49:31

大数据领域Hadoop的集群性能监控指标

大数据领域Hadoop的集群性能监控指标&#xff1a;像给汽车做体检一样守护数据引擎 关键词&#xff1a;Hadoop集群监控、HDFS性能指标、YARN资源管理、MapReduce任务监控、大数据运维优化 摘要&#xff1a;Hadoop作为大数据领域的"基础设施"&#xff0c;就像城市的交通…

作者头像 李华
网站建设 2026/6/15 9:31:16

Qwen3-TTS-12Hz-1.7B-VoiceDesign保姆级教程:WebUI首次加载与缓存优化

Qwen3-TTS-12Hz-1.7B-VoiceDesign保姆级教程&#xff1a;WebUI首次加载与缓存优化 1. 为什么第一次打开WebUI特别慢&#xff1f;——从声音设计说起 你点开Qwen3-TTS-12Hz-1.7B-VoiceDesign的WebUI界面&#xff0c;鼠标刚松开&#xff0c;页面却卡在“加载中”转圈近两分钟—…

作者头像 李华
网站建设 2026/6/15 9:33:29

如何解决IE浏览器不支持ES6+语法报SCRIPT1002: 语法错误问题

你在前端开发中遇到的IE浏览器报SCRIPT1002: 语法错误&#xff0c;核心是IE浏览器对ES6&#xff08;ES2015及以后&#xff09;的语法和API完全无原生支持&#xff0c;其内置的JavaScript解析引擎只能识别ES5及以下语法&#xff0c;解析箭头函数、let/const、解构赋值等ES6新语法…

作者头像 李华