linux - 如何在 Linux 2.6.37 的设备端检测 USB 电缆何时连接/断开连接?

标签 linux usb

我有一个运行 linux 2.6.37 的嵌入式设备。

我希望我的应用程序知道 USB 何时连接。

目前我可以通过池化来实现这个 /sys/devices/platform/musb/musb-hdrc.0/vbus

但是,这种方法不区分 USB 充电器或 USB 主机。

我找到了这个 udev approach但我认为它在我的内核版本中不可用。因为我没有在我的/dev中找到任何与USB相关的节点。 This discussing也表明它可能不可行,ether。

我还找到了linux hotplug并尝试了 netlink 示例,但是当我连接/断开 USB 电缆时,我没有看到运行该示例的任何输出。

我想做的是检测设备上的连接类型,当 USB 连接时,如果设备连接到主机,则准备(卸载文件系统)并切换到 g_file_storage,如果设备连接到主机,则不执行任何操作充电器。

我该如何实现?

最佳答案

为此,您可以使用 inotify(7)功能,在所有 linux 内核中可用,一旦在 /sys 中创建了某个设备节点就会被唤醒.

要了解您拥有的设备类型,您必须从正确的 usb ioctl 调用中读取 usb 信息(或者如果您不是内核接口(interface)专家,请使用 libusb 接口(interface))以获取设备供应商设备 ID设备类 来自设备的字段。通常,热插拔软件会收到这些事件的通知(通过一个特殊的套接字)。您没有正确初始化设备的最可能原因是 udev 系统配置文件中的一些配置错误,通常每个可能的设备供应商/设备 id 对都有一个条目并允许它加载适当的设备驱动程序来控制它。该过程继续,设备驱动程序模块动态创建实际设备,它们将出现在 /dev/ 中。文件系统作为 udevd 的一些其他内核事件的结果。

阅读 <linux_src>/Documentation 中的适当文档(此目录目录属于 linux 内核源代码,因此您可能需要安装它),以及 udevd(8)能够添加新 USB 的手册页。

关于linux - 如何在 Linux 2.6.37 的设备端检测 USB 电缆何时连接/断开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35280933/

相关文章:

php - 通过 bash 在 linux 中生成一个完全独立的进程

android - USB_DEVICE_ATTACHED 只启动 Galaxy S3 ICS 的 Activity

linux - Bash 脚本来检测我的 USB 何时插入,然后将其与目录同步

c# - 连接或断开时检测 USB 到 RS232 转换器

linux - 嵌入式 linux 设备上的 USB 驱动程序测试

c# - 控制 USB 端口的电源?

c# - 允许大写表名 linux webserver

linux - 提取与字符串匹配的所有列 awk sed python perl

python - 当通过符号链接(symbolic link)访问文件时,如何让我的 Django manage.py 正常工作?

linux - 我如何在 Makefile 中获取用户名?