Unix - 是否可以检测USB硬件何时插入计算机

时间:2014-05-11 18:28:03

标签: unix usb kernel driver

我想在将arduino硬件连接到笔记本电脑时自动启动程序。

我知道这有可能,因为当我连接我的iPod时,Itunes的工作方式就是这样。

很抱歉,如果我的问题太广泛,但是因为我对USB技术和驱动程序开发缺乏认可。我会根据答案澄清我的问题。

我找到了一个dmesg(http://www.freebsd.org/doc/handbook/usb-disks.html)的主题,但在我的Mac OSX上,响应与示例不同(我有很多代码签名错误,并且有很多输出信息)。所以我假设这取决于操作系统。

我的问题是,是否有标准的方法来检测USB端口,或者它是否依赖于操作系统(我的问题仅针对unix系列)。

目前,我找到的解决方案是拿一个cron并扫描tty。文件并检查它是否可以响应我的信号,如果可以,我启动我的程序。但这确实是一个肮脏的积极解决方案。

我没有关于它的任何明确文件。但那只是因为我不知道在哪里可以找到文档。我知道usbconfig可以提供有关设备的信息,但它没有预先安装到mac机器中。

那么,内核是否可以在连接硬件时提供信号?我应该在哪里向计算机提供硬件信息?是特定于操作系统吗?我可以在哪里找到我想要的文件(我还没有找到明确的研究方法)?

将非常感谢帮助。谢谢你的回复!

1 个答案:

答案 0 :(得分:0)

不幸的是,USB设备通知是特定于操作系统的。关于这个问题没有官方标准,因此每个实现都是不同的,即使在各种类Unix系统中也是如此。

在Linux上,内核通过(IIRC)通知udev守护程序打开netlink socket,然后udev可以使用各种方法通知其余的用户空间。我相信FreeBSD使用devd也是出于同样的目的 - 我希望OS X也有自己的方法来做到这一点。

您可以使用libusb中的设备枚举工具构建跨平台解决方案。它是跨平台的,并且具有多种编程语言的绑定,因此您应该能够启动一个小守护进程来执行此操作...