usb gadget驱动框架分析

Posted hellokitty2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了usb gadget驱动框架分析相关的知识,希望对你有一定的参考价值。

以renesas BSP为例:

1.composite_driver层注册流程

usb_composite_probe
    usb_gadget_probe_driver   /*driver->udc_name没有指定为e659000.usb那么就默认是使用第一个UDC,找里面的第一个还没有被driver匹配的udc*/
        udc_bind_to_driver
            usb_gadget_udc_set_speed /*##调用usbhsg_gadget_ops中的udc_set_speed()设置为USB_SPEED_HIGH,可行并没有提供udc_set_speed()*/
            driver->bind(udc->gadget, driver) //调用模板副本composite_driver_template的bind(),也即是composite_bind
            composite_bind(struct usb_gadget *gadget, struct usb_gadget_driver *gdriver) //arg1为usbhs_mod_gadget_probe中的gadget,arg2为丰满后的composite_driver_template的副本
                composite_dev_prepare
                    usb_ep_alloc_request //##对gadget->ep0调用usbhsg_ep_ops中的alloc_request()
                    usb_gadget_set_selfpowered //##调用usbhsg_gadget_ops中的set_selfpowered(),也就是usbhsg_set_selfpowered
                composite->bind //## 调用全局carlplay_driver.bind,也就是carplay_bind,里面usb_get_function_instance,usb_add_config
                update_unchanged_dev_desc(&cdev->desc, composite->dev); //## 将carlplay_driver.dev的设备描述符拷贝到cdev->desc中
            usb_gadget_udc_start //## 调用usbhsg_gadget_ops的udc_start(),也即是usbhsg_gadget_start()
            usb_udc_connect_control //## 根据udc->vbus值,调用usbhsg_gadget_ops.pullup来进行上拉/取消Dp上的上拉电阻,也即是usbhsg_pullup
            kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); //向用户空间发送 UDEV e659000.usb CHANGE*/
            //到此usb_composite_probe执行流程结束

 

2.UDC驱动注册流程

usbhs_probe
    usbhs_mod_probe
        usbhs_mod_gadget_probe
            usb_add_gadget_udc
                list_add_tail(&udc->list, &udc_list); //这里面将这个UDC驱动放到全局链表udc_list中

 

3.gadget function注册流程

usb_function_register
    list_add_tail(&newf->list, &func_list); //仅仅是只添加到全局链表func_list而已

 

以上是关于usb gadget驱动框架分析的主要内容,如果未能解决你的问题,请参考以下文章

USB gadget 驱动 printer.c 分析

linux usb驱动——Gadget代码介绍

linux usb驱动——Gadget编译生产

:USB主机设备与Gadget驱动

RK3399平台开发系列讲解(高速设备驱动篇)6.48使用usb gadget configfs配置USB功能

RK3399平台开发系列讲解(高速设备驱动篇)6.48使用usb gadget configfs配置USB功能