内核虚拟文件系统----configfs

https://blog.csdn.net/chengm8/article/details/18560725

configfs: configfs是一个基于内存的虚拟文件系统,与sysfs相反,sysfs是为了导出内核对象给用户空间查看。configfs是为了从用户空间配置内核对象,而不用重编内核与修改内核代码。

其内核对象结构如图:
在这里插入图片描述
目录: 数据结构

struct config_item {    //通常作为一个成员嵌入到子系统的结构体中

char                    *ci_name;

char                    ci_namebuf[UOBJ_NAME_LEN];

struct kref             ci_kref;

struct list_head        ci_entry;

struct config_item      *ci_parent;

struct config_group     *ci_group;

struct config_item_type *ci_type;

struct dentry           *ci_dentry;

};
初始化config_item:

void config_item_init(struct config_item *); 

初始化config_item以及item_type:

void config_item_init_type_name(struct config_item *,const char *name,struct config_item_type *type);

获取item:

struct config_item *config_item_get(struct config_item *);

释放item:

void config_item_put(struct config_item *);

目录类型:
struct config_item_type {

struct module                           *ct_owner;模块名

struct configfs_item_operations         *ct_item_ops; 目录中属性操作表

struct configfs_group_operations        *ct_group_ops;目录中组操作表

struct configfs_attribute               **ct_attrs;目录中属性

};
目录下属性操作表:

struct configfs_item_operations {    //config_item 操作表

void (*release)(struct config_item *);   //引用计数为0是调用

ssize_t (*show_attribute)(struct config_item *, struct configfs_attribute *,char *); //显示

ssize_t (*store_attribute)(struct config_item *,struct configfs_attribute *,const char *, size_t);//存储

int (*allow_link)(struct config_item *src,struct config_item *target);

int (*drop_link)(struct config_item *src,struct config_item *target);

};

属性(文件):目录下文件

struct configfs_attribute {

char                    *ca_name;

struct module           *ca_owner;

umode_t                  ca_mode;

};
配置组:

struct config_group {

struct config_itemcg_item;组中主目录

struct list_headcg_children; 子目录链表

struct configfs_subsystem *cg_subsys; 所属配置子系统

struct config_group**default_groups;

};

初始化config_group:

void config_group_init(struct config_group *group);

初始化group, item, item_type:

void config_group_init_type_name(struct config_group *group,const char *name,struct config_item_type *type);

组操作表:

struct configfs_group_operations {

struct config_item *(*make_item)(struct config_group *group,const char *name); 创建目录 mkdir调用

struct config_group *(*make_group)(struct config_group *group,const char *name);变成一个group

int (*commit_item)(struct config_item *item);

void (*disconnect_notify)(struct config_group *group,struct config_item *item); 用来删除前的清理工作

void (*drop_item)(struct config_group *group,struct config_item *item); 删除目录,rmdir调用

};
配置子系统:

struct configfs_subsystem {

struct config_groupsu_group;

struct mutex su_mutex;

};
注册一个configfs子系统:

int configfs_register_subsystem(struct configfs_subsystem *subsys);

注销:

void configfs_unregister_subsystem(struct configfs_subsystem *subsys);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在嵌入式Linux下,设备树(device tree)用来描述硬件平台的各种资源,Linux内核在启动过程中,会解析设备树,获取各种硬件资源来初始化硬件。设备树的overlay功能是指可以在系统运行期间动态修改设备树。一般情况下,如上图所示,设备树经过DTC编译器编译为二进制的hello.dtb文件,加载到内存,随Linux内核一起启动后,一般就无法更改了。如果我们想修改设备树,需要修改hello.dts文件文件,重新编译成二进制文件:hello.dtb,然后重新启动内核,重新解析。有了设备树的overlay功能,省去了设备树的重新编译和内核重启,我们可以直接编写一个设备树插件:overlay.dts,编译成overlay.dtbo后,直接给设备树“打补丁”,在运行期间就可以动态添加节点、修改节点...设备树的overlay功能,在很多场合都会用得到,会让我们的开发更加方便:外界插拔设备,无法在设备树中预先描述:耳机树莓派 + FPGA开发板基于I2C的温度传感器管脚的重新配置:PIN multiplexing修改bootcmd、分区...设备树的overlay功能,目前还没有加入到内核mainline(linux-5.10.x),但目前有些开发板和配套的BSP已经支持了,支持在系统运行期间动态修改设备树文件。如果你手头的开发板或内核平台还没有支持device tree overlay,可以学习本期课程,学习内核中设备树overlay的实现原理,如何给内核打补丁,使内核支持设备树的overlay功能。有了本期课程的学习基础,明白了设备树overlay的实现原理和运行机制,你就可以尝试在自己的开发板平台上实现这个功能了。本期课程的主要内容如下:在开发板上如何实现设备树的overlay功能Configfs文件系统的配置与挂载Configfs编程接口如何编写设备树 overlay插件设备树 overlay的编译和运行设备树overlay运行机制分析本期课程适合哪些人学习:嵌入式驱动工程师嵌入式BSP工程师嵌入式软件工程师想从事嵌入式开发的同学全网首家讲解设备树overlay的视频教程。   

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值