linux驱动之USB驱动程序框架

2019-07-13 08:17发布


USB驱动程序框架:

app: -----------------------------------------------------------------------                              USB设备驱动程序          ----》知道数据的含义
内核            --------------------------------------------------------                              USB总线驱动程序          -----》1、识别,2.找到匹配的设备驱动。3.提供USB读写函数(不知道数据的具体含义)
----------------------------------------------------------------------                               USB总线控制器                            UHCI  OHCI   EHCI
硬件                 -----------------------------                                    USB设备

USB总线规范:

UHCI intel 低速(1.5Mbps)/全速(12Mbps) 硬件功能强大,软件简单 OHCI microsoft 低速(1.5Mbps)/全速(12Mbps) 硬件相对较弱,软件复杂 EHCI   高速(480Mbps)   linux-2.6.30.4内核自带 OHCI。

USB总线驱动程序的作用:

1、识别USB设备 1.1分配地址 1.2告诉USB设备(set address) 1.3发出命令,获取描述符 描述符信息在在inlcude/linux/usb/ch9.h
usb_device_descriptor        usb_config_descriptor 每个硬件都有一个设备描述符号,每个设备描述服中又包含配置描述符号(多个)。


2、查找并板状对应的设备驱动程序
3、提供USB读写函数 --------------------------------------------------------------------------------------------------------------------------------------------------- 内核中usb驱动流程: hub_irq
    kick_khubd
        hub_thread
            hub_events
                hub_port_connect_change
                    usb_alloc_dev
                        dev->dev.bus = &usb_bus_type;
                    choose_address(udev);//为新设备分配编号
                        bus->devnum_next);
                    hub_port_init : "%s %s speed %sUSB device using %s and address %d ",
                        hub_set_address//把编号告诉USB设备
                        usb_get_device_descriptor;//获取设备描述符
                        retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
                    usb_new_device(udev);
                    usb_get_configuration////把所有的描述符号都都出来,解析
                    device_add//把设备放入usb_bus_type的dev链表,从usb_bus_type的driver链表里取出usb_driver逐个进行比较,                                          //把usb_interfaces和usb_driver的id_table比较
                                         //如果能够匹配,那么调用usb_driver的probe函数(参照下图)