|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
YoC基础软件平台具有丰富的IoT组件,可有效支持RISC-V生态应用开发。前几期内容中,我们已经陆续介绍了YoC的CSI组件、AT组件和AV(多媒体)组件。本期内容,我们将为大家介绍YoC的PARTITION组件,从分区表介绍、配置与接口、配置示例三方面带大家详细了解该组件。# C/ f+ Y0 |7 c2 G. j# M4 D: z% W
, f1 ?9 t4 F0 Q( T6 n8 d
1、概述, _4 h- n: r4 @& I# Q
PARTITION组件是一个分区管理的组件。基于分区表(MTB)的分区信息来统一管理Flash分区,对分区进行统一的读写、擦除、以及验签的操作。5 l# X. X) c7 P; s- W
下面就来介绍下分区表的定义以及组件提供的一些API接口。0 R6 H# O2 F; b
. i$ C5 A+ ^ p1 E8 J2、分区表介绍/ k1 \4 G6 d: `7 k
分区表简称为MTB(manifest table)。保存系统镜像的基本信息以及签名值。MTB分为两类。8 j8 c: L5 @) [# F/ Q4 w* ~
bmtB:bootloader manifest table,记录bootloader镜像的信息,给bootrom使用
! E, p V0 o* J: s* t/ RIMTB:images manifest table,记录除bootloader以外的其他镜像的信息,给bootloader使用
) e/ N) e' y; U6 _- N其中IMTB是必须的,而BMTB则取决于芯片bootrom的设计,是否需要这张BMTB表,使用BMTB的优势是可以灵活的配置boot的地址信息,避免固化在bootrom里。这2张表本身就是以分区的形式存储在Flash中的,在定义分区的时候要预留出来。分区名字也是固定为"bmtb"和"imtb"。* R; q' \+ k1 S, X
+ V8 B: y6 z( m' a3 g
分区的信息存储在一个叫config.yaml的文件中,一般放在工程的board或者solution目录下,在打包镜像的时候通过工具自动生成bmtb/imtb两个镜像。
) Z r) m1 S' ~4 r. o5 y( G+ E# C0 \: r一个典型的分区表如下:
+ Z) M' j6 N7 o7 l- F% |mtb_version: 4) K5 B2 p- | }# X
chip: pangu # cb2201 / cb6501 / pangu
8 k) k) f, ?7 \: W+ Tdiff:7 x. e" a! t% n' C, ^: y$ }8 M
fota_version: 05 p Z, J% p b% a* x4 c+ p
ram_buf: 50 #DEC KB ( max ram need)6 u% @( ]4 r0 T
flash_buf: 16 #DEC KB ( buffer size)8 P- i) H y( C
flash_sector: 4096 #DEC byte ( flash sector)
, L! [5 i" X0 `! f8 S4 b0 h diff_mode: 010 #BIN
4 C) I: `, ^/ k# S$ }2 B/ [ double_control: 1 #DEC (1--use 2 sector for diff restore,0--1 sector)
$ t( O% Z; R# Z, k) O- Tflash:
0 g7 t* @0 N! q9 L9 P0 U5 \0 t base_address: 0x8000000 # the base address of flash% A1 B6 E1 M) m
run_base_address: 0x18000000 # the run address, maybe SDRAM address5 Z' r% |4 N# U9 I% L
sector: 4096 # Bytes& W2 q X& |/ @( k( Z5 z2 c
size: 16777216 # Bytes, $(sector count) * sector, K; j) o& ]" w8 t+ D& G
partitions:
Q! P" r* Q2 C/ p# f1 l - { name: bmtb, address: 0x8000000, size: 0x001000 }1 E5 N# E' p4 H5 P" p+ l( ~
- { name: boot, address: 0x8001000, size: 0x020000 }7 ^& d* r) Y" z, M. Z3 h: b7 V
- { name: tee, address: 0x8021000, load_addr: 0x18000000, size: 0x010000 }
9 i+ a9 _& |; M A+ ?7 i) @1 B2 ^ - { name: imtb, address: 0x8031000, size: 0x002000 }
1 ~7 I" l9 s9 }7 e, d - { name: prim, address: 0x8033000, load_addr: 0x18010000, size: 0x300000, verify: true, update: FULL}9 c6 N$ L& R1 S( Y3 y2 W
- { name: kv, address: 0x8633000, size: 0x004000 }
' ]; v) J, e) q. g; W8 H6 E - { name: lpm, address: 0x8637000, size: 0x020000 }: ~& d8 e& U2 J4 o2 y
- { name: misc, address: 0x8657000, size: 0x400000 }6 V- e- Y6 b% |2 d3 B; t+ v; v
& I% ]) S, y6 h3、配置与接口介绍
$ ^" z& @# e6 A. j, i介绍partition组件的一些参数配置和常用API接口。( `2 Z- D" Z4 Y5 Q2 d
3.1 参数配置 \7 }6 O7 G4 `7 |; Z* f
以下宏定义在PARTITION组件的yoc/partition.h文件中,用户可以在应用方案的package.yaml中的def_config字段中进行重新定义。9 _3 P/ ]4 \. [) l% v% M# r$ U
CONFIG_MAX_PARTITION_NUM:分区个数配置。
& y) W9 E; E3 p* a0 i定义最大的分区个数,如果用户没有自定义,那么默认为12个分区大小。如果ram资源比较紧张,而分区又没有达到12个,那么可以把这个宏改成实际分区个数。每减少一个分区,分别可以节省40个字节的data段size,和调用partition_init的任务最多40个字节的栈空间。! d9 u; C6 M6 @& o
CONFIG_PARITION_NO_VERIFY:分区校验配置。是否开启分区校验功能,默认值为1,为不开启校验。安全的方案需要配置成0。
9 R" n) j8 L& i1 T" L+ M1 @( M QCONFIG_NOT_SUPORRT_SASC:安全区域设置配置。配置分区的访问权限。是否支持设置安全区域,默认值为1,不支持设置安全区域。如果芯片支持,可以在board组件中配置为0,开启此功能。
* A! `0 i3 [3 B; ]. u. N( W& ~+ u l& {0 \, x: b- j
, d, d2 X! V9 n. ]$ ? |
|