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

Android 12 在 Rockchip 平台上的分区表parametet.txt 自动生成机制解析

📦 Android 12 在 Rockchip 平台上的分区表自动生成机制解析

在基于 Rockchip 平台的 Android 12 项目中,分区表的生成采用了一套自动化构建流程,结合 Makefile 和 Python 脚本动态生成 parameter.txt,用于镜像打包和烧录。这种机制不仅提升了构建效率,也为定制化部署提供了灵活入口。本文将深入解析该机制的核心组成部分,并说明如何定制分区布局以满足不同设备需求。


🧩 分区表生成的核心流程

整个流程由三部分组成:

1️⃣ parameter.in:分区表模板输入

路径:device/rockchip/common/scripts/parameter_tools/parameter.in

该文件是分区表的模板,核心字段如下:

CMDLINE:mtdparts=rk29xxnand:${_partition_list}

其中 ${_partition_list} 是一个变量,由构建系统动态生成。该模板还可能包含设备型号、固件版本等元信息。


2️⃣ RebuildParameter.mk:Makefile 构建逻辑

路径:device/rockchip/common/build/rockchip/RebuildParameter.mk

该 Makefile 脚本负责:

  • 判断是否启用 A/B 分区结构(BOARD_USES_AB_IMAGE
  • 根据 BOARD_BOOT_HEADER_VERSION 决定是否添加 vendor_bootresource 分区(Header V3)
  • 拼接分区列表字符串 partition_list,包括分区名与大小(如 boot:16M
  • 最终将 partition_list 传入 Python 脚本进行偏移计算
示例逻辑:
ifeq ($(strip $(BOARD_USES_AB_IMAGE)), true)partition_list := security:4M,uboot_a:4M,trust_a:4M,misc:4Mpartition_list += dtbo_a:8M,vbmeta_a:1M,boot_a:32M
elsepartition_list := security:4M,uboot:4M,trust:4M,misc:4Mpartition_list += dtbo:8M,vbmeta:1M,boot:32M,recovery:32M
endifpartition_list += backup:372M,cache:256M,metadata:16Mifeq ($(strip $(BUILD_WITH_GOOGLE_FRP)), true)partition_list += frp:512K
endif

注意:分区大小单位为 K/M/G,偏移尚未计算,后续由 Python 脚本完成。


3️⃣ parameter_generator.py:最终生成器

路径:device/rockchip/common/scripts/parameter_tools/parameter_generator.py

该 Python 脚本负责:

  • 读取 parameter.in 模板
  • partition_list 中的每个分区转换为 size@offset(name) 格式
  • 自动计算每个分区的起始地址(offset),并对齐到 512 字节块
  • 特殊处理 userdata 分区为 grow 类型(动态扩展)
核心函数:
def calculate_blocks(size):# 将 K/M/G 转换为字节,再除以 512 得到块数...def generate_pt(pt_name, pt_size, pt_start):if pt_name == 'userdata':return "-@{:#010x}(userdata:grow)".format(pt_start)part_size = calculate_blocks(pt_size)return "{:#010x}@{:#010x}({})".format(part_size, pt_start, pt_name), pt_start + part_size

最终输出的 parameter.txt 会替换 ${_partition_list} 为完整的分区表字符串。


🧪 实际挂载情况分析(基于 Android 12)

通过 df -hdmesg 可知,系统实际挂载的分区如下:

分区名挂载点用途说明
metadata/metadata加密与动态挂载元数据
cache/cacheOTA 缓存与临时数据
oem/oem厂商配置或预装应用
userdata/data用户数据主分区
super动态映射映射出 /system, /vendor, /product 等逻辑卷

其余分区如 boot, vbmeta, recovery, misc, dtbo, backup, baseparameter, frp 等虽未挂载,但在启动流程中仍被 bootloader 或 init 使用,不可随意裁剪。


🛠️ 如何定制分区表

你可以通过以下方式定制分区布局:

✅ 修改分区大小

BoardConfig.mk 中设置:

BOARD_BOOTIMAGE_PARTITION_SIZE := 0x200000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x300000

✅ 添加新分区

RebuildParameter.mk 中添加:

partition_list += log:16M

并在 fstabinit.rc 中挂载 /log

✅ 精简未使用分区

backup, misc, dtbo, cache, oem 等,可根据实际用途裁剪,前提是 bootloader 不依赖。


📘 示例输出(parameter.txt)

CMDLINE:mtdparts=rk29xxnand:\
0x00800000@0x0000c800(boot),\
0x00800000@0x0002c800(recovery),\
0x17400000@0x001e5000(super),\
0x01000000@0x00811400(oem),\
-@0x00911400(userdata:grow)
http://www.xdnf.cn/news/20010.html

相关文章:

  • 【单片机day03】
  • vue3存储/获取本地或会话存储,封装存储工具,结合pina使用存储
  • 电子病历空缺句的语言学特征描述与自动分类探析(以GPT-5为例)(下)
  • LLM重排器落地难题:如何破解速度与精度的工程困局?
  • Claude Code Router实现默认回复中文回复
  • 轻量级的磁盘碎片整理程序-开箱急用快速清理磁盘垃圾和碎片-供大家学习研究参考
  • Redis 客户端与服务器:银行的 “客户服务系统” 全流程
  • LeetCode 面试经典 150_矩阵_螺旋矩阵(35_54_C++_中等)(按层模拟)
  • K8S容器POD内存快照导出分析处理方案
  • Nano-Banana使用教程
  • websocket的key和accept分别是多少个字节
  • Widget 生命周期
  • 【Python基础】 13 Rust 与 Python 注释对比笔记
  • 零基础两个月通关2025下半年软考!保姆级冲刺规划(附每日学习表)
  • 随时学英语5 逛生活超市
  • 25高教社杯数模国赛【C题顶流思路+问题解析】第三弹
  • 处理PostgreSQL中的磁盘I/O瓶颈
  • 从BERT到T5:为什么说T5是NLP的“大一统者”?
  • 一键成文,标准随行——文思助手智能写作助力政务提效
  • 常见的相机模型针孔/鱼眼(Pinhole,Mei,K
  • 从零构建一款开源在线客服系统:我的Go语言实战之旅
  • 对话A5图王:20年互联网老兵,从Web1.0到Web3.0,牛友会里藏着最真的创业情
  • 后端Long类型数据传给前端造成精度丢失
  • ReAct模式解读
  • Linux 编译 Android 版 QGroundControl 软件并运行到手机上
  • 东土正创AI交通服务器再获北京市批量应用订单
  • Agent Prompt工程:如何让智能体更“听话”?(实践指南)
  • 20250904 10:45_排查10.1.3.35新QMS系统RMAN备份失败问题(优化脚本里的环境配置,增加了check_oracle_env 函数)
  • openai-python v1.104.2版本发布:修复Web搜索工具类型别名问题
  • uni-app iOS 上架常见问题与解决方案,实战经验全解析