RK3588基于Android分区划分
Parameter文件主要用于定义分区表,可以支持两种分区格式:一个是GPT格式,另一个是传统 CMDLINE分区。
项目编译完成后,会在“out”目录下生成“parameter.txt”分区表文件,大致内容如下:
FIRMWARE_VER:14.0MACHINE_MODEL: rk3576_u MACHINE_ID: 007 MANUFACTURER: rockchip MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: rk3576_u CHECK_MASK: 0x80 PWR_HLD:0,0,A,0,1 TYPE: GPT CMDLINE:mtdparts=rk29xxnand:0x00002000@0x00002000(security),0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00002000@0x0000a000(dtbo),0x00000800@0x0000c000(vbmeta),0x00020000@0x0000c800(boot),0x00030000@0x0002c800(recovery),0x000c0000@0x0005c800(backup),0x000c0000@0x0011c800(cache),0x00020000@0x001dc800(metadata),0x00000400@0x001fc800(frp),0x00000800@0x001fcc00(baseparameter),0x00614000@0x001fd400(super),-@0x00811400(userdata:grow)生成关系: RebuildParameter.mk ➔ 生成 parameter.txt 读取关系: Partitions.mk ➔ 读取 parameter.txt ➔ 设置 BOARD_*_SIZE分区信息
单个分区说明: 例如: 0x00002000@0x00008000(boot),@符号之前的数值是分区大小,@符号之后的数值是分区的起 始位置,括号里面的字符是分区的名字。所有数值的单位是 sector ,1个 sector 为512Bytes.上例中,boot 分区起始位置为0x8000 sectors位置,大小为0x2000 sectors(4MB).
各个分区作用:
分区名 起始地址(扇区)大小(扇区)大小(MB)功能说明 security 0x00002000 0x000020004MB 安全存储分区,存放加密密钥、安全证书等敏感数据,用于 Secure Boot 和 DRM 保护 uboot 0x00004000 0x000020004MB U-Boot 引导程序分区,负责硬件初始化和内核加载 trust 0x00006000 0x000020004MB TEE(可信执行环境)固件分区,运行安全操作系统如 OP-TEE misc 0x00008000 0x000020004MB Android 恢复模式状态存储,记录 OTA 状态和 BootLoader 通信数据 dtbo 0x0000a000 0x000020004MB Device Tree Overlay 分区,存放动态硬件配置二进制文件 vbmeta 0x0000c000 0x000008001MB Android Verified Boot(AVB)元数据,验证 boot/recovery 镜像完整性 boot 0x0000c800 0x0002000064MB Android Boot 镜像分区,包含 Linux 内核和 initramfs recovery 0x0002c800 0x0003000096MB 恢复系统分区,用于 OTA 更新、工厂重置和系统修复 backup 0x0005c800 0x000c0000384MB 关键固件备份分区(uboot/trust),支持系统回滚和修复 cache 0x0011c800 0x000c0000384MB Android 缓存分区,存储临时数据和 OTA 下载包,可被 Recovery 格式化 metadata 0x001dc800 0x0002000064MB Android14+ 强制分区,存储文件系统加密密钥(FBE)和元数据 frp 0x001fc800 0x000004000.5MB Factory Reset Protection 分区,防止未授权重置(Google 账号锁)baseparameter 0x001fcc00 0x000008001MB 基础硬件参数分区,存储屏幕校准、传感器配置等由内核读取的参数 super 0x001fd400 0x006140003104MB Android 动态分区容器,包含 system/vendor/product 等只读镜像(支持 A/B 更新)userdata 0x00811400 - 剩余空间 用户数据分区(应用/媒体文件等),grow 表示占用所有剩余空间Android 14添加了生成parameter.txt的工具,支持根据配置参数编译出parameter.txt。如果没有配置 模板文件,则会寻找添加修改好的parameter.txt文件。
修改parameter.txt
找到(或指定)模板文件:
PRODUCT_PARAMETER_TEMPLATE :=device/rockchip/common/scripts/parameter_tools/parameter.in修改配置分区大小(例如):
BOARD_SUPER_PARTITION_SIZE :=2688548864BOARD_DTBOIMG_PARTITION_SIZE :=xxxx BOARD_BOOTIMAGE_PARTITION_SIZE :=xxxxx BOARD_CACHEIMAGE_PARTITION_SIZE :=xxxx不使用parameter生成parameter.txt
添加一个parameter.txt文件到你的device目录下即可: 例如:device/rockchip/rk3576/rk3576_u/parameter.txt
使用工具生成parameter.txt
parameter_tools --input device/rockchip/common/scripts/parameter_tools/parameter.in --firmware-version14.0--machine-model rk3576 --manufacturer rockchip --machine rk3576_u -- partition-list uboot_a:4096K,trust_a:4M,misc:4M,dtbo_a:4M,vbmeta_a:4M,boot_a:33554432,backup:30 0M,security:4M,cache:300M,metadata:4096,frp:512K,super:2G --output parameter_new.tx新加一个分区
以新建baseparameter分区为例进行说明:
修改BoardConfig.mk添加新分区
在产品的BoardConfig.mk中定义:
device/rockchip/rk3576/rk3576_u/BoardConfig.mk +++ b/BoardConfig.mk @@ -494,4 +494,11 @@ ifeq($(strip$(BOARD_TWRP_ENABLE)),true)+BOARD_WITH_SPECIAL_PARTITIONS :=baseparameter:1M在RebuildParameter.mk中添加BOARD_WITH_SPECIAL_PARTITIONS
device/rockchip/common/build/rockchip/RebuildParameter.mk +ifneq($(strip$(BOARD_WITH_SPECIAL_PARTITIONS)),)+partition_list :=$(partition_list),$(BOARD_WITH_SPECIAL_PARTITIONS)+endif直接在parameter.txt中添加新分区
将项目编译完成后的“out”目录下生成“parameter.txt”分区表文件拷贝至项目目录下,然后修改“parameter.txt”分区表文件
device/rockchip/rk3576/rk3576_u/parameter.txt 中内容如下:
FIRMWARE_VER:14.0MACHINE_MODEL: rk3576_u MACHINE_ID: 007 MANUFACTURER: rockchip MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: rk3576_u CHECK_MASK: 0x80 PWR_HLD:0,0,A,0,1 TYPE: GPT CMDLINE:mtdparts=rk29xxnand:0x00002000@0x00002000(security),0x00004000@0x00004000(uboot),0x00001000@0x00008000(waveform),0x00002000@0x00009000(misc),0x00002000@0x0000b000(dtbo),0x00000800@0x0000d000(vbmeta),0x00020000@0x0000d800(boot),0x00030000@0x0002d800(recovery),0x000c0000@0x0005d800(backup),0x000c0000@0x0011d800(cache),0x00020000@0x001dd800(metadata),0x00000400@0x001fd800(frp),0x00000800@0x001fdc00(baseparameter),0x004b0000@0x001fe400(super),0x010000@0x006ae400(logo),@0x006be400(userdata:grow)可以修改CMDLINE中的分区字段,添加新分区并调整各个分区大小。
在编译的时候,编译脚本会判断如果有parameter.txt文件就会跳过RebuildParameter.mk生成 parameter.txt
CMDLINE字段定义了各个分区的起始地址、大小和名称,每个分区描述使用"大小@起始地址(分区名)"的格式表示。例如,"0x00002000@0x00002000(security)"表示security分区大小为0x00002000(十六进制,单位为扇区),起始地址为0x00002000。开发者可以通过修改这些参数来调整现有分区的大小,或者添加新的分区。在添加新分区时,需要特别注意确保各分区之间不会重叠,并且要合理分配存储空间,避免影响系统正常运行。 一个重要的编译机制是,当项目目录下存在parameter.txt文件时,编译脚本会自动跳过RebuildParameter.mk中生成parameter.txt的步骤,直接使用项目目录下的文件。这一特性使得开发者可以直接手动编辑parameter.txt文件,而不用担心编译过程中自己的修改被覆盖