USB设备被识别流程
来源:互联网 发布:pixate for mac 编辑:程序博客网 时间:2024/05/16 14:37
USB模块包括usb core,host,hub,device驱动,其中hub会启动一个内核线程名曰:khubd(hub_events一直在查询(hub使用的是中断传输), 当usb 设备连接在 hub 的某个端口上,hub检测到有设备连接了进来,hub会去调用hub_port_status函数去获取hub端口状态,要是真有设备了,会调用hub_port_connect_change函数会调用usb_alloc_dev函数为设备分配一个struct usb_device 结构的对象并初始化,这个初始化将usb设备的状态设置为 Attached,调用usb_set_device_state函数将设备的状态设置成USB_STATE_POWERED上电状态,然后复位设备,复位成功后,设备就会进入 Default状态(这个状态可以接收hcd的回应了);
然后设备又该进入 Address状态,首先调用 hub_set_address设置address状态需要发送usb_control_msg函数去设置,在usb_control_msg里面调用了usb_internal_control_msg函数,这个函数主要的功能就是创建一个控制 urb,并把它发送给 usb 设备,然后等待它完成,这个过程包括了(usb_alloc_urb、usb_fill_control_urb、usb_start_wait_urb)这三个函数调用,完了以后,调用usb_hcd_submit_urb将urb发送到HCD,HCD 每收到urb,就会将它添加到这个 urb指定的urb_list中,形成链表,现在进入了HCD模块(略),处理完以后,会返回一个状态,最后usb_api_blocking_completion会去处理这次urb的收尾工作,如果成功的话设备就是正式进入了address状态;
接下来设备要进入configer状态,这个过程需要先获取配置usb_get_device_descriptor->usb_get_descriptor先得到配置描述符中的wTotalLength字段,然后通过wTotalLength长度,获取所以配置信息,然后将获取的配置解析出来处理(此过程较为繁琐),配置好以后调用usb_new_device说明发现了设备驱动;
然后tell the world(announce_device)说明设备已经找到了,最后调用设备模型提供的接口device_add将设备添加到 usb 总线的设备列表里,然后 usb总线会遍历驱动列表里的每个驱动,调用自己的 match(usb_device_match) 函数看它们和你的设备或接口是否匹配,匹配的话调用device_bind_driver函数,现在就将控制权交到设备驱动了。
函数调用流程如下所示:
usb_hub_init(kthread_run(hub_thread, NULL, "khubd"))->
hub_thread->
hub_events->
hub_port_connect_change->
usb_new_device->
usb_enumerate_device(udev); /* Read descriptors */
announce_device(udev); /* Tell the world! */
device_add
usb_create_ep_devs
转自:http://zyg0227.blog.51cto.com/1043164/560575
- Usb设备被识别流程
- Usb设备被识别流程
- Usb设备被识别流程
- USB设备被识别流程
- USB设备被识别流程
- USB设备被识别流程
- USB设备被识别流程
- USB设备被识别流程
- USB设备被识别流程
- Usb设备被识别流程
- 无法识别usb设备
- Android 设备USB识别
- 无法识别USB设备
- Usb设备识别加载过程
- Usb设备识别加载过程
- WIN7无法识别USB设备
- VirtualBox下识别USB设备
- USB接口不识别设备
- 文本编辑常用快捷键小结
- 关于android gallery 在 3.0以上系统出错的问题
- linux服务器校对时间方法
- Cleancache and Frontswap
- 阿里巴巴Dubbo实现的源码分析
- USB设备被识别流程
- ExtJS4 文件上传 SpringMVC @ResponseBody 返回 字符串 乱码
- android调试之DDMS
- Openfire小计
- EasyUI 中多选下拉框 combotree 学习研究
- sharepoint网站登录弹框,如何设置自动加域名
- 360安全浏览器的开发人员是不是换了?做出来的东西越来越水
- JSP Note
- java装饰器模式与java.io包