网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

Linux configfs的内部机制介绍

时间:2023-07-13 11:00

人气:

作者:admin

标签: 函数 

导读:2.1 configfs 和 sysfs configfs 和 sysfs 都是基于内存的虚拟文件系统,但是它们并不相同。 对于 sysfs,当内核创建某个对象时,比如注册一个 platform_drvier 时,它就会被注册进 sysfs 里。它的属...

2.1 configfs 和 sysfs
configfs 和 sysfs 都是基于内存的虚拟文件系统,但是它们并不相同。

对于 sysfs,当内核创建某个对象时,比如注册一个 platform_drvier 时,它就会被注册进 sysfs 里。它的属性就会在 sysfs
中出现:用户程序可以通过 readdir、read 函数读取这些属性,也可以通过 write 函数修改某些属性。重点在于:sysfs
中的内容是在内核里创建、销毁,内核控制着 sysfs 的生命周期。可以认为 sysfs 就是这些内核对象的观察窗口。

对于 configfs,当然也需要内核驱动程序的支撑。但是操作 configfs 的启动是用户程序:用户执行 mkdir
时会在内核里创建一个config_item 对象,用户执行 rmdir 时会销毁这个内核对象。当执行 mkdir 创建目录时,这个 config_item
的属性就会出现在这个目录下。用户程序可以执行 read、write 操作读写这些属性。与 sysfs 的不同在于:configfs
中目录、文件的生命周期由用户程序决定。

2.2 重要结构体

挂载 configfs 文件系统后,在里面创建/删除目录、读写文件、建立链接文件,都会导致内核中相关函数被调用。

站在用户的角度来说,一个文件系统里面有目录、文件两种对象。在 configfs 的内核实现中,对应 4 个概念。从底往上看:

configfs_attribute、configfs_bin_attribute:对应文件

configfs_attribute 对应的文件里含有的是可视化的字符串信息,它在内核里有一个结构体:

struct configfs_attribute { char *ca_name; struct module *ca_owner; umode_t
ca_mode; ssize_t (*show)(struct config_item *, char *); ssize_t (*store)(struct
config_item *, const char *, size_t); };

configfs_bin_attribute 对应的文件里含有的是二进制信息,它在内核里有一个结构体:

struct configfs_bin_attribute { struct configfs_attribute cb_attr; /* std.
attribute */ void cb_private; / for user / size_t cb_max_size; / max core
size */ ssize_t (*read)(struct config_item *, void *, size_t); ssize_t
(*write)(struct config_item *, const void *, size_t);};

读写文件时,会导致上述结构体里的 show/store 或者 read/write 函数被调用

文件是位于某个目录的: config_item

config_item:configfs 中的每个对象都是 config_item,后面的 config_group、subsystem
本质上都属于特殊的 config_item

config_group、subsystem,config_item 都对应一个目录

跟 config_group、subsystem 对比时,config_item 这个目录下不再有目录

在 config_item 目录下有属性文件,还可以创建链接文件

链接文件的操作结构体是:config_item_type 里的 configs_item_operations

图片

config_group:它是特殊的 config_item,它有对应一个目录

普通的 config_item:下面不再有子目录

config_group:下面还可以创建 config_item 或者 config_group,即:下面可以再创建子目录

在当前目录下操作子目录时,对应的操作结构体是:config_item_type 里的 configs_group_operations

图片

subsystem:它是 configfs 文件系中的最顶层

比如:/sys/kernel/config/usb_gadget、/sys/kernel/config/iio

在driversusbgadgetconfigfs.c中调用configfs_register_subsystem(&gadget_subsys)就会创建
subsystem,它对应 configfs 文件系统中的顶层目录usb_gadget

subsystem 也属于 config_group

图片

2.3 configfs 使用流程

跟 legacy 方法类比,要做的事情是一样的:

创建 usb_composite_dev

设置设备描述符

设置配置描述符

添加接口(功能)

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信