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函数(参照下图)