我有一个运行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,如果设备连接到主机,则不执行任何操作充电器。
我该如何实现这一目标?
答案 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
如果与主机的握手成功,那么它将被读作“外围设备”,如果失败,它将“空闲”。