configfs --- 用户空间控制的内核对象配置
Linux configfs 是一个基于内存的虚拟文件系统,允许用户通过文件系统接口动态配置和管理内核对象。与 sysfs 不同,configfs 中的内核对象(如 USB 设备、网络配置)由用户通过 mkdir 创建、rmdir 销毁,生命周期完全由用户控制。
| 特性 | configfs | sysfs |
|---|---|---|
| 对象控制 | 用户通过 mkdir/rmdir 创建/销毁 |
内核自动创建/销毁 |
| 配置灵活性 | 高(动态配置) | 低(静态配置) |
| 典型用途 | 动态加载模块、USB Gadget 配置 | 设备树展示、硬件属性调整 |
| 文件操作 | 支持读写属性及目录操作 | 主要支持属性读写 |
configfs 使用举例 --- usb_gadget 子系统
先加载驱动
modprobe libcomposite
执行 mount -t configfs none /sys/kernel/config 后,内核会自动在 /sys/kernel/config 下生成已注册的配置子系统(如 usb_gadget)。
在usb_gadget新建一个文件夹,比如aaa,会自动在aaa内创建一些文件和文件夹

functions文件夹对应function驱动,里面创建几个文件夹对应几个function驱动,文件夹命名规则:XXX.任何字符,其中XXX对应下面的XXX
mkdir functions/XXX.0
DECLARE_USB_FUNCTION_INIT(XXX, hidg_alloc_inst, hidg_alloc);
比如 functions/hid.0
DECLARE_USB_FUNCTION_INIT(hid, hidg_alloc_inst, hidg_alloc);
如果在驱动里面有如下代码:
config_group_init_type_name(&opts->func_inst.group, "", &hid_func_type);
则创建好 functions/hid.0 后,自动生成 hid_func_type 包含的属性对应的文件

每个属性都包含读取(show)和修改(store)的函数
struct configfs_attribute { const 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); };
static const struct config_item_type hid_func_type = { .ct_item_ops = &hidg_item_ops, .ct_attrs = hid_attrs, .ct_owner = THIS_MODULE, }; static struct configfs_attribute *hid_attrs[] = { &f_hid_opts_attr_subclass, &f_hid_opts_attr_protocol, &f_hid_opts_attr_no_out_endpoint, &f_hid_opts_attr_report_length, &f_hid_opts_attr_report_desc, &f_hid_opts_attr_dev, NULL, };

浙公网安备 33010602011771号