|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
YoC基础软件平台具有丰富的IoT组件,可有效支持RISC-V生态应用开发。前几期内容中,我们已经陆续介绍了YoC的CSI组件、AT组件和AV(多媒体)组件。本期内容,我们将为大家介绍YoC的PARTITION组件,从分区表介绍、配置与接口、配置示例三方面带大家详细了解该组件。: h2 \* @0 A( ?0 O
3 G6 ]4 w P& P' k3 m
1、概述' |; M9 d- _; r+ d' ~8 [
PARTITION组件是一个分区管理的组件。基于分区表(MTB)的分区信息来统一管理Flash分区,对分区进行统一的读写、擦除、以及验签的操作。
) P; ?3 D2 _* j+ B下面就来介绍下分区表的定义以及组件提供的一些API接口。1 Z1 h o* W d+ B& ^
9 s& {3 L. y2 w6 b
2、分区表介绍9 e& D7 s5 i o3 Q7 M# s. t
分区表简称为MTB(manifest table)。保存系统镜像的基本信息以及签名值。MTB分为两类。
. U$ p7 W; y5 z( s& s# K- ^bmtB:bootloader manifest table,记录bootloader镜像的信息,给bootrom使用
9 Y+ G) r' h) a* K L& G; eIMTB:images manifest table,记录除bootloader以外的其他镜像的信息,给bootloader使用
" g# Q+ J8 e; z8 a其中IMTB是必须的,而BMTB则取决于芯片bootrom的设计,是否需要这张BMTB表,使用BMTB的优势是可以灵活的配置boot的地址信息,避免固化在bootrom里。这2张表本身就是以分区的形式存储在Flash中的,在定义分区的时候要预留出来。分区名字也是固定为"bmtb"和"imtb"。
% `/ |, g* n& K0 p7 c
+ B% b% }! @2 p- _9 j6 t
分区的信息存储在一个叫config.yaml的文件中,一般放在工程的board或者solution目录下,在打包镜像的时候通过工具自动生成bmtb/imtb两个镜像。2 }8 y6 Q' L5 R
一个典型的分区表如下:
5 S( j" ]! h& y; X6 }, Amtb_version: 45 Z# _4 C4 Z4 `3 K" \2 i, Z1 B- \. o
chip: pangu # cb2201 / cb6501 / pangu) d1 K; z& W4 x5 g7 X7 ^* b" z
diff:
5 [7 v6 l5 h3 u& r7 C& T1 d fota_version: 0
. H8 G: A( r- {9 L5 O2 n* p ram_buf: 50 #DEC KB ( max ram need): }8 ]2 _+ |( p& Z) `3 {! h4 l5 x/ G2 c
flash_buf: 16 #DEC KB ( buffer size)* M7 C7 D. Z3 P
flash_sector: 4096 #DEC byte ( flash sector)9 _8 `1 x- X' v% B4 ^
diff_mode: 010 #BIN
, Q& O) |8 R0 V' \7 n9 t double_control: 1 #DEC (1--use 2 sector for diff restore,0--1 sector). K1 O: r6 z( p/ e
flash:; b; [7 u6 q; Y$ A) `. g+ i5 B
base_address: 0x8000000 # the base address of flash# [7 [: [4 Z$ u. k
run_base_address: 0x18000000 # the run address, maybe SDRAM address+ V- t2 K9 W$ N1 _, \1 d3 n/ x
sector: 4096 # Bytes
; J* C T# [5 E7 h: ] size: 16777216 # Bytes, $(sector count) * sector
( ?6 h. p- y& Z+ D3 N4 [partitions:: U/ q. G4 h" s3 p' k h( g9 k, H( ?$ d
- { name: bmtb, address: 0x8000000, size: 0x001000 }
3 S1 @6 H6 f4 i" _& e - { name: boot, address: 0x8001000, size: 0x020000 }+ f) W& S" O# b( K6 A# H% u
- { name: tee, address: 0x8021000, load_addr: 0x18000000, size: 0x010000 }
# e; N: n$ v8 J9 X# z- ] - { name: imtb, address: 0x8031000, size: 0x002000 }
3 b) }4 _' C$ I" d" a - { name: prim, address: 0x8033000, load_addr: 0x18010000, size: 0x300000, verify: true, update: FULL}
8 H5 q# A4 \$ r0 d1 \ - { name: kv, address: 0x8633000, size: 0x004000 }
( r# i6 P. _0 D+ [ - { name: lpm, address: 0x8637000, size: 0x020000 }
/ U4 p! L. u; t9 @. P( k - { name: misc, address: 0x8657000, size: 0x400000 }
. _6 Q, A; E/ w$ I1 }! l3 Y' z j5 T! ~1 v. Q% X0 @
3、配置与接口介绍3 l$ X- ~8 \; L4 _7 W9 R8 Q
介绍partition组件的一些参数配置和常用API接口。
- ?+ x' t! V. Q3 w8 M3.1 参数配置* s( w& A+ [0 v) y; I0 d; P
以下宏定义在PARTITION组件的yoc/partition.h文件中,用户可以在应用方案的package.yaml中的def_config字段中进行重新定义。; Y9 \( w+ D* e) \3 A
CONFIG_MAX_PARTITION_NUM:分区个数配置。: A" V% o5 O( i# B
定义最大的分区个数,如果用户没有自定义,那么默认为12个分区大小。如果ram资源比较紧张,而分区又没有达到12个,那么可以把这个宏改成实际分区个数。每减少一个分区,分别可以节省40个字节的data段size,和调用partition_init的任务最多40个字节的栈空间。
9 R8 Z! Y+ L/ e% fCONFIG_PARITION_NO_VERIFY:分区校验配置。是否开启分区校验功能,默认值为1,为不开启校验。安全的方案需要配置成0。0 U+ M7 `: _4 M, `- |2 A; `3 ]
CONFIG_NOT_SUPORRT_SASC:安全区域设置配置。配置分区的访问权限。是否支持设置安全区域,默认值为1,不支持设置安全区域。如果芯片支持,可以在board组件中配置为0,开启此功能。
6 y8 e4 C2 N! v o# r. A! W
' |$ \: f3 H( r0 L4 e/ j
. x' N5 g- g- o t# M+ B' R |
|