如何在 Linux 2.6.37 中检测设备端的 USB 电缆何时为 connected/disconnected?
How to detect when a usb cable is connected/disconnected on the device side in Linux 2.6.37?
我有一个运行 linux 2.6.37.
的嵌入式设备
我希望我的应用程序知道何时连接了 USB。
目前我可以通过池化来实现
/sys/devices/platform/musb/musb-hdrc.0/vbus
.
但是这种方法不区分 USB 充电器或 USB 主机。
我发现这个udev approach but I don't think it's available in my version of the kernel. because I did not find any USB related nodes in my /dev
. This discussing也说明可能不可行,ether
我也找到了 linux hotplug 并尝试了 netlink 示例,但是当我 connect/disconnect USB 电缆时我没有看到任何输出 运行 这个示例。
我想做的是检测设备上的连接类型,当 USB 连接时,准备(卸载文件系统)并切换到 g_file_storage 如果设备连接到主机,什么也不做如果设备连接到充电器。
我该如何实现?
为此,您可以使用 inotify(7)
功能,所有 linux 内核都可用,一旦在 /sys
.[=16 中创建了某个设备节点,它就会被唤醒=]
要知道你有什么类型的设备,你必须从正确的 usb ioctl 调用中读取 usb 信息(或者如果你不是内核接口专家,使用 libusb
接口)以获得 device vendor、device id 和 device class 字段来自设备。通常,热插拔软件会收到这些事件的通知(通过一个特殊的套接字)。您没有正确初始化设备的最可能原因是 udev 系统配置文件中的一些错误配置,通常每个可能的 device vendor/device id 对都有一个条目并允许它加载适当的设备驱动程序来控制它。该过程继续使用设备驱动程序模块动态创建实际设备,并且由于某些其他内核事件到 udevd,它们将出现在 /dev/
文件系统中。
阅读 <linux_src>/Documentation
中的适当文档(此目录目录属于 linux 内核源代码,因此您可能需要安装它),以及 udevd(8)
手册页以能够添加一个新的USB。
在 2.6.37 内核上,这可以通过轮询来完成
/sys/devices/platform/musb-omap2430.0/musb-hdrc.0/mode
如果与主机的握手成功,那么它将显示为 "peripheral",如果失败,它将显示为 "idle"。
我有一个运行 linux 2.6.37.
的嵌入式设备我希望我的应用程序知道何时连接了 USB。
目前我可以通过池化来实现
/sys/devices/platform/musb/musb-hdrc.0/vbus
.
但是这种方法不区分 USB 充电器或 USB 主机。
我发现这个udev approach but I don't think it's available in my version of the kernel. because I did not find any USB related nodes in my /dev
. This discussing也说明可能不可行,ether
我也找到了 linux hotplug 并尝试了 netlink 示例,但是当我 connect/disconnect USB 电缆时我没有看到任何输出 运行 这个示例。
我想做的是检测设备上的连接类型,当 USB 连接时,准备(卸载文件系统)并切换到 g_file_storage 如果设备连接到主机,什么也不做如果设备连接到充电器。
我该如何实现?
为此,您可以使用 inotify(7)
功能,所有 linux 内核都可用,一旦在 /sys
.[=16 中创建了某个设备节点,它就会被唤醒=]
要知道你有什么类型的设备,你必须从正确的 usb ioctl 调用中读取 usb 信息(或者如果你不是内核接口专家,使用 libusb
接口)以获得 device vendor、device id 和 device class 字段来自设备。通常,热插拔软件会收到这些事件的通知(通过一个特殊的套接字)。您没有正确初始化设备的最可能原因是 udev 系统配置文件中的一些错误配置,通常每个可能的 device vendor/device id 对都有一个条目并允许它加载适当的设备驱动程序来控制它。该过程继续使用设备驱动程序模块动态创建实际设备,并且由于某些其他内核事件到 udevd,它们将出现在 /dev/
文件系统中。
阅读 <linux_src>/Documentation
中的适当文档(此目录目录属于 linux 内核源代码,因此您可能需要安装它),以及 udevd(8)
手册页以能够添加一个新的USB。
在 2.6.37 内核上,这可以通过轮询来完成
/sys/devices/platform/musb-omap2430.0/musb-hdrc.0/mode
如果与主机的握手成功,那么它将显示为 "peripheral",如果失败,它将显示为 "idle"。