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