Proc
简化版 /proc 文件系统接口,用于在运行时创建可调试的伪文件条目。支持在 /proc 下创建目录和文件,每个文件可注册 open/read/write 回调,通过文件读写实现运行时信息查询和参数调整。
适用调试阶段暴露内核状态、运行时配置参数、性能计数器等场景。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| osal_proc_init | 在 /proc 目录下创建目录 |
| osal_proc_exit | 删除由 osal_proc_init() 创建的目录及其下所有文件 |
| osal_remove_proc_entry | 删除由 osal_create_proc_entry() 创建的文件 |
| osal_create_proc_entry | 在由 osal_proc_init() 创建的目录下创建文件 |
Functions
osal_proc_init
头文件清单
功能说明
- 在 /proc 目录下创建指定名称的目录
- 该接口仅允许调用一次,即在 /proc 目录下同一时间只能存在一个由用户创建的目录
- 支持 Linux 和 LiteOS (Huawei LiteOS) 系统
前置条件
- 模块初始化状态:LOSCFG_FS_PROC 宏已开启,osal_proc.c 已参与编译
- 上下文限制:需在主线程调用,禁止在中断上下文中调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| name | const char * | 待创建的目录名称 | 非NULL,字符串长度不超过 OSAL_PROC_NAME_LENGTH(32) |
返回值
- 返回类型:void
osal_proc_exit
头文件清单
功能说明
- 删除由 osal_proc_init() 创建的目录及其下所有文件
- 调用后将清理该目录下的全部 proc 文件条目
- 支持 Linux 和 LiteOS 系统
前置条件
- 模块初始化状态:已通过 osal_proc_init() 成功创建对应目录
- 上下文限制:需在主线程调用,禁止在中断上下文中调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| name | const char * | 待删除的目录名称,与 osal_proc_init() 传入的名称一致 | 非NULL,字符串长度不超过 OSAL_PROC_NAME_LENGTH(32) |
返回值
- 返回类型:void
osal_remove_proc_entry
头文件清单
功能说明
- 删除由 osal_create_proc_entry() 创建的文件
- 删除后该文件条目不再存在于 /proc 目录结构中
- 支持 Linux 和 LiteOS 系统
前置条件
- 模块初始化状态:已通过 osal_proc_init() 成功创建目录,且已通过 osal_create_proc_entry() 在该目录下创建文件
- 上下文限制:需在主线程调用,禁止在中断上下文中调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| name | const char * | 待删除的文件名称,与 osal_create_proc_entry() 的第一个参数一致 | 非NULL |
| parent | osal_proc_entry * | 文件所在的父目录条目,由 osal_create_proc_entry() 返回 | 非NULL,须为有效的 osal_proc_entry 指针 |
返回值
- 返回类型:void
osal_create_proc_entry
头文件清单
功能说明
- 在由 osal_proc_init() 创建的目录下创建文件
- 创建成功后返回 osal_proc_entry 指针,代表 "/proc/xxx" 父目录,其中 xxx 为 osal_proc_init() 的第一个参数
- 通过返回的 osal_proc_entry 可注册 open/read/write 回调及命令列表,实现文件交互操作
- 支持 Linux 和 LiteOS 系统
前置条件
- 模块初始化状态:已通过 osal_proc_init() 成功创建目录
- 上下文限制:需在主线程调用,禁止在中断上下文中调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| name | const char * | 待创建的文件名称 | 非NULL,字符串长度不超过 OSAL_PROC_NAME_LENGTH(32) |
| parent | osal_proc_entry * | 保留参数,当前未使用 | NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| 返回值 | osal_proc_entry * | 创建成功返回有效的 osal_proc_entry 指针;创建失败返回 NULL |
返回值
- 返回类型:osal_proc_entry *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL指针 | 创建成功 | 文件条目创建成功 |
| NULL | 创建失败 | 文件条目创建失败 |
Structures
osal_proc_entry
typedef struct osal_proc_dir_entry {
char name[OSAL_PROC_NAME_LENGTH];
unsigned int cmd_cnt;
osal_proc_cmd *cmd_list;
void *proc_dir_entry;
int (*open)(struct osal_proc_dir_entry *entry);
int (*read)(struct osal_proc_dir_entry *entry);
int (*write)(struct osal_proc_dir_entry *entry, const char *buf, int count, long long *);
void *private_data;
void *seqfile;
struct osal_list_head node;
} osal_proc_entry;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| name | char[OSAL_PROC_NAME_LENGTH] | proc 条目名称,最大长度 32 |
| cmd_cnt | unsigned int | 命令列表中命令的数量 |
| cmd_list | osal_proc_cmd * | 命令列表指针 |
| proc_dir_entry | void * | 底层 proc 目录条目指针 |
| open | int ()(struct osal_proc_dir_entry ) | 文件打开回调函数 |
| read | int ()(struct osal_proc_dir_entry ) | 文件读取回调函数 |
| write | int ()(struct osal_proc_dir_entry , const char , int, long long ) | 文件写入回调函数 |
| private_data | void * | 私有数据指针 |
| seqfile | void * | 序列文件指针 |
| node | struct osal_list_head | 链表节点 |
osal_proc_cmd
typedef struct osal_proc_cmd_ {
char name[OSAL_PROC_NAME_LENGTH];
int (*handler)(unsigned int argc, char (*argv)[PROC_CMD_SINGEL_LENGTH_MAX], void *private_data);
} osal_proc_cmd;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| name | char[OSAL_PROC_NAME_LENGTH] | 命令名称,最大长度 32 |
| handler | int ()(unsigned int, char ()[PROC_CMD_SINGEL_LENGTH_MAX], void *) | 命令处理回调函数 |