usb驱动之设备插拔检测
2017-07-23 11:22
615 查看
先看一张熟悉的图:
usb_bus_topo.png (94.28 KB, 下载次数: 0)
下载附件
2017-07-22 23:25 上传
可见usb设备都是接在hub上的,设备的检测自然跟hub相关了,这里以root hub为例。
看usb hub驱动代码,跟usb设备检测相关的有如下几处(按在hub_probe中的调用顺序):
1.INIT_WORK(&hub->events, hub_event);
2.usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq,
hub, endpoint->bInterval);
3.status = usb_submit_urb(hub->urb, GFP_NOIO);
第3处即向root_hub提交一个中断传输的urb,我们来看这个urb的完成函数hub_irq:
这个函数比较简单,最后又调用usb_submit_urb提交中断urb,以实现对中断端点的轮询。
这个中断urb最终会调到root_hub的定时器函数rh_timer_func,具体调用过程请分析usb_create_hcd/usb_add_hcd,usb_submit_urb,这里不赘述
这个定时器函数里,调用hc_driver的hub_status_data读取root hub的端口变化状态
kick_hub_wq实现如下:
向工作队列hub_wq提交了一个工作任务,工作函数为前面第1处的hub_event,
hub_event最终会调到hub_port_connect,处理端口设备的connect,disconnect
如果是connect,则会调用usb_alloc_dev/usb_new_device创建新的usb_device,踏上match与probe usb_device_driver和usb_driver的漫长之旅...
usb_bus_topo.png (94.28 KB, 下载次数: 0)
下载附件
2017-07-22 23:25 上传
可见usb设备都是接在hub上的,设备的检测自然跟hub相关了,这里以root hub为例。
看usb hub驱动代码,跟usb设备检测相关的有如下几处(按在hub_probe中的调用顺序):
1.INIT_WORK(&hub->events, hub_event);
2.usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq,
hub, endpoint->bInterval);
3.status = usb_submit_urb(hub->urb, GFP_NOIO);
第3处即向root_hub提交一个中断传输的urb,我们来看这个urb的完成函数hub_irq:
这个函数比较简单,最后又调用usb_submit_urb提交中断urb,以实现对中断端点的轮询。
这个中断urb最终会调到root_hub的定时器函数rh_timer_func,具体调用过程请分析usb_create_hcd/usb_add_hcd,usb_submit_urb,这里不赘述
这个定时器函数里,调用hc_driver的hub_status_data读取root hub的端口变化状态
kick_hub_wq实现如下:
向工作队列hub_wq提交了一个工作任务,工作函数为前面第1处的hub_event,
hub_event最终会调到hub_port_connect,处理端口设备的connect,disconnect
如果是connect,则会调用usb_alloc_dev/usb_new_device创建新的usb_device,踏上match与probe usb_device_driver和usb_driver的漫长之旅...
相关文章推荐
- 一个可靠的USB设备插拔检测
- USB 设备热插拔的检测
- QT5 检测 usb设备插拔
- Windows平台下Qt4与Qt5检测USB设备插拔
- QT5 检测 usb设备插拔
- android-USB-OTG 外部设备通讯 USB插拔检测
- USB 设备热插拔的检测
- 再论检测usb口的设备插拔
- usb转rs232驱动无效,已经电脑自动扫描检测硬件改动.设备无法运行错误代码10
- Linux驱动 | USB设备驱动中的URB数据结构
- 解决win7 Windows USB无法驱动/驱动错误/该设备无法启动。(代码10)
- Linux下USB设备检测
- 通用USB设备驱动源码分析
- wince下USB设备驱动缓冲区设置
- Linux usb设备驱动
- 怎么侦测USB端口上有设备插拔?
- Linux USB 驱动开发(一)—— USB设备基础概念
- 《Linux总线、设备与驱动》USBHID设备驱动
- USB--平台搭建--1--vc 6.0中开发驱动设备程序配置
- 在 QT 中使用 libusb 检测 MAC 上的 USB 设备