免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3517 | 回复: 4
打印 上一主题 下一主题

USB设备的probe是如何引发的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-02 17:45 |只看该作者 |倒序浏览
本帖最后由 newbieforever 于 2011-09-02 17:47 编辑

看内核代码对USB设备的检测这块不是很理解, USB设备在注册设备驱动的时候在usb_driver中会提供probe和disconnect的函数,这个应该是在USB设备插入和拔除后调用的吧

系统是如何发现USB设备插入和拔除的?以及如何确定该USB设备对应的驱动程序,并调用其probe和disconnect函数的?

我不知道上面两项处理的代码具体在哪里,有知道的告诉下 谢谢

论坛徽章:
0
2 [报告]
发表于 2011-09-02 18:51 |只看该作者
假设 U盘
当U 盘插入时,EHCI 会检测到,执行中断处理程序,具体情况建议楼主看一下 spec
若还没有注册 U 盘的驱动程序,U 盘插入后只做了一些初始化,一般系统会自动加载 usb-storage.ko ,此时由于设备已经注册,并且 usb-storage support this device ,然后便进入到 usb-storage 的驱动程序中, probe 函数开始执行,往后就是挂在文件系统等等......

论坛徽章:
0
3
发表于 2011-09-05 00:33
其实在不同的USB设备里都存在一个接口电路,这个电路主要是通过不同的电路阻抗值来让USB控制器区分不同类的USB设备的,U盘也是一样的。如果你是想研究U盘的驱动的话,首先你必须大致看以下USB2.0的规范,整个U盘的驱动都是以usb.c 和usb.h这个文件为中心的,我推荐你看看《Linux那些事之U盘》,讲解的很详细,也很生动,如果你觉得长的话,我打大学论文就是看过这本书后写的,可以给你看看。
email:bmw88661@126.com

论坛徽章:
0
4 [报告]
发表于 2011-09-05 08:02 |只看该作者
楼上说的硬件方面的知识吧,只要支持中断,然后内核支持USB模块,那么剩下的USB设备归属问题是由内核代码解决的,属于模块性质模块的加载等等,这是在内核部分。
一个热插拔事件是内核到用户空间的通知,当系统配置发生变化。kobject被创建或销毁就产生,事件。热插拔事件转化为对一个对/sbin/hotplug的调用,响应每个事件,通过加载驱动,创建设备节点,安装分区等

论坛徽章:
0
5 [报告]
发表于 2011-09-06 12:40 |只看该作者
系统是如何发现USB设备插入和拔除的?
ehci_irq , 发生port change detect中断STS_PCD
usb/core/hub.c
hub_thread -> hub_events -> hub_port_connect_change -> usb_new_device -> device_add

以及如何确定该USB设备对应的驱动程序,并调用其probe和disconnect函数的?
usb/core/driver.c
到bus上的match函数usb_device_match,根据usb id 来匹配调用哪个driver,每个driver也会设定id_table,可指定id,或匹配protocol等方式
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP