|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
YoC基础软件平台具有丰富的IoT组件,可有效支持RISC-V生态应用开发。前几期内容中,我们已经陆续介绍了YoC的CSI组件、AT组件和AV(多媒体)组件。本期内容,我们将为大家介绍YoC的PARTITION组件,从分区表介绍、配置与接口、配置示例三方面带大家详细了解该组件。- ^# G( A9 \# O1 I# A
7 U) u ]( G J& @7 Y& s4 Z
1、概述
1 C5 l) x- F( ^" n8 P8 W2 d( h7 LPARTITION组件是一个分区管理的组件。基于分区表(MTB)的分区信息来统一管理Flash分区,对分区进行统一的读写、擦除、以及验签的操作。
4 ^6 x1 O0 h) i! y3 Q" [下面就来介绍下分区表的定义以及组件提供的一些API接口。
* t" G$ k7 c+ f; i, `0 i) Z1 h
# Q5 n# z* D: Q/ {$ P2、分区表介绍
7 B% k9 c4 z' P9 l& `* l8 Z5 v6 d分区表简称为MTB(manifest table)。保存系统镜像的基本信息以及签名值。MTB分为两类。
0 } [) d, m" C0 K7 ^' L6 U6 m) _bmtB:bootloader manifest table,记录bootloader镜像的信息,给bootrom使用
6 |$ B( I, o) H" q! u6 s! R TIMTB:images manifest table,记录除bootloader以外的其他镜像的信息,给bootloader使用
8 H J& u. c( K1 _5 L# j7 m其中IMTB是必须的,而BMTB则取决于芯片bootrom的设计,是否需要这张BMTB表,使用BMTB的优势是可以灵活的配置boot的地址信息,避免固化在bootrom里。这2张表本身就是以分区的形式存储在Flash中的,在定义分区的时候要预留出来。分区名字也是固定为"bmtb"和"imtb"。
4 v# B$ k1 D0 Y" Q7 h* ^
0 ?$ e# q9 j" r- M! w' h' o+ v' a分区的信息存储在一个叫config.yaml的文件中,一般放在工程的board或者solution目录下,在打包镜像的时候通过工具自动生成bmtb/imtb两个镜像。+ Y8 r* s# |! h, x) {2 s& Y/ a0 ^
一个典型的分区表如下:
1 F6 m8 U0 y+ V, Gmtb_version: 4, _5 e8 r" k1 G# K( I
chip: pangu # cb2201 / cb6501 / pangu, q3 u* |- j6 V% m% x3 g
diff:
2 k' v0 C* h: ~, ~8 L' ^) V& c8 N fota_version: 06 g; _! A+ S7 O& ~3 m3 M/ U
ram_buf: 50 #DEC KB ( max ram need)5 i9 d4 ^ n. G) c* l! L
flash_buf: 16 #DEC KB ( buffer size)6 D* A/ Q- [3 j, s( K; S
flash_sector: 4096 #DEC byte ( flash sector)
8 I9 ?4 R" E6 ~3 S4 ?2 T% p diff_mode: 010 #BIN0 x6 w' K7 T$ E6 \! w# u5 y( l( h$ @
double_control: 1 #DEC (1--use 2 sector for diff restore,0--1 sector)" G, Y {; t7 s& p5 c/ ]
flash:- l( @! f. a8 ^8 C
base_address: 0x8000000 # the base address of flash+ g: {, n# T9 e6 V
run_base_address: 0x18000000 # the run address, maybe SDRAM address
/ u4 w1 F2 E6 L' E1 a3 g3 G sector: 4096 # Bytes) p# @& s5 L4 C6 ?/ V1 O! l- K# G
size: 16777216 # Bytes, $(sector count) * sector% s# r1 h- ^3 ]) }6 S% ?: W
partitions:6 W! ?: q2 r! r- R. G! N+ {' {
- { name: bmtb, address: 0x8000000, size: 0x001000 }
$ X3 x5 z0 x* I! O - { name: boot, address: 0x8001000, size: 0x020000 }
: [* K. ~" h2 d' a9 G( D' E - { name: tee, address: 0x8021000, load_addr: 0x18000000, size: 0x010000 }9 C) u7 a+ q2 k& Q8 J9 k* R/ L0 A
- { name: imtb, address: 0x8031000, size: 0x002000 }% V+ B+ P- h/ ]$ {+ |- f
- { name: prim, address: 0x8033000, load_addr: 0x18010000, size: 0x300000, verify: true, update: FULL}. O. p* q8 D a. J7 u. `! C- ]7 H/ ^
- { name: kv, address: 0x8633000, size: 0x004000 }0 n' j$ b% }' F/ L, C q
- { name: lpm, address: 0x8637000, size: 0x020000 }' D' x7 M/ J% o5 [# N( h
- { name: misc, address: 0x8657000, size: 0x400000 }# S- |7 J8 H+ w- u- a2 T; G6 D1 f9 p
& K3 N! n* {6 o2 h
3、配置与接口介绍; |) \4 F, L' T# \! M
介绍partition组件的一些参数配置和常用API接口。
% n7 i' Q3 v7 E2 Q& T6 r9 N3.1 参数配置0 D4 N4 k) N8 k, h" x
以下宏定义在PARTITION组件的yoc/partition.h文件中,用户可以在应用方案的package.yaml中的def_config字段中进行重新定义。: s- ~' H, d: I# P+ x3 P
CONFIG_MAX_PARTITION_NUM:分区个数配置。# T. Q v& t8 p" G
定义最大的分区个数,如果用户没有自定义,那么默认为12个分区大小。如果ram资源比较紧张,而分区又没有达到12个,那么可以把这个宏改成实际分区个数。每减少一个分区,分别可以节省40个字节的data段size,和调用partition_init的任务最多40个字节的栈空间。
: v- D- d0 M( ~3 q- J0 B# O+ M) YCONFIG_PARITION_NO_VERIFY:分区校验配置。是否开启分区校验功能,默认值为1,为不开启校验。安全的方案需要配置成0。! v% t4 q# o5 T# Q
CONFIG_NOT_SUPORRT_SASC:安全区域设置配置。配置分区的访问权限。是否支持设置安全区域,默认值为1,不支持设置安全区域。如果芯片支持,可以在board组件中配置为0,开启此功能。
$ I* c# ~$ a2 t: s
r7 }! y2 X- R8 M+ S+ B5 Y8 r4 Y
/ `( g- S4 }0 q0 K# t+ X8 o |
|