|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
YoC基础软件平台具有丰富的IoT组件,可有效支持RISC-V生态应用开发。前几期内容中,我们已经陆续介绍了YoC的CSI组件、AT组件和AV(多媒体)组件。本期内容,我们将为大家介绍YoC的PARTITION组件,从分区表介绍、配置与接口、配置示例三方面带大家详细了解该组件。
' c3 w- Z* E# B- y; r- \1 I$ f: f% ]* W' I" O$ A
1、概述& L2 C) a3 ^; I( }( @2 c
PARTITION组件是一个分区管理的组件。基于分区表(MTB)的分区信息来统一管理Flash分区,对分区进行统一的读写、擦除、以及验签的操作。
z; C" v9 H% ~下面就来介绍下分区表的定义以及组件提供的一些API接口。; i5 B9 q0 o1 W, I3 v" x. w
- O1 v9 r& w4 W% N
2、分区表介绍1 V4 k k% R, w* o9 d; V7 d3 e1 z
分区表简称为MTB(manifest table)。保存系统镜像的基本信息以及签名值。MTB分为两类。
& m1 f& x5 K* FbmtB:bootloader manifest table,记录bootloader镜像的信息,给bootrom使用' k* O) V. V6 g7 g, [# B0 p \
IMTB:images manifest table,记录除bootloader以外的其他镜像的信息,给bootloader使用# f/ E) r, s' z4 m) [" ^
其中IMTB是必须的,而BMTB则取决于芯片bootrom的设计,是否需要这张BMTB表,使用BMTB的优势是可以灵活的配置boot的地址信息,避免固化在bootrom里。这2张表本身就是以分区的形式存储在Flash中的,在定义分区的时候要预留出来。分区名字也是固定为"bmtb"和"imtb"。
! d& U% A m' q* m0 r: x3 Y
" X7 U, y# b+ I
分区的信息存储在一个叫config.yaml的文件中,一般放在工程的board或者solution目录下,在打包镜像的时候通过工具自动生成bmtb/imtb两个镜像。! Y$ t# B( |/ c$ ]! b4 ~1 J
一个典型的分区表如下:* w* g. j/ s6 s: @
mtb_version: 4
1 s q. n/ n! O& `! {# ichip: pangu # cb2201 / cb6501 / pangu
4 Q. |3 F8 @8 J* f' Cdiff:; }7 o* b, {/ p/ ^ t6 o
fota_version: 07 Q4 q7 t9 J6 O* L# E# V3 l& b
ram_buf: 50 #DEC KB ( max ram need)
: |- P3 n) o" B; k; g flash_buf: 16 #DEC KB ( buffer size)
* Z3 P5 [) W& i" i flash_sector: 4096 #DEC byte ( flash sector), n- [" K. X( g, T h' q& ^% p! j. G$ L
diff_mode: 010 #BIN
0 L* W3 P4 y9 \3 r# _) U double_control: 1 #DEC (1--use 2 sector for diff restore,0--1 sector)
* n( M2 r; _! A8 d1 w/ dflash:. h9 j$ x+ m% u) ?. e
base_address: 0x8000000 # the base address of flash/ P3 s5 p& P& [7 P* D8 u
run_base_address: 0x18000000 # the run address, maybe SDRAM address) {" v. e% @( B9 j4 t
sector: 4096 # Bytes
9 P1 x6 A( Z, i$ i size: 16777216 # Bytes, $(sector count) * sector
. k6 g; T1 D( g& Cpartitions:+ X; D' g2 K7 a6 h7 k w, `1 @
- { name: bmtb, address: 0x8000000, size: 0x001000 }
d/ g% J( U* P. y' q, g0 ]2 [ - { name: boot, address: 0x8001000, size: 0x020000 }/ b( V3 V6 _) m, ?
- { name: tee, address: 0x8021000, load_addr: 0x18000000, size: 0x010000 }) O$ U! c" F- U1 [' H
- { name: imtb, address: 0x8031000, size: 0x002000 }7 U( K* F4 M; D# u( d A
- { name: prim, address: 0x8033000, load_addr: 0x18010000, size: 0x300000, verify: true, update: FULL}7 Z: @7 `# f+ f, u7 g, J3 R( m
- { name: kv, address: 0x8633000, size: 0x004000 }
5 a. }- s/ t7 q. N9 B4 { - { name: lpm, address: 0x8637000, size: 0x020000 }
" F3 O3 I/ ^( i - { name: misc, address: 0x8657000, size: 0x400000 }7 l6 k" i: n' v9 c
2 y8 M* B3 G/ s# S; \2 v$ H9 k+ E0 f3、配置与接口介绍
5 c! I, r2 E: Q4 R& Q介绍partition组件的一些参数配置和常用API接口。7 I5 e; e3 @$ V3 q6 f) L- k& h
3.1 参数配置( D- I5 p0 K) ~) ~+ h' L& h
以下宏定义在PARTITION组件的yoc/partition.h文件中,用户可以在应用方案的package.yaml中的def_config字段中进行重新定义。6 N& ~& B! I0 Y" e: @- V. Q
CONFIG_MAX_PARTITION_NUM:分区个数配置。+ V; n h Q# w# @
定义最大的分区个数,如果用户没有自定义,那么默认为12个分区大小。如果ram资源比较紧张,而分区又没有达到12个,那么可以把这个宏改成实际分区个数。每减少一个分区,分别可以节省40个字节的data段size,和调用partition_init的任务最多40个字节的栈空间。* c. h7 [' b% W
CONFIG_PARITION_NO_VERIFY:分区校验配置。是否开启分区校验功能,默认值为1,为不开启校验。安全的方案需要配置成0。
- Z8 u1 `0 e1 a/ P' O( F6 C2 c1 p' aCONFIG_NOT_SUPORRT_SASC:安全区域设置配置。配置分区的访问权限。是否支持设置安全区域,默认值为1,不支持设置安全区域。如果芯片支持,可以在board组件中配置为0,开启此功能。
( i5 U6 B- A# J
5 Y( N2 A3 Y( c" W6 q
5 s; L- s+ u5 e3 U |
|