跳转至

partition

分区管理模块提供对Flash分区表的读取与解析能力,支持按分区ID获取分区的存储类型及对应地址或文件路径信息,为系统各模块提供统一的分区查询接口。

头文件清单

#include <middleware/utils/partition.h>
#include <middleware/chips/3322/include/shared/partition_resource_id.h>

接口清单

接口名称 功能简述
uapi_partition_init 分区管理模块初始化
uapi_partition_get_info 获取指定分区ID的分区信息

Functions

uapi_partition_init

函数声明

errcode_t uapi_partition_init(void);

头文件清单

#include <middleware/utils/partition.h>

功能说明

  • 初始化分区管理模块,从Flash中读取分区表并解析到内存中
  • 读取Flash分区表头部的image_id字段,校验其与预期值是否匹配,不匹配则返回初始化失败
  • 解析分区表项的数量和每项的地址、大小、ID信息,存入全局分区信息结构中
  • 若分区表项数量超过最大支持数量,则仅解析前PARTITION_MAX_CNT项

前置条件

  • Flash分区表已正确烧录,分区表头部image_id与PARTITION_IMAGE_ID一致
  • Flash分区表数据结构完整,无损坏

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x0) 执行成功 分区表image_id校验通过,分区信息解析成功
ERRCODE_PARTITION_INIT_ERR(0x80003000) 分区初始化失败 分区表头部image_id与预期值不匹配

uapi_partition_get_info

函数声明

errcode_t uapi_partition_get_info(partition_ids_t partition_id, partition_information_t *info);

头文件清单

#include <middleware/utils/partition.h>

功能说明

  • 根据指定的分区ID获取该分区的信息,包括分区存储位置类型和对应的地址/路径信息
  • 当分区存储在内存地址上时,返回分区类型为PARTITION_BY_ADDRESS,并填充addr_info中的起始地址和字节长度
  • 当分区存储在文件系统上时,返回分区类型为PARTITION_BY_PATH,并填充file_path路径信息
  • 优先按地址方式查找分区,未找到时再按路径方式查找

前置条件

  • 分区管理模块已通过uapi_partition_init()初始化完成
  • 入参info不为NULL,且指向的内存空间已申请成功

入参

名称 参数类型 详细说明 约束取值范围
partition_id partition_ids_t 指定的分区ID - PARTITION_SSB_IMAGE
- PARTITION_SSB_BACKUP
- PARTITION_RECOVERY_IMAGE
- PARTITION_SELITEOS_IMAGE
- PARTITION_ACPU_IMAGE
- PARTITION_BT_IMAGE
- PARTITION_DSP_MAIN_IMAGE
- PARTITION_DSP_OVERLAY_IMAGE
- PARTITION_NV_DATA
- PARTITION_FOTA_DATA
- PARTITION_SSB_UPG_IMAGE
- PARTITION_SELITEOS_UPG_IMAGE
- PARTITION_DFX_DATA
- PARTITION_LOG_FILE
- PARTITION_DUMP_INFO
- PARTITION_FILE_SYSTEM

出参

名称 数据类型 输出说明
info partition_information_t * 分区信息,包含分区类型type及对应的地址信息或文件路径

返回值

返回值 文字含义 触发场景
ERRCODE_SUCC(0x0) 执行成功 成功获取分区信息
ERRCODE_PARTITION_INVALID_PARAM(0x80003002) 参数无效 info为NULL
ERRCODE_PARTITION_CONFIG_NOT_FOUND(0x80003003) 分区配置未找到 指定分区ID在分区表中不存在

参考案例

Enumerations

partition_type_t

typedef enum partition_type {
    PARTITION_BY_ADDRESS,  /*!< Partition stored on an memory address. */
    PARTITION_BY_PATH,     /*!< Partition stored on filesystem. */
    PARTITION_TYPE_COUNT   /*!< type count, not a valid type. */
} partition_type_t;
枚举成员 取值 描述
PARTITION_BY_ADDRESS 0 分区存储在内存地址上
PARTITION_BY_PATH 1 分区存储在文件系统上
PARTITION_TYPE_COUNT 2 类型数量,不作为有效类型使用

partition_ids_t

typedef enum {
    PARTITION_SSB_IMAGE = 0x0,
    PARTITION_SSB_BACKUP = 0x1,
    PARTITION_RECOVERY_IMAGE = 0x20,
    PARTITION_SELITEOS_IMAGE = 0x21,
    PARTITION_ACPU_IMAGE = 0x22,
    PARTITION_BT_IMAGE = 0x23,
    PARTITION_DSP_MAIN_IMAGE = 0x24,
    PARTITION_DSP0_IMAGE = PARTITION_DSP_MAIN_IMAGE,
    PARTITION_DSP_OVERLAY_IMAGE = 0x25,
    PARTITION_DSP1_IMAGE = PARTITION_DSP_OVERLAY_IMAGE,
    PARTITION_NV_DATA = 0x30,
    PARTITION_FOTA_DATA = 0x31,
    PARTITION_SSB_UPG_IMAGE = 0x32,
    PARTITION_SELITEOS_UPG_IMAGE = 0x33,
    PARTITION_DFX_DATA = 0x34,
    PARTITION_LOG_FILE = 0x35,
    PARTITION_DUMP_INFO = 0x36,
    PARTITION_FILE_SYSTEM = 0x37,
    PARTITION_MAX_CNT = 15
} partition_ids_t;
枚举成员 取值 描述
PARTITION_SSB_IMAGE 0x0 SSB镜像分区
PARTITION_SSB_BACKUP 0x1 SSB备份分区
PARTITION_RECOVERY_IMAGE 0x20 恢复镜像分区
PARTITION_SELITEOS_IMAGE 0x21 SEliteOS镜像分区
PARTITION_ACPU_IMAGE 0x22 ACPU镜像分区
PARTITION_BT_IMAGE 0x23 BT镜像分区
PARTITION_DSP_MAIN_IMAGE 0x24 DSP主镜像分区
PARTITION_DSP0_IMAGE 0x24 DSP0镜像分区(别名,同PARTITION_DSP_MAIN_IMAGE)
PARTITION_DSP_OVERLAY_IMAGE 0x25 DSP Overlay镜像分区
PARTITION_DSP1_IMAGE 0x25 DSP1镜像分区(别名,同PARTITION_DSP_OVERLAY_IMAGE)
PARTITION_NV_DATA 0x30 NV数据分区
PARTITION_FOTA_DATA 0x31 FOTA数据分区
PARTITION_SSB_UPG_IMAGE 0x32 SSB升级镜像分区
PARTITION_SELITEOS_UPG_IMAGE 0x33 SEliteOS升级镜像分区
PARTITION_DFX_DATA 0x34 DFX数据分区
PARTITION_LOG_FILE 0x35 日志文件分区
PARTITION_DUMP_INFO 0x36 Dump信息分区
PARTITION_FILE_SYSTEM 0x37 文件系统分区
PARTITION_MAX_CNT 15(0xF) 分区最大数量,不作为分区ID有效性的判断

Associations

partition_information_t.part_info

union {
    struct {
        uint32_t addr; /*!< Address of partition if partition stored on an memory address. */
        uint32_t size; /*!< Byte length of partition if partition stored on flash or ram. */
    } addr_info;       /*!< The address info of the partition. */
    char *file_path;   /*!< File path if image partition on filesystem. */
} part_info;           /*!< the union of partition information(address or file path). */
成员名称 类型 描述
addr_info struct 分区的地址信息,包含起始地址和字节长度
file_path char * 分区所在文件系统路径

Structures

partition_information_t

typedef struct partition_information {
    partition_type_t type; /*!< Partition storage location type. */
    union {
        struct {
            uint32_t addr; /*!< Address of partition if partition stored on an memory address. */
            uint32_t size; /*!< Byte length of partition if partition stored on flash or ram. */
        } addr_info;       /*!< The address info of the partition. */
        char *file_path;   /*!< File path if image partition on filesystem. */
    } part_info;           /*!< the union of partition information(address or file path). */
} partition_information_t;

成员说明

成员名称 数据类型 描述
type partition_type_t 分区存储位置类型,标识分区存储在内存地址或文件系统上
part_info union { struct { uint32_t addr; uint32_t size; } addr_info; char *file_path; } 分区信息联合体,根据type选择地址信息或文件路径

Macros

PARTITION_IMAGE_ID

#define PARTITION_IMAGE_ID  0x4B87A54B

ERRCODE_PARTITION_INIT_ERR

#define ERRCODE_PARTITION_INIT_ERR  0x80003000

ERRCODE_PARTITION_INVALID_PARAM

#define ERRCODE_PARTITION_INVALID_PARAM  0x80003002

ERRCODE_PARTITION_CONFIG_NOT_FOUND

#define ERRCODE_PARTITION_CONFIG_NOT_FOUND  0x80003003