Partition
Partition 提供分区管理功能,支持分区管理模块的初始化与分区信息查询。分区信息支持按内存地址和文件系统路径两种存储方式进行获取。
模块公共头文件
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_partition_init | 初始化分区管理模块 |
| uapi_partition_get_info | 获取指定 ID 对应的分区信息 |
Functions
uapi_partition_init
声明头文件
功能说明
- 初始化分区管理模块,为后续分区信息查询做准备。
- 校验分区镜像标识的有效性。
- 加载并解析分区表配置信息。
前置条件
- 调用时序约束:当前接口为分区模块初始化接口,须在 uapi_partition_get_info 之前调用。
- 依赖关系:当前接口依赖分区存储区域已就绪且可被访问。
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 执行成功 | 分区镜像标识校验通过且分区表加载完成 |
| Other | 其他错误码 | 分区镜像标识不匹配或分区数量不足 |
参考案例
src/application/ws53/ws53_application/main.csrc/bootloader/flashboot_ws53/startup/main.c
uapi_partition_get_info
声明头文件
功能说明
- 获取指定 ID 对应的分区信息。
- 支持按内存地址方式查询分区信息。
- 支持按文件系统路径方式查询分区信息。
前置条件
- 调用时序约束:当前接口必须在 uapi_partition_init 成功返回后调用。
- 依赖关系:当前接口依赖分区模块已完成初始化。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| partition_id | partition_ids_t | 指定的分区的 ID | partition_ids_t 全体成员 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| info | partition_information_t * | 用来保存获取到的分区信息,由调用方分配内存、函数填充 |
返回值
返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC:0 | 执行成功 | 成功获取分区信息 |
| Other | 其他错误码 | info 指针为 NULL 或指定分区配置未找到 |
参考案例
src/bootloader/flashboot_ws53/startup/main.csrc/middleware/utils/at/at_plt_cmd/at/at_plt.csrc/middleware/utils/nv/nv_storage_lib/nv_update.csrc/middleware/utils/update/common/upg_common.c
Type definitions
errcode_t
使用说明
本模块对外接口的返回值类型。
Associations
union_part_info
union {
struct {
uint32_t addr; /*!< @if Eng Address of partition if partition stored on an memory address.
@else 如果分区存储在内存地址上,addr存储分区的起始地址 @endif */
uint32_t size; /*!< @if Eng Byte length of partition if partition stored on flash or ram.
@else 如果分区存储在内存地址上,size存储分区的字节长度 @endif */
} addr_info; /*!< @if Eng The address info of the partition.
@else 分区的地址信息 @endif */
char *file_path; /*!< @if Eng File path if image partition on filesystem.
@else 如果分区存在文件系统上,file_path标识存储分区所在路径 @endif */
} part_info;
| 成员名称 | 类型 | 描述 | 接口使用逻辑 |
|---|---|---|---|
| addr_info | struct | 分区的地址信息,包含起始地址(addr)和字节长度(size) | 接口出参载体 |
| file_path | char * | 如果分区存在文件系统上,file_path 标识存储分区所在路径 | 接口出参载体 |
Enumerations
partition_type_t
typedef enum partition_type {
PARTITION_BY_ADDRESS, /*!< @if Eng Partition stored on an memory address.
@else 分区存储在内存地址上 @endif */
PARTITION_BY_PATH, /*!< @if Eng Partition stored on filesystem.
@else 分区存储在文件系统上 @endif */
PARTITION_TYPE_COUNT /*!< @if Eng type count, not a valid type.
@else 类型数量,不作为类型使用 @endif */
} partition_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| PARTITION_BY_ADDRESS | 0 | 分区存储在内存地址上 |
| PARTITION_BY_PATH | 1 | 分区存储在文件系统上 |
| PARTITION_TYPE_COUNT | 2 | 类型数量,不作为类型使用 |
partition_ids_t
typedef enum {
PARTITION_SSB = 0x0,
PARTITION_FLASH_BOOT_IMAGE = 0x1,
PARTITION_FLASH_BOOT_IMAGE_BACKUP = 0x2,
PARTITION_FLASH_ROOT_PUBLIC_KEYS_AREA = 0x3,
PARTITION_CUSTOMER_FACTORY = 0x8,
PARTITION_NV_DATA_BACKUP = 0x9,
PARTITION_NV_DATA = 0x10,
PARTITION_CRASH_INFO = 0x11,
PARTITION_CCPU_IMAGE = 0x20,
PARTITION_APP_IMAGE = 0x21,
PARTITION_FOTA_DATA = 0x22,
PARTITION_CCPU_IMAGE_BACKUP = 0x23,
PARTITION_RESERVE2 = 0x30,
PARTITION_RESERVE3 = 0x31,
PARTITION_RESERVE4 = 0x32,
PARTITION_RESERVE5 = 0x33,
PARTITION_MAX_CNT = 16 /*!< @if Eng Maximum number of partitions.
The value is recorded only as the number of partitions and is not used to determine the ID validity.
@else 分区的数量,这个枚举只用来记录分区的数量,不作为分区ID有效性的判断 @endif */
} partition_ids_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| PARTITION_SSB | 0x0 | SSB 分区 ID |
| PARTITION_FLASH_BOOT_IMAGE | 0x1 | Flash 启动镜像分区 ID |
| PARTITION_FLASH_BOOT_IMAGE_BACKUP | 0x2 | Flash 启动镜像备份分区 ID |
| PARTITION_FLASH_ROOT_PUBLIC_KEYS_AREA | 0x3 | Flash 根公钥区域分区 ID |
| PARTITION_CUSTOMER_FACTORY | 0x8 | 客户出厂分区 ID |
| PARTITION_NV_DATA_BACKUP | 0x9 | NV 数据备份分区 ID |
| PARTITION_NV_DATA | 0x10 | NV 数据分区 ID |
| PARTITION_CRASH_INFO | 0x11 | 崩溃信息分区 ID |
| PARTITION_CCPU_IMAGE | 0x20 | CCPU 镜像分区 ID |
| PARTITION_APP_IMAGE | 0x21 | 应用镜像分区 ID |
| PARTITION_FOTA_DATA | 0x22 | FOTA 数据分区 ID |
| PARTITION_CCPU_IMAGE_BACKUP | 0x23 | CCPU 镜像备份分区 ID |
| PARTITION_RESERVE2 | 0x30 | 保留分区 2 |
| PARTITION_RESERVE3 | 0x31 | 保留分区 3 |
| PARTITION_RESERVE4 | 0x32 | 保留分区 4 |
| PARTITION_RESERVE5 | 0x33 | 保留分区 5 |
| PARTITION_MAX_CNT | 16 | 分区的数量,只用来记录分区的数量,不作为分区 ID 有效性的判断 |
Structures
partition_information_t
typedef struct partition_information {
partition_type_t type; /*!< @if Eng Partition storage location type.
@else 分区存储位置类型 @endif */
union {
struct {
uint32_t addr; /*!< @if Eng Address of partition if partition stored on an memory address.
@else 如果分区存储在内存地址上,addr存储分区的起始地址 @endif */
uint32_t size; /*!< @if Eng Byte length of partition if partition stored on flash or ram.
@else 如果分区存储在内存地址上,size存储分区的字节长度 @endif */
} addr_info; /*!< @if Eng The address info of the partition.
@else 分区的地址信息 @endif */
char *file_path; /*!< @if Eng File path if image partition on filesystem.
@else 如果分区存在文件系统上,file_path标识存储分区所在路径 @endif */
} part_info; /*!< @if Eng the union of partition information(address or file path).
@else 保存分区信息(地址或文件路径)的共同体 @endif */
} partition_information_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| type | partition_type_t | 分区存储位置类型 |
| part_info | union | 保存分区信息(地址或文件路径)的共同体 |