Chinaunix

标题: 检测 USB 设备插入/删除,如何实现? [打印本页]

作者: breathomn    时间: 2008-12-16 22:36
标题: 检测 USB 设备插入/删除,如何实现?
我想捕获 USB 设备 insert/remove 后相应的系统消息,判断是否有设备插入/移除,如何实现呢?
网上搜了一下大概与 udev 有关,但是具体调用什么函数?有相关的实例最好,谢谢了。
作者: dreamice    时间: 2008-12-17 09:11
标题: 回复 #1 breathomn 的帖子
这个应该是和hotplug相关的,你可以看一下热插拔相关的知识及其实现
作者: tangpujun    时间: 2008-12-17 17:12
是不是通过调用驱动程序的probe函数,可以查看相关的驱动例子
作者: dreamice    时间: 2008-12-17 17:59
标题: 回复 #3 tangpujun 的帖子
热插拔通常来说是这样的,但是硬件电路必须有相应的支持,当检测到一个设备插上或者删除后,内核会采取相应的措施。
作者: Godbach    时间: 2008-12-18 09:42
LDD3上好像没有详细将hotplub机制,我也对这方面挺感兴趣的。
作者: dreamice    时间: 2008-12-18 11:22
原帖由 Godbach 于 2008-12-18 09:42 发表
LDD3上好像没有详细将hotplub机制,我也对这方面挺感兴趣的。


热插拔涉及到的知识还是比较多的,呵呵,值得花时间去研究一下
作者: breathomn    时间: 2008-12-18 15:54
原来是内核向用户空间会发送NETLINK类的消息,在用户空间用个NETLINK的socket接收就能捕捉到了。
谢谢大家。
作者: force_eagle    时间: 2008-12-18 16:02
嵌入式的话一般还是需要硬件上支持的
作者: dreamice    时间: 2008-12-18 16:32
标题: 回复 #7 breathomn 的帖子
呵呵,你这个是内核通知用户空间的机制吧,关于底层硬件如何捕捉到,以及捕捉到后怎样加载驱动这个过程还是挺复杂的哦
作者: wqhl.mark    时间: 2008-12-19 14:41
标题: 回复 #1 breathomn 的帖子
udev机制
作者: Godbach    时间: 2008-12-19 15:04
标题: 回复 #10 wqhl.mark 的帖子
好像是用这种机制。回头仔细了解一下。那位有相关的文章,也欢迎贴上来大家一起学习啊。
作者: dreamice    时间: 2008-12-19 16:01
原帖由 Godbach 于 2008-12-19 15:04 发表
好像是用这种机制。回头仔细了解一下。那位有相关的文章,也欢迎贴上来大家一起学习啊。


udev没仔细研究,实际上热插拔技术。就是有一个内核线程,一旦检测到变化,就执行一系列操作,并通知用户层(很多情况是执行用户层挂接的一个helper函数)
作者: fly6    时间: 2009-02-20 17:20
看看Udev的源码
大概思路是UDEV通过netlink监听内核事件
当内核检查到有设备时就会通过netlink向UDEV发消息
作者: fly6    时间: 2009-02-20 17:21
要想获取这些消息,内核的hotplug必须选中
作者: star_ice    时间: 2009-02-24 09:59
这个设计到很多,2.6的 核是  udev 机制,可以看一下热插拨 ,但是内核的检测要看usb hub 协议,由内核线程检测 ,USB中断传输端点返回的信息,至于硬件支持,USB设备硬件都会支持吧,这是USB设备的属性,坛子里的人如果有时间可以好好研究下,写本书了
作者: ruanunix    时间: 2009-03-02 01:00
usb方面的问题我基本上都可以回答,这个其实是由硬件实现的中断,在中断中将设备加到usb设备的链表上去,linux kernel中实现的是协议或者说框架,跟硬件无关,这部分要看的是不同的usb master controller 的实现就知道了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2