分享

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

 lchjczw 2012-03-27

看内核代码对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函数等·······

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多