【QNX+Android虚拟化方案】137 - msm-5.4 Kernel U盘 插入中断、枚举、匹配完整流程详解
【QNX+Android虚拟化方案】137 - msm-5.4 Kernel U盘 插入中断、枚举、匹配完整流程详解
- 1. HUB提交中断URB给HCD控制器,URB完成回调函数为 hub_irq()
- 2. U盘插入后,触发运行 hub_irq() 中断回调函数
- 2.1 高通 DWC3 Host HCD 初始化流程
- 2.2 urb->complete(urb) 中断回调流程
- 2.3 hub_irq() 将 hub->events 加入 hub_wq 工作队列
- 2.4 hub_event() 处理端口事件
- 2.5 hub_port_connect() 枚举识别 USB 设备, 依次初始化USB 外设为:ATTACHED -> POWERED -> 获取设备描述符 -> DEFAULT -> ADDRESS, 获取并解析 配置描述符、接口描述符、端点描述符
- 3. U盘 USB Device 和 USB Driver 匹配 流程
- 3.1 device_add(&udev->dev) 添加usb device 设备,触发 USB Device 和 usb_generic_driver通用驱动匹配,然后调用 generic_probe()开始下发配置
- 3.2 generic_probe() 下发配置,配置为 USB_STATE_CONFIGURED 模式,触发USB 接口与接口驱动匹配
- 3.3 device_add(&intf->dev) 接口驱动匹配流程,match匹配后,调用 storage_probe() 函数
- 3.4 storage_probe() 接口驱动初始化
基于原生纯净代码,自学总结 纯技术分享,不会也不敢涉项目、不泄密、不传播代码文档!!!
本文禁止转载分享 !!!
汇总链接:《【QNX+Android虚拟化方案】00 - 系列文章链接汇总》
本文链接:《【QNX+Android虚拟化方案】137 - msm-5.4 Kernel U盘 插入中断、枚举、匹配完整流程详解》
最近看了比较多的 U盘 相关问题
本文,我们完整分析下 U盘 从插入 到识别的整个过程,了解这个过程,对分析 U盘不识的问题非常有好处。
1. HUB提交中断URB给HCD控制器,URB完成回调函数为 hub_irq()
HUB
初始化时,会调用 hub_configure()->usb_fill_int_urb()->hub_activate()->usb_s