赞
踩
转载自:http://blog.csdn.net/tankai19880619/article/details/11639185
说明:本分析基于mstar801平台Linux2.6.35.11内核,其他内核版本仅供参考。
一、程序在内核中的位置
1.usb host做为pci总线下的一个设备存在(嵌入式系统中有可能也会直接挂在CPU上);这部分驱动由厂家实现,本分析以mstar为例。
2.USB总线驱动
kernel/drivers/usb/core/driver.c
kernel/drivers/media/video/uvc/uvc_driver.c
二、所有总线、设备和驱动的注册函数
1.设备注册
kernel/drivers/base/core.c
kernel/drivers/base/driver.c
kernel/drivers/base/bus.c
三、具体分析
情况一:当插入USB设备时USB host会检测到这一事件;然后通过USB core去匹配驱动。
当守护程序第一次运行(特殊USB设备USB hub就是这种情况)或usb port上状态发生变化(其余所有USB设备插入都是这种情况)守护进程被唤醒时,会运行hub_events函数、USB的枚举过程就是由它完成。
1.USB host部分代码
说明:从硬件层面来看,ehci主控器从PCI总线桥接,是PCI驱动程序实例。
kernel/drivers/usb/host/ehci-hcd.c
==============================================
定时器轮询:
kernel/drivers/usb/host/ehci-mstar.c
===================
当有pci中断发生后:
kernel/drivers/usb/host/ehci-pci.c
kernel/drivers/usb/core/hcd.c
kernel/drivers/usb/host/ehci-hub.c
=====================================================================
从以上分析可以看出;不论是定时器轮询还是pci中断,最终都会执行usb_hcd_giveback_urb函数:
kernel/drivers/usb/core/hcd.c
而上处urv->complete函数其实就是如下的hub_irq函数,后边会分析:
kernel/drivers/usb/core/hub.c
2.USB core即USB总线部分代码——可以看到hub是第一个USB设备而且与USB总线密切相关
kernel/drivers/usb/core/usb.c
=====================================
插句话:下边就是之前我们说的urv->complete被赋为hub_irq函数的过程;
这里说明一下:hub的探测函数的执行是在守护线程第一次运行时的情况;为什么不需要USB总线轮询后或PCI总线中断后就执行?我们会在后边hub创建线程处看到。
kernel/drivers/usb/core/hub.c
这里特别强调:hub设备是第一个USB设备,也是必须的USB设备;它不需要通过USB总线定时器轮询或PCI总线中断来触发。从下边代码也可以看出,在执行第一次hub_events之后(hub驱动的probe函数被执行、urv->complete被赋值hub_irq),该线程才会睡眠!
kernel/drivers/media/video/uvc/uvc_driver.c
3.总结
经过分析,总结:
(1).当总线上插入设备、总线会调用设备注册函数device_add/device_register;
(2).当insmod设备驱动、module_init函数里边一定有driver_register;
(3).通过上边分析,如上两个函数最终都会调用到总线驱动的match函数、进行匹配;如USB的总线match函数如下:
kernel/drivers/usb/core/driver.c
下边也看看UVC Camera驱动的id_table:
kernel/drivers/media/video/uvc/uvc_driver.c
三、usb相关结构说明
1.设备描述符
2.配置描述符
3.接口描述符
usb总线驱动中对于设备和设备驱动的匹配函数,其实就是上述1和3的匹配过程
见:kernel/drivers/usb/core/driver.c中usb_device_match函数,这部分可以进一步分析;在此、我不再分析。
大致会匹配设备所属类(Input设备?Camera设备?Audio设备?或显示设备等)和VID、PID。
五、urb数据传输分析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。