如何检测Linux 2.6.37中设备端连接/断开usb线缆的时间?

时间:2016-02-08 22:55:41

标签: linux usb

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

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

目前我可以通过汇集来实现这一目标 /sys/devices/platform/musb/musb-hdrc.0/vbus

然而,这种方法无法区分USB充电器或USB主机。

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

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

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

我该如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

要实现这一点,只要在inotify(7)中创建了某个设备节点,就可以使用所有Linux内核中提供的/sys功能。

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

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

答案 1 :(得分:0)

在2.6.37内核上,这可以通过轮询来完成

/sys/devices/platform/musb-omap2430.0/musb-hdrc.0/mode

如果与主机的握手成功,那么它将被读作“外围设备”,如果失败,它将“空闲”。