打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
USB设备的probe是如何引发的?

看内核代码对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函数等·······
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux下的硬件驱动——USB设备(下)(驱动开发部分)
Linux那些事儿之我是U盘(8)总线,设备,和驱动(上)
嵌入式Linux系统中USB设备驱动程序开发的基本原理
《Linux内核编程》第二章:ALSA驱动
Linux设备驱动入门
linux driver 注册设备 platform_driver_register()
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服