早期的USB只支持单一的gadget设备,使用场景较为简单,随后加入了composite framework,用来支持多个function的gadget设备,多个function的绑定在内核中完成,若需要修改,则需要修改内核,不灵活也不方便。Linux3.11版本引入了基于configfs的usb gadget configfs。usb gadget configfs重新实现了复合设备层,使用者可以在用户空间配置...
早期的USB只支持单一的gadget设备,使用场景较为简单,随后加入了composite framework,用来支持多个function的gadget设备,多个function的绑定在内核中完成,若需要修改,则需要修改内核,不灵活也不方便。Linux3.11版本引入了基于configfs的usb gadget configfs。usb gadget configfs重新实现了复合设备层,使用者可以在用户空间配置...
usb gadget configfs就是configfs子系统中的一个成员,成员的名称为"usb_gadget",成员的类型使用config_item_type描述,成员类型中包含了初始化函数gadgets_ops。因此usb gadget configfs子系统最终通过调用gadgets_make进行初始化。当加载libcomposite.ko模块后,会在/sys/kernel/config/目录下生成一个usb_gadget目录。 ...
Userspace-driven Kernel Object Configuration configfs是一个基于ram的文件系统,通过对该文件系统的操作实现对内核对象的配置 Documentation/filesystems/configfs.rst 不只是USB可以通过configfs进行配置,有些子系统也可以。理论上只要实现了configfs接口的应该都行 driver/usb/gadget/configfs.c: 通过configfs_register...
drivers/usb/gadget/configfs.c中的代码会遍历所有的configurations,对于每个配置都遍历其下的functions 然后进行绑定。 ===>有两个bind,1是gadget驱动bind UDC,另一个是function bind配置。 30.drivers/usb/gadget/configfs.c做了下列事情 - gadget's config_group - gadget...
USB Gadget Configfs在drivers/usb/gadget/configfs.c文件中实现。 5.UDC驱动 5.1.函数接口 UDC驱动模块定义如下,内核初始化或模块加载时初始化,创建udc_class,设置uevent的回调函数为usb_udc_uevent。 [drivers/usb/gadget/udc/core.c] static struct class *udc_class; static int __init usb_udc_init(void...
API Explorer SDK中心 软件开发生产线 AI开发生产线 数据治理生产线 数字内容生产线 开发者Programs Huawe...
在usb gadget configfs引入到内核之前,内核都使用硬编码的方式实现复合设备,无法在用户空间动态修改和绑定不同的function驱动,若要修改,则需要修改内核代码,重新编码,非常不方便。目前这部分代码在被放到drivers/usb/gadget/legacy/目录下。被编译成内核模块时,名称以g开头,如音频设备g_audio.ko、串口设备g_serial.ko...
以uac2.0为例,通过USB gadget configfs,用户可以在用户空间配置uac2.0设备,无需修改内核配置。配置过程通过执行特定脚本,生成的文件结构遵循预设的层次,b开头的文件配置设备描述符,functions目录下文件配置function驱动参数。在实现USB gadget configfs的过程中,关键在于初始化和调用流程分析。初始化...
@@ -1244,6 +1246,7 @@ static int configfs_composite_bind(struct usb_gadget *gadget, int ret;/* the gi->lock is hold by the caller */ gi->unbind = 0; cdev->gadget = gadget; set_gadget_data(gadget, cdev); ret = composite_dev_prepare(composite, cdev); ...