USB设备的probe是如何引发的?

USB设备的probe是如何引发的?
2013-01-02 | 阅: 1  转: 2  |   分享 
   修改

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

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

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


假设 U盘
当U 盘插入时,EHCI 会检测到,执行中断处理程序,具体情况建议楼主看一下 spec
若还没有注册 U 盘的驱动程序,U 盘插入后只做了一些初始化,一般系统会自动加载 usb-storage.ko ,此时由于设备已经注册,并且 usb-storage support this device ,然后便进入到 usb-storage 的驱动程序中, probe 函数开始执行,往后就是挂在文件系统等等......
 
楼上说的硬件方面的知识吧,只要支持中断,然后内核支持USB模块,那么剩下的USB设备归属问题是由内核代码解决的,属于模块性质模块的加载等等,这是在内核部分。
一个热插拔事件是内核到用户空间的通知,当系统配置发生变化。kobject被创建或销毁就产生,事件。热插拔事件转化为对一个对/sbin/hotplug的调用,响应每个事件,通过加载驱动,创建设备节点,安装分区等
 
系统是如何发现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等方式
 
然后通过match函数匹配设备id,通过id调用驱动,以及相关的probe函数等·······
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值