【问题标题】:Unix - Is it possible to detect when an USB hardware is plugged to the computerUnix - 是否可以检测 USB 硬件何时插入计算机
【发布时间】:2014-05-11 18:28:02
【问题描述】:

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

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

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

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

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

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

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

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

我们将不胜感激。感谢您的回复!

【问题讨论】:

    标签: unix usb kernel driver


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢你!你的回答对我很有帮助。那我先试试libusb,然后再试试devd,因为我在freeBSD上。顺便说一句,你的知识真的很棒!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2012-08-07
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多