USB驱动程序框架:
app:
------------------------------------------------------------------------------------
USB设备驱动程序
内核 -------------------------------------------------------------------------
USB总线驱动程序
------------------------------------------------------------------------------------
USB主机控制器
UHCI OHCI EHCI
硬件 -----------------------------------------------
USB设备
USB总线驱动程序有三种规范:
UHCI: intel 低速(1.5Mbps)/全速(12Mbps)
OHCI: microsoft 低速、全速
EHCI: 高速(480Mbps)
USB总线驱动程序的作用
1.识别USB设备
1.1分配地址,并高速USB设备(set address)
1.2发出命令获取描述符
2.查找并安装对应的设备驱动程序
3.提供USB读写函数
把USB设备接到开发板上,看输出信息:
usb 1-1:new full speed USB device using s3c2410-ohci and address 2 验证了上述说法。
在内核的drivers目录下查找关键字找到这句话:
grep "USB device using" * -nR 后找到 usb/core/hub.c:2657: "%s %s speed %sUSB device using %s and address %d\n",
依次找到函数的调用关系:
hub_irq
kick_khubd
hub_thread
hub_events
hub_port_connnect_change
choose_address(udev); //给新设备分配编号(地址)
hub_port_init //usb 1-1:new full speed USB device using s3c2410-ohci and address 2
hub_set_address //把编号(地址)告诉USB设备
usb_get_device_descriptor(udev,8); //获取设备描述符