openharmony源码编译之 修改分区大小指南
RK3588 OpenHarmony 分区大小修改指南
概述
修改系统分区大小需要修改两处配置,必须保持一致,否则会导致烧录失败。
一、涉及的配置文件
| 序号 | 文件路径 | 作用 | 单位 |
|---|---|---|---|
| 1 | vendor/kaihong/khp_rk3588_ic816/image_conf/system_image_conf.txt | 编译时生成镜像的大小 | 字节 |
| 2 | device/board/kaihong/khp_rk3588_ic816/loader/parameter.txt | EMMC 硬件分区表(普通烧录) | 扇区(512字节) |
| 3 | device/board/kaihong/khp_rk3588_ic816/loader/parameter_secure.txt | EMMC 硬件分区表(安全烧录) | 扇区(512字节) |
二、单位换算
2.1 常用大小换算表
| 大小 | 字节 (Byte) | 扇区 (Sector) | 扇区十六进制 |
|---|---|---|---|
| 512MB | 536870912 | 1048576 | 0x00100000 |
| 1GB | 1073741824 | 2097152 | 0x00200000 |
| 1.5GB | 1610612736 | 3145728 | 0x00300000 |
| 2GB | 2147483648 | 4194304 | 0x00400000 |
| 2.5GB | 2684354560 | 5242880 | 0x00500000 |
| 3GB | 3221225472 | 6291456 | 0x00600000 |
2.2 计算公式
字节 = GB * 1024 * 1024 * 1024 扇区 = 字节 / 512示例:2.5GB
字节 = 2.5 * 1024 * 1024 * 1024 = 2684354560 扇区 = 2684354560 / 512 = 5242880 = 0x00500000三、修改步骤(以 system 分区从 2GB 改为 2.5GB 为例)
3.1 第一步:修改镜像大小配置
文件:vendor/kaihong/khp_rk3588_ic816/image_conf/system_image_conf.txt
修改前:
/ 2147483648 # 2GB --fs_type=ext4 ...修改后:
/ 2684354560 # 2.5GB --fs_type=ext4 ...直接修改第二行的数字为目标大小(字节)。
3.2 第二步:修改分区表配置
文件:device/board/kaihong/khp_rk3588_ic816/loader/parameter.txt
分区表格式说明:
大小@偏移(名称) 例如:0x00400000@0x00040000(system) ↑ ↑ 大小 起始位置原始分区表:
...(ramdisk),0x00400000@0x00040000(system),0x00100000@0x00440000(vendor),0x000C0000@0x00540000(sys-prod),...修改内容:
- system 大小:
0x00400000→0x00500000(增大 0x00100000 = 512MB) - 后续所有分区偏移:都要 +
0x00100000
| 分区 | 原偏移 | 新偏移 | 说明 |
|---|---|---|---|
| system | 0x00040000 | 0x00040000 | 起始位置不变 |
| vendor | 0x00440000 | 0x00540000 | +0x00100000 |
| sys-prod | 0x00540000 | 0x00640000 | +0x00100000 |
| chip-prod | 0x00600000 | 0x00700000 | +0x00100000 |
| recovery | 0x00680000 | 0x00780000 | +0x00100000 |
| factory | 0x00690000 | 0x00790000 | +0x00100000 |
| userdata | 0x00800000 | 0x00900000 | +0x00100000 |
修改后分区表:
...(ramdisk),0x00500000@0x00040000(system),0x00100000@0x00540000(vendor),0x000C0000@0x00640000(sys-prod),...3.3 第三步:修改安全烧录分区表
文件:device/board/kaihong/khp_rk3588_ic816/loader/parameter_secure.txt
修改方法与 parameter.txt 完全相同,包括后续所有分区的偏移调整。
安全烧录模式多了 rvt、security 等分区,这些分区的偏移也要同步调整。
四、验证修改
4.1 检查配置一致性
# 检查镜像大小配置catvendor/kaihong/khp_rk3588_ic816/image_conf/system_image_conf.txt# 检查分区表grep"system"device/board/kaihong/khp_rk3588_ic816/loader/parameter.txtgrep"system"device/board/kaihong/khp_rk3588_ic816/loader/parameter_secure.txt确认:
- 字节数 = 扇区数 × 512
- 两个 parameter.txt 中 system 大小相同
4.2 编译验证
./build.sh --product-name khp_rk3588_ic816编译完成后检查:
ls-lhout/arm64/khp_rk3588_ic816/packages/phone/images/system.img应该显示:2.5G
五、其他分区修改参考
5.1 修改 vendor 分区
vendor 分区在 system 之后,修改 vendor 大小:
- vendor 大小变更
- sys-prod 及后续分区偏移同步调整
5.2 修改 userdata 分区
userdata 是最后一个分区,用-表示占满剩余空间:
...-@0x00900000(userdata:grow)只需调整前面分区,userdata 自动适配。
六、常见问题
Q1: 烧录提示 “system partition not enough to store image”
原因:parameter.txt中的 system 分区大小 <system_image_conf.txt中的镜像大小
解决:两处配置保持一致
Q2: 编译后镜像大小还是原来的
原因:增量编译没有重新打包镜像
解决:make clean后重新编译,或删除out目录
Q3: 改大了 system 分区,userdata 变小了
正常现象:EMMC 总空间固定,system 大了 userdata 就小了,根据实际需求平衡。
Q4: 改大了 system 分区,为什么 df -h 显示 userdata 还是 111G 没变?
原因分析:
- 比例太小,显示不明显:512MB 相对于 111GB 仅占 0.46%,
df -h四舍五入后看不出变化 - 原始分区表有空隙:factory 结束位置
0x00792000到 userdata 开始0x00900000之间本来就有约 732MB 空隙,增大的 512MB 先吃掉了这个空隙
精确验证方法:
# 1. 查看分区精确大小(1K 块为单位)df# 2. 查看内核分区表,确认 system 实际扇区数cat/proc/partitions# 3. system 分区扇区数验证# 2GB: 4194304 块# 2.5GB: 5242880 块确认 system 确实是 2.5GB 即表示配置生效,userdata 微小变化不影响使用。
七、大小设置建议
| 分区 | 推荐大小 | 说明 |
|---|---|---|
| system | 实际内容 + 300~500MB 余量 | 不要太大,够用即可 |
| vendor | 512MB | 一般不需要改 |
| sys-prod | 384MB | 一般不需要改 |
| chip-prod | 256MB | 一般不需要改 |
| userdata | 剩余全部 | 用户数据区,越大越好 |
先编译一次,查看实际内容大小:
mount -o loop system.img /mnt && du -sh /mnt
附
磁盘分区修改前
磁盘分区修改后
