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
设置设备描述符
设置配置描述符
添加接口(功能)
如何通过函数ioctl了解 Vxworks系统详细资料讲解
浅谈Underlay网络和Overlay网络
LTC1645热插拔控制电路工作原理
为NVIDIA MLPerf Training v2.0性能提供动力的全堆栈优化
霍尼韦尔为对抗新冠疫情而推出数字体温筛查系统
Linux configfs的内部机制介绍
PCB设计保形涂层的作用 假冒元器件对PCBA线路板有何危害
中芯国际从纽交所退市 称与贸易战无关
军用热电池国外的发展
摩尔线程与泊湾盘古播控服务器软件完成产品兼容互认证
Micro LED直显技术已经开始引领新一代消费浪潮
在制药公司中使用人工智能可以帮助提供更好的诊断
基于TensorFlow Lite的几项技术更新
IBM研制出新型人工智能芯片是什么样子
中小河流水文监测系统是什么,它有哪些特点
苹果iPhone 5港版今日开售 iphone5水货北京今晚可到
和辉光电宣布下月试生产第6代AMOLED显示项目
天津创新创业大赛获奖企业金融路演对接会成功举办
苹果挖角英特尔工程师或将会加速苹果自研5G芯片的速度
2023 年1-11月我国汽车零部件进口金额同比下降 14.4%