Linux USB Gadget驱动框架与类驱动详解
1. Gadget驱动框架基础
在Linux USB Gadget子系统中,Gadget驱动的实现通常与PDC驱动的实现相互关联。相关函数位于drivers/usb/gadget/epautoconf.c文件中,其定义在include/linux/usb/gadget.h里。以下是两个重要的函数:
-struct usb_ep *usb_ep_autoconfig(struct usb_gadget *, struct usb_endpoint_descriptor *):该方法根据描述符自动为接口选择端点。函数内部会遍历端点列表,查找与描述符匹配的空闲端点。若选择成功,返回一个未被占用的struct usb_ep对象;若失败,则返回NULL指针。
-void usb_ep_autoconfig_reset(struct usb_gadget *):此方法用于重置之前自动配置的Gadget端点。它会清除ep->driver_data等状态以及usb_ep_autoconfig()使用的已分配端点记录。
2. Gadget驱动设计
Gadget驱动框架的功能大致可分为三大类。其关键阶段的活动序列如下:
2.1 Gadget注册
类驱动使用usb_gadget_registe