跳转至

ipc_fs

IPC文件系统(ipc_fs)模块提供跨核心文件系统访问的IPC通信框架,支持服务端注册操作回调并处理来自其他核心的文件操作请求,包括文件的创建、打开、读写、定位、状态查询以及目录操作等。

头文件清单

#include <middleware/utils/ipc_fs/ipc_fs_common.h>
#include <middleware/utils/ipc_fs/ipc_fs_server.h>

接口清单

接口名称 功能简述
ipc_fs_server_register_ops 注册IPC文件系统服务端操作回调函数集
ipc_fs_server_handle 处理来自指定核心的IPC文件系统消息请求

Functions

ipc_fs_server_register_ops

函数声明

int32_t ipc_fs_server_register_ops(const ipc_fs_server_ops *ops);

头文件清单

#include <middleware/utils/ipc_fs/ipc_fs_server.h>

功能说明

  • 注册IPC文件系统服务端操作回调函数集,包括应答发送回调、内存映射回调、内存请求与释放回调
  • 服务端通过此接口将平台相关的操作函数注册到IPC文件系统框架,供后续消息处理时调用
  • 须在调用ipc_fs_server_handle处理消息之前完成注册,否则消息处理将无法正常应答或访问远端内存

前置条件

  • ops指针不为NULL,且其成员函数指针均已完成初始化
  • IPC通信通道已初始化完成,具备跨核消息收发能力

入参

名称 参数类型 详细说明 约束取值范围
ops const ipc_fs_server_ops * 指向服务端操作回调函数集结构体的指针 非 NULL

返回值

返回值 文字含义 触发场景
0 注册成功 ops参数合法且注册操作完成
-1 注册失败 ops为NULL或注册过程中发生异常

ipc_fs_server_handle

函数声明

int32_t ipc_fs_server_handle(uint32_t src_core, uint32_t msg_id, uint8_t *payload, uint32_t payload_len);

头文件清单

#include <middleware/utils/ipc_fs/ipc_fs_server.h>

功能说明

  • 处理来自指定核心的IPC文件系统消息请求,根据消息ID和操作类型分发到对应的文件操作处理流程
  • 支持的文件操作类型包括stat、fcreate、fopen、fclose、fwrite、fread、fseek、ftell、feof、ferror、opendir、closedir、readdir
  • 须在ipc_fs_server_register_ops完成注册后调用,否则无法正确处理消息及应答

前置条件

  • 已通过ipc_fs_server_register_ops完成服务端操作回调函数集注册
  • payload指针不为NULL,payload_len与实际消息长度一致
  • IPC通信通道已初始化完成,具备跨核消息收发能力

入参

名称 参数类型 详细说明 约束取值范围
src_core uint32_t 发送消息的源核心编号 0 ~ 255
msg_id uint32_t 消息标识ID 0 ~ 0xFFFFFFFF
payload uint8_t * 指向消息载荷数据的指针 非 NULL
payload_len uint32_t 消息载荷数据长度 0 ~ 0xFFFFFFFF

返回值

返回值 文字含义 触发场景
0 处理成功 消息处理及应答完成
-1 处理失败 参数无效或消息处理过程中发生异常

Enumerations

ipc_fs_op

typedef enum {
    IPC_FS_OP_STAT,
    IPC_FS_OP_FCREATE,
    IPC_FS_OP_FOPEN,
    IPC_FS_OP_FCLOSE,
    IPC_FS_OP_FWRITE,
    IPC_FS_OP_FREAD,
    IPC_FS_OP_FSEEK,
    IPC_FS_OP_FTELL,
    IPC_FS_OP_FEOF,
    IPC_FS_OP_FERROR,
    /* DIR */
    IPC_FS_OP_OPENDIR,
    IPC_FS_OP_CLOSEDIR,
    IPC_FS_OP_READDIR,
    IPC_FS_OP_MAX
} ipc_fs_op;
枚举成员 取值 描述
IPC_FS_OP_STAT 0 获取文件状态信息
IPC_FS_OP_FCREATE 1 创建文件
IPC_FS_OP_FOPEN 2 打开文件
IPC_FS_OP_FCLOSE 3 关闭文件
IPC_FS_OP_FWRITE 4 写文件
IPC_FS_OP_FREAD 5 读文件
IPC_FS_OP_FSEEK 6 设置文件位置指针
IPC_FS_OP_FTELL 7 获取文件位置指针当前位置
IPC_FS_OP_FEOF 8 判断文件是否到达末尾
IPC_FS_OP_FERROR 9 判断文件操作是否发生错误
IPC_FS_OP_OPENDIR 10 打开目录
IPC_FS_OP_CLOSEDIR 11 关闭目录
IPC_FS_OP_READDIR 12 读取目录项
IPC_FS_OP_MAX 13 操作类型上限值

Structures

ipc_core_memmap

typedef struct {
    uintptr_t start;
    uintptr_t end;
    uintptr_t offset;
} ipc_core_memmap;

成员说明

成员名称 数据类型 描述
start uintptr_t 核心内存映射起始地址
end uintptr_t 核心内存映射结束地址
offset uintptr_t 核心内存映射偏移量

ipc_fs_server_ops

typedef struct {
    int32_t (* ipc_ack_func)(uint32_t src_core, ipc_fs_ack *ack);
    uintptr_t (* memmap)(uintptr_t addr, uint32_t len);
    void (* mem_request)(uintptr_t addr);
    void (* mem_release)(uintptr_t addr);
} ipc_fs_server_ops;

成员说明

成员名称 数据类型 描述
ipc_ack_func int32_t ()(uint32_t src_core, ipc_fs_ack ack) IPC应答发送回调函数,向源核心发送应答消息。调用时机:在ipc_fs_server_handle处理完消息后调用
memmap uintptr_t (*)(uintptr_t addr, uint32_t len) 内存映射回调函数,将远端地址映射为本地可访问地址。调用时机:在处理fread/fwrite等需要访问远端内存的请求时调用
mem_request void (*)(uintptr_t addr) 内存请求回调函数,请求访问远端内存区域。调用时机:在处理fread请求需要读取远端内存数据前调用
mem_release void (*)(uintptr_t addr) 内存释放回调函数,释放远端内存区域的访问权限。调用时机:在处理fwrite请求完成远端内存写入后调用

ipc_fs_dirent

typedef struct {
    uint8_t d_type;
    char d_name[FILE_NAME_MAX];
} ipc_fs_dirent;

成员说明

成员名称 数据类型 描述
d_type uint8_t 目录项类型
d_name char[256] 目录项名称,最大长度为FILE_NAME_MAX(256)

ipc_fs_stat_req

typedef struct {
    uint32_t path_len;
    char path[];
} ipc_fs_stat_req, ipc_fs_opendir_req;

成员说明

成员名称 数据类型 描述
path_len uint32_t 文件路径长度
path char[] 文件路径,柔性数组

ipc_fs_fcreate_req

typedef struct {
    uint32_t path_len;
    uint32_t size;
    char path[];
} ipc_fs_fcreate_req;

成员说明

成员名称 数据类型 描述
path_len uint32_t 文件路径长度
size uint32_t 文件大小
path char[] 文件路径,柔性数组

ipc_fs_fopen_req

typedef struct {
    uint32_t path_len;
    uint32_t mode_len;
    char str[];
} ipc_fs_fopen_req;

成员说明

成员名称 数据类型 描述
path_len uint32_t 文件路径长度
mode_len uint32_t 打开模式字符串长度
str char[] 路径与模式字符串,柔性数组

ipc_fs_fclose_req

typedef struct {
    uint64_t filp;
} ipc_fs_fclose_req, ipc_fs_ftell_req, ipc_fs_feof_req, ipc_fs_ferror_req;

成员说明

成员名称 数据类型 描述
filp uint64_t 文件指针句柄

ipc_fs_fwrite_req

typedef struct {
    uint32_t mode;
    uint32_t size;
    uint32_t nmemb;
    uint64_t filp;
    uint64_t addr;
    uint8_t data[];
} ipc_fs_fwrite_req;

成员说明

成员名称 数据类型 描述
mode uint32_t 读写模式,参考Macros章节IPC_FS_RW_MODE_*
size uint32_t 每个数据项大小
nmemb uint32_t 数据项数量
filp uint64_t 文件指针句柄
addr uint64_t 数据地址
data uint8_t[] 写入数据,柔性数组

ipc_fs_fread_req

typedef struct {
    uint32_t mode;
    uint32_t size;
    uint32_t nmemb;
    uint64_t filp;
    uint64_t addr;
} ipc_fs_fread_req;

成员说明

成员名称 数据类型 描述
mode uint32_t 读写模式,参考Macros章节IPC_FS_RW_MODE_*
size uint32_t 每个数据项大小
nmemb uint32_t 数据项数量
filp uint64_t 文件指针句柄
addr uint64_t 数据地址

ipc_fs_fseek_req

typedef struct {
    uint64_t filp;
    long int offset;
    int whence;
} ipc_fs_fseek_req;

成员说明

成员名称 数据类型 描述
filp uint64_t 文件指针句柄
offset long int 偏移量
whence int 偏移起始位置

ipc_fs_closedir_req

typedef struct {
    uint64_t dirp;
} ipc_fs_closedir_req;

成员说明

成员名称 数据类型 描述
dirp uint64_t 目录指针句柄

ipc_fs_readdir_req

typedef struct {
    uint64_t dirp;
    uint64_t dirent_addr;
} ipc_fs_readdir_req;

成员说明

成员名称 数据类型 描述
dirp uint64_t 目录指针句柄
dirent_addr uint64_t 目录项存储地址

ipc_fs_stat_ack

typedef struct {
    int32_t ret;
    struct stat buff;
} ipc_fs_stat_ack;

成员说明

成员名称 数据类型 描述
ret int32_t 操作返回值
buff struct stat 文件状态信息

ipc_fs_fopen_ack

typedef struct {
    uint64_t filp;
} ipc_fs_fopen_ack;

成员说明

成员名称 数据类型 描述
filp uint64_t 打开文件返回的文件指针句柄

ipc_fs_opendir_ack

typedef struct {
    uint64_t dirp;
} ipc_fs_opendir_ack;

成员说明

成员名称 数据类型 描述
dirp uint64_t 打开目录返回的目录指针句柄

ipc_fs_fclose_ack

typedef struct {
    int32_t ret;
} ipc_fs_fclose_ack, ipc_fs_fseek_ack, ipc_fs_feof_ack, ipc_fs_ferror_ack, ipc_fs_closedir_ack, ipc_fs_fcreate_ack;

成员说明

成员名称 数据类型 描述
ret int32_t 操作返回值

ipc_fs_ftell_ack

typedef struct {
    long int offset;
} ipc_fs_ftell_ack;

成员说明

成员名称 数据类型 描述
offset long int 当前文件位置指针偏移量

ipc_fs_fwrite_ack

typedef struct {
    uint32_t size;
} ipc_fs_fwrite_ack;

成员说明

成员名称 数据类型 描述
size uint32_t 实际写入的数据项数量

ipc_fs_fread_ack

typedef struct {
    uint32_t size;
    uint8_t data[];
} ipc_fs_fread_ack;

成员说明

成员名称 数据类型 描述
size uint32_t 实际读取的数据项数量
data uint8_t[] 读取的数据内容,柔性数组

ipc_fs_readdir_ack

typedef struct {
    int32_t is_null;
    ipc_fs_dirent dirent;
} ipc_fs_readdir_ack;

成员说明

成员名称 数据类型 描述
is_null int32_t 目录项是否为空,0表示非空,非0表示已无更多目录项
dirent ipc_fs_dirent 目录项信息

ipc_fs_req

#pragma pack(1)
typedef struct {
    uint8_t src_core;
    uint8_t op_type;
    uint16_t length;
    union {
        ipc_fs_stat_req stat_req;
        ipc_fs_fcreate_req fcreate_req;
        ipc_fs_fopen_req fopen_req;
        ipc_fs_fclose_req fclose_req;
        ipc_fs_fwrite_req fwrite_req;
        ipc_fs_fread_req fread_req;
        ipc_fs_fseek_req fseek_req;
        ipc_fs_ftell_req ftell_req;
        ipc_fs_feof_req feof_req;
        ipc_fs_ferror_req ferror_req;
        ipc_fs_opendir_req opendir_req;
        ipc_fs_closedir_req closedir_req;
        ipc_fs_readdir_req readdir_req;
    } req;
} ipc_fs_req;

成员说明

成员名称 数据类型 描述
src_core uint8_t 源核心编号
op_type uint8_t 操作类型,参考ipc_fs_op
length uint16_t 消息载荷长度
req union 请求联合体,包含各操作类型的请求结构

ipc_fs_ack

typedef struct {
    uint8_t src_core;
    uint8_t op_type;
    uint16_t length;
    union {
        ipc_fs_stat_ack stat_ack;
        ipc_fs_fcreate_ack fcreate_ack;
        ipc_fs_fopen_ack fopen_ack;
        ipc_fs_fclose_ack fclose_ack;
        ipc_fs_fwrite_ack fwrite_ack;
        ipc_fs_fseek_ack fseek_ack;
        ipc_fs_ftell_ack ftell_ack;
        ipc_fs_feof_ack feof_ack;
        ipc_fs_ferror_ack ferror_ack;
        ipc_fs_opendir_ack opendir_ack;
        ipc_fs_closedir_ack closedir_ack;
        ipc_fs_readdir_ack readdir_ack;
        ipc_fs_fread_ack fread_ack;
    } ack;
} ipc_fs_ack;
#pragma pack()

成员说明

成员名称 数据类型 描述
src_core uint8_t 源核心编号
op_type uint8_t 操作类型,参考ipc_fs_op
length uint16_t 消息载荷长度
ack union 应答联合体,包含各操作类型的应答结构

Macros

FILE_NAME_MAX

#define FILE_NAME_MAX          256

IPC_FS_RW_MODE_IPC

#define IPC_FS_RW_MODE_IPC     0

IPC_FS_RW_MODE_CPU

#define IPC_FS_RW_MODE_CPU     1

IPC_FS_RW_MODE_DMA

#define IPC_FS_RW_MODE_DMA     2