Rockchip共有 3 种分区表可固化到存储分区中:MTD Partition,GPT 和 RK partition。

详细的信息可以参考文档《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 自定义,不通用

其中用parameter文件来配置一些系统参数,比如固件版本,存储器分区信息等。Parameter文件是非常重要的系统配置文件,

最好在能了解清楚各个配置功能时再做修改,避免出现parameter文件配置异常造成系统不能正常工作的问题。

Parameter文件大小有限制,最大不能超过64KB。


1.  固件分区介绍

默认分区说明 ( 下面是 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。

misc 分区:供 misc.img,给 recovery 使用。

boot 分区:供 kernel 编译出来的 boot.img。

recovery 分区:供 recovery 编译出的 recovery.img。

backup 分区:预留,暂时没有用。

rootfs 分区:供 buildroot、debian 或 yocto 编出来的 rootfs.img。

oem 分区:给厂家使用,存放厂家的 APP 或数据。挂载在 /oem 目录。

userdata 分区:供 APP 临时生成文件或给最终用户使用,挂载在 /userdata 目录下。

2 Parameter文件预览

Parameter文件主要用于定义分区表,可以支持两种分区格式:一个是GPT格式,另一个是传统CMDLINE分区。不同的项目、不同的平台,parameter文件的内容会有一些差异。

默认Linux平台都使用GPT格式。

RK3576 GPT分区格式parameter定义:

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(boot),0x00040000@0x00028000(recovery),0x00010000@0x00068000(backup),0x01c00000@0x00078000(rootfs),0x00040000@0x01c78000(oem),-@0x01cb8000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
uuid:boot=7A3F0000-0000-446A-8000-702F00006273


GPT分区相对传统分区,parameter文件主要差异:


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(最大)

描述

厂商信息,打包 updata.img 使用,可以修改,用于升级工具显示。


3.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格式没有用,为了兼容,不要删除或修改。


下表列出几个平台的值:

芯片 

MACHINE

RK29xx

2929

RK292X

2928

RK3066

3066

RK3126C

3126c

RK3326

3326

RK3399

3399

RK3308 3308



3.8 CHECK_MASK:0x80

条目

CHECK_MASK

类型十六进制数


数值

0x80(固定)

描述 

保留,不能修改。


3.9 TYPE:GPT

GPT分区表标识,烧录工具会根据 CMDLINE 里面定义的分区创建GPT分区表,paramter文件不会烧录到 NVM(NAND,EMMC等)存储器件里面。

3.10 GROW_ALIGN

GPT分区表标识,只能选择0或者1,Linux默认选择0; 其他平台比如Android, 内核 DM verity开启(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)

分区定义说明:

4 Parameter分区定义规范

5 SDK分区配置修改指南

5.1 命令概览

以下是SDK中用于分区操作的相关命令:

$ ./build.sh --help | grep part
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:     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 新增分区

$ tree -L 1 output/extra-parts
output/extra-parts/
├── env
├── env.fs
├── env.img
...