- 论坛徽章:
- 0
|
本帖最后由 quanguoheme 于 2013-11-19 12:12 编辑
这个脚本,里面有个mdev -s ,这个就是启动mdev程序,可能这个就是检测的吧?
非常感谢chice,热插拔的检测原理解释的非常清楚,让人耳目一新,非常舒畅.
[quote=引用 3 楼 hygzxf 的回复:]
以usb为例。每个usb控制器都有个usb hub,在系统初始化的时候,usb hub设备注册的时候产生一个内核线程。当有设备插入hub的时候,hub芯片会检测到,这样当usb控制器来查询hub的时候。hub芯片会把有设备插入的信息通知控制器,然后控制器会发信息激活这个线程,这个线程就会自动给注册一个设备,完成后线程进入休眠等待下一次的激活。在注册设备的过程中,内核会发信息通知用户空间有设备插入,然后用户空间的热插拔相关的脚本程序会调用。自动做建立设备文件节点一类的工作。
[/quote]
疑问1:在usb层次中,这个"线程"是属于usb core层吗?或者是属于usb hub的功能,那么他的源码应该在usb hub 的驱动中对吧?
疑问2:"hub芯片会把有设备插入的信息通知USB控制器"在这个之后,USB控制器然后就会对这个插入设备进入枚举操作吧?不然,怎么得到设备的信息来初始化struct usb_device .然后进行设备注册?
疑问2:"这个"线程"就会自动给注册一个设备"注册函数在那里? :在linux-2.6.32.2\drivers\usb\core目录中没有找到一个给usb_device 进行注册的函数.
疑问3:"发信息激活这个线程"是怎么激活的?唤醒这个睡眠中线程的吗?
疑问:设备枚举是谁发出的? 应该是usb core吧?
我在补充一点hid的检测原理:
当未将device接入时,D+和D-的电压都是0V;当全速设备插入后,对于全速设备,上拉电阻是连在D+上的,上拉电阻(Rpu=1.5K)与USB HOST的下拉电阻(Rpd=15K)分压,使D+的电平为高,如果这个高有效持续2.5us以上,则USB hid认为有全速设备接入。拔掉device后,D+与D-又恢复低电平。 |
|