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



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

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

对不起,如果我的问题太广泛,但这是因为我缺乏对USB技术和驱动程序开发的认识。我将根据答案澄清我的问题。

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

我的问题是是否有一种标准化的方法来检测USB端口,或者它是否依赖于操作系统(我的问题仅适用于unix家族)。

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

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

那么,当硬件连接时,内核可以提供信号吗?我应该在哪里向电脑提供我的硬件资料?是特定于操作系统的吗?我在哪里可以找到我想要的文档(我还没有找到一个明确的研究方法)?

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

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

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

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

最新更新