...
详细的信息可以参考文档《docs/cn/Common/TOOL/Rockchip_Introduction_Partition_CN.pdf》。
分区 | 说明 | 适用平台 | 限制 |
MTD Partition | parameter 文件中定义,通过 cmdline 传递,uboot- next 分支开始不再提供支持 | 所有 AP*1 | 需要独立分区 存放 |
GPT | EFI 通用分区表 ,uboot-next 分支支持 | 所有 AP*2 | 占用资源多一 点 |
RK partition | 参考 GPT 设计,主要用于小容量存储,节省资源 | RV1107/8, MCU | RK 自定义, 不通用 |
- *1 使用 uboot-next 分支的平台不再支持 MTD partition,如果需要使用,需要自己适配。
- *2 使用 uboot-next 分支的平台默认都是使用 GPT 做分区表,如果需要使用其他分区表,需要自己适配。
其中用parameter文件来配置一些系统参数,比如固件版本,存储器分区信息等。Parameter文件是非常重要的系统
配置文件,其中用parameter文件来配置一些系统参数,比如固件版本,存储器分区信息等。Parameter文件是非常重要的系统配置文件,
最好在能了解清楚各个配置功能时再做修改,避免出现parameter文件配置异常造成系统不能正常工作的问题。
Parameter文件大小有限制,最大不能超过64KB。
9.1 SDK分区介绍
默认分区说明 ( 下面是 RK3562 EVB 分区参考)
Number | Start (sector) | End (sector) | Size | Name |
1 | 16384 | 24575 | 4M | uboot |
2 | 24576 | 32767 | 4M | misc |
3 | 32768 | 163839 | 64M | boot |
4 | 163840 | 294911 | 32M | recovery |
5 | 294912 | 360447 | 32M | bakcup |
6 | 360448 | 12943359 | 6144M | rootfs |
7 | 12943360 | 12943359 | 128M | oem |
8 | 13205504 | 61120478 | 22.8G | userdata |
uboot 分区:供 uboot 编译出来的 uboot.img。
...
userdata 分区:供 APP 临时生成文件或给最终用户使用,挂载在 /userdata 目录下。
9.2 Parameter文件预览
Parameter文件主要用于定义分区表,可以支持两种分区格式:一个是GPT格式,另一个是传统CMDLINE分区。不同
的项目,不同的平台,parameter文件的内容会有一些差异。Parameter文件主要用于定义分区表,可以支持两种分区格式:一个是GPT格式,另一个是传统CMDLINE分区。不同的项目,不同的平台,parameter文件的内容会有一些差异。
默认Linux平台都使用GPT格式。
本文档以RK3376平台的parameter文件进行举例说明。
RK3576 GPT分区格式parameter定义:
GPT分区相对传统分区,parameter文件主要差异:
定义 TYPE: GPT
最后一个分区增加grow标识,如:userdata:grow
指定system或者rootfs的uuid,如:uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
parameter文件不会烧录到NVM(EMMC,NAND等)里面,会使用到的信息只有mtdparts的分区定义和
UUID,其他信息只是为了兼容升级工具而定义。
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3576
MACHINE_ID: 007
MANUFACTURER: RK3576
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
...
| 代码块 | ||
|---|---|---|
| ||
FIRMWARE VER: 1.0 _ MACHINE MODEL: RK3576 _ MACHINE ID: 007 _ MANUFACTURER: RK3576 MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: 0xffffffff CHECK MASK: 0x80 _ PWR _ HLD: 0,0,A,0,1 |
...
TYPE: GPT |
...
GROW |
...
ALIGN: 0 |
...
_ CMDLINE: |
...
mtdparts=:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boo |
...
t),0x00040000@0x00028000(recovery),0x00010000@0x00068000(backup),0x01c00000@0x00078000(rootf |
...
s),0x00040000@0x01c78000(oem), -@0x01cb8000(userdata:grow) |
...
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9 |
...
uuid:boot=7A3F0000-0000-446A-8000-702F00006273 |
GPT分区相对传统分区,parameter文件主要差异:
- 定义 TYPE: GPT
- 最后一个分区增加grow标识,如:userdata:grow
- 指定system或者rootfs的uuid,如:uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
- parameter文件不会烧录到NVM(EMMC,NAND等)里面,会使用到的信息只有mtdparts的分区定义和
- UUID,其他信息只是为了兼容升级工具而定义。
3 Parameter文件内容说明
3.1 FIRMWARE_VER:1.0
条目 | FIRMWARE_VER |
类型 |
...
十进制数,格式: X.X |
数值 |
...
0 - 255 |
...
描述 | 打包updata.img时会使用到,升级工具会根据这个识别固件版本号。 |
3.2 MACHINE_MODEL:RK3576
条目 | MACHINE_MODEL |
类型 | 字符串 |
...
长度 |
...
255(最大) | |
描述 | 机器型号,打包 updata.img 使用, 不同的项目,可以修改,用于升级工具显示。 在 recovery 里面升级固件时可以用于判断固件和机器是否匹配。 |
3.3 MACHINE_ID:007
条目 | MACHINE_ID |
类型 |
...
字符串 |
长度 |
...
255(最大) | |
描述 | 产品开发ID,可以为字符和数字组合,打包updata.img使用, 不同的项目使用不同的ID,可以用于识别机器机型。 在 recovery 里面升级固件时可以用于判断固件是否匹配。 |
3.4 MANUFACTURER:RK3576
条目 | MANUFACTURER |
...
类型字符串
长度255(最大)
类型 | 字符串 |
长度 | 255(最大) |
描述 | 厂商信息,打包 |
...
updata.img 使用,可以修改,用于升级工具显示。 |
9.3 Parameter文件内容说明
9.3.1 FIRMWARE_VER:1.0
9.3.2 MACHINE_MODEL:RK3576
9.3.3 MACHINE_ID:007
9.3.4 MANUFACTURER:RK3576
.5 MAGIC:0x5041524B
...
条目 |
MAGIC | |
类型十六进制数 |
...
数值 | 0x5041524B(固定) |
描述 | 魔数MAGIC,不能修改, 一些新的 AP 使用 DTS ,这一项没有用,为了兼容,不要删除或修改。 |
3.6 ATAG:0x60000800
条目 | ATAG |
类型十六进制数 | |
数值 |
...
32bits DDR地址 |
...
描述 | ATAG DDR存放地址, 一些新的AP使用DTS,这一项没有用,为了兼容,不要删除或修改。 |
3.7 MACHINE:0xffffffff
条目 | MACHINE |
类型字符串
类型 | 字符串 |
长度 | 255(最大) |
...
描述 | 内核识别用,这个定义和内核匹配。 这一项GPT格式没有用,为了兼容,不要删除或修改。 |
9.3.5 MAGIC:0x5041524B
9.3.6 ATAG:0x60000800
9.3.7 MACHINE:0xffffffff
下表列出几个平台的值:
...
下表列出几个平台的值:
芯片 | MACHINE |
RK29xx | 2929 |
RK292X | 2928 |
RK3066 | 3066 |
RK3126C | 3126c |
RK3326 | 3326 |
RK3399 | 3399 |
RK3308 3308 |
3.8 CHECK_MASK:0x80
条目 | CHECK_MASK |
类型十六进制数 | |
数值 |
...
0x80(固定) |
描述保留,不能修改。
9.3.8 CHECK_MASK:0x80
描述 | 保留,不能修改。 |
9.3.9 TYPE:GPT
GPT分区表标识,烧录工具会根据 CMDLINE 里面定义的分区创建GPT分区表,paramter文件不会烧录到 NVMNVM(NAND,EMMC等)存储器件里面。
(NAND,EMMC等)存储器件里面。
9.3.10 GROW_ALIGN
GPT分区表标识,只能选择0或者1,Linux默认选择0; 其他平台比如Android, 内核 DM verity开启(CONFIGverity开启(CONFIG_DM_VERITY=y),需要GROW_ALIGN设置为1.这样工具端最后一个分区结束位置对齐到32K。
9.3.11 CMDLINE:
MTD 分区定义说明:
分区定义说明:
| 代码块 | ||
|---|---|---|
| ||
CMDLINE: |
...
mtdparts=: |
...
0x00002000@0x00004000(uboot), |
...
0x00002000@0x00006000(misc), |
...
0x00020000@0x00008000(boo |
...
t), |
...
0x00040000@0x00028000(recovery), |
...
0x00010000@0x00068000(backup), |
...
0x01c00000@0x00078000(rootf |
...
s), |
...
0x00040000@0x01c78000(oem),-@0x01cb8000(userdata:grow) |
名称Parameter 定义地址EMMC 逻辑地址NAND 逻辑地址大小
GPT -- 0 0 32KB
LOADER -- 0x40 0x40 4MB-32KB
保留-- 0x2000 0x2000 4MB
UBOOT 0x4000 0x4000 0x4000 4MB
TRUST 0x6000 0x6000 0x6000 4MB
分区定义说明:
...
- 单个分区说明:
- 例如:0x00020000@0x00008000(boot)
...
- ,@符号之前的数值是分区大小,@符号之后的数值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位是 sector ,1个 sector 为512Bytes.上例中,boot
...
- 区起始位置为
- 0x8000 sectors位置,大小为0x2000 sectors(16MB).
...
- 为了性能,每个分区起始地址需要32KB(64 sectors)对齐,大小也需要32KB的整数倍。
...
- 如果使用 sparse
...
- 格式的镜像,升级时会擦除数据,为了兼容性更好,对应的分区最好按4MB对齐,大小也按4MB整数倍配置。
4MB整数倍配置。
- 使用GPT分区时,parameter 里面定义的地址,都是真实的逻辑地址(LBA),例如 uboot
...
- 定义在0x4000,那么烧录到 EMMC 和 NAND 里面时,逻辑地址也是0x4000.
...
- 最后一个分区需要指定 grow 参数,工具会把剩余的空间都分配给最后一个分区。
9.4 Parameter分区定义规范
- 凡是 bootrom,pre-loader,uboot,trust 有写到的分区都放在 recovery 分区之前;
- 凡是客户新加的分区,在 pre-loader,uboot,trust 有被写到,都应该放在 recovery 分区之前;
- 目前 rockchip 前级固件有操作到的分区有 misc,vbmeta,security,这些都应该放 recovery 之前。、
9.5 SDK分区配置修改指南
9.5.1 1 命令概览
以下是SDK中用于分区操作的相关命令:
| 代码块 | ||
|---|---|---|
| ||
$ ./build.sh --help | grep |
...
part print-parts |
...
list-parts 打印分区信息的别名
mod-parts 交互式修改分区表
edit-parts 编辑原始分区配置
new-parts 重新创建分区
extra-parts 打包额外的分区镜像
9.5.2 分区信息打印
使用以下命令打印当前分区配置:
9.5.3 分区信息修改
通过以下命令进入编辑模式,修改分区配置:
修改后,配置自动保存至 device/rockchip/parameter.txt 文件。使用 git diff 查看变更:
<SDK>$ make print-parts
...
print partitions (打印分区信息)
list-parts alias of print-parts (打印分区信息的别名)
edit-parts edit raw partitions (交互式修改分区表)
extra-parts pack extra partition images (编辑原始分区配置)
clean-extra-parts cleanup extra-parts |
5.2 分区信息打印
使用以下命令打印当前分区配置:
| 代码块 | ||
|---|---|---|
| ||
$ make print-parts ========================================== |
...
分区表
Partition table ========================================== |
...
1: |
...
uboot at 0x00004000 size=0x00002000(4M) |
...
2: |
...
misc at 0x00006000 size=0x00002000(4M) |
...
3: |
...
boot at 0x00008000 size=0x00020000(64M) |
...
4: |
...
recovery at 0x00028000 size=0x00040000(128M) |
...
5: |
...
backup at 0x00068000 size=0x00010000(32M) |
...
6: |
...
rootfs at 0x00078000 size=0x01c00000(14G) |
...
7: |
...
oem at 0x01c78000 size=0x00040000(128M) |
...
8: |
...
传统命令行参数:
0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boot),...
$ make edit-parts
## Chapter-9 分区名 大小
<hidden> 0x00004000 # 8M
uboot 0x00002000 # 4M
misc 0x00002000 # 4M
boot 0x00020000 # 64M
recovery 0x00040000 # 128M
backup 0x00010000 # 32M
rootfs 0x01c00000 # 14G
oem 0x00040000 # 128M
userdata - # 可增长
## Chapter-9 例如,增加boot分区至128M,修改为:
boot 0x00080000 # 128M
## Chapter-9 如需新增env分区,添加:
env 0x00040000 # 64M
device/rockchip$ git diff
...
9.5.4 新增分区
若要在SDK编译中新增一个 env 分区,步骤如下:
userdata at 0x01cb8000 size=-(auto-resized) |
5.3 分区信息修改
通过以下命令进入编辑模式,修改分区配置:
| 代码块 | ||
|---|---|---|
| ||
$ make edit-parts
# name size
<hidden> 0x00004000 # (8M)
uboot 0x00002000 # (4M)
misc 0x00002000 # (4M)
boot 0x00020000 # (64M)
recovery 0x00040000 # (128M)
backup 0x00010000 # (32M)
rootfs 0x01c00000 # (14G)
oem 0x00040000 # (128M)
userdata - # (auto-resized)
## 例如,增加boot分区至128M,修改为
boot 0x00080000 # 128M
## 如需新新增env分区,添加
env 0x00040000 # 64M |
修改后,配置自动保存至 device/rockchip/parameter.txt 文件。使用 git diff 查看变更:
5.4 新增分区
- 若要在SDK编译中新增一个 env 分区,步骤如下:
- 在
...
- device/rockchip/common/extra-parts 目录下新增 env 目录。
...
- 运行 make menuconfig 配置额外分区。
...
- 配置完成后,使用 make savedefconfig 保存配置。
...
- 通过 make edit-parts 在 parameter.txt 中添加 env 分区配置。
...
- 使用 make extra-parts 编译生成额外分区镜像,最终在 output/extra-parts 目录下生成相应文件。
| 代码块 | ||
|---|---|---|
| ||
$ tree -L 1 output/extra-parts |
...
output/extra-parts/ |
...
├── env |
...
├── env.fs |
...
├── env.img |
...
... |