【问题标题】:USB pluggin detection on Linux User spaceLinux用户空间上的USB插件检测
【发布时间】:2015-10-29 08:46:39
【问题描述】:
  1. 我正在 Linux 用户空间为 HMI 编写 C 程序。我想在插入 SBC 上的 USB 端口时检测 pendrive。我在上面运行 Lubuntu。所以它没有 udev 库。当我尝试在 SBC 上安装 udev 时,它会询问依赖项并且版本兼容性问题即将到来。有没有其他方法可以从用户空间检测 Pendrive 插入。
  2. 当我将设备 ex: /dev/sdc1(pendrive) 安装到特定文件夹 ex: /mnt/vj 时,它被正确安装。如果我在没有卸载它的情况下移除了 pendrive,那么当下次 pendrive 插入时,它被检测为 /dev/sdd1 。在这种情况下如何修复 pendrive 的逻辑名称。我希望它始终是 /dev/sdc1 。有可能吗?

感谢期待。

【问题讨论】:

  • 请分享你做了什么!
  • 到目前为止,我已经写了一些不值得完整的胶水逻辑。我只是使用 system() 系统调用定期监视 /sys/block 文件夹。每当文件夹发生更改时,我都会将检测到的设备安装到定义的位置。

标签: linux linux-kernel linux-device-driver embedded-linux


【解决方案1】:
  1. 您可以实现自己的事件监听守护程序,而不是 udev。你必须创建一个NETLINK_KOBJECT_UEVENT 类型的netlink 套接字。通过解析事件,您将能够检测到驱动器的插入。

  2. 无法确保名称始终相同,但您可以在检测到事件后创建指向正确块设备的符号链接。

【讨论】:

  • 谢谢.. 我能够使用 Netlink sock 检测到 USB 插头。如何知道它是否插入了 pendrive 或 USB 键盘或鼠标。?以及如何获取驱动器的逻辑名称(即/dev/sdX)?
  • 部分事件,你得到主要和次要号码。 Major 应该是 8。每个磁盘最多可以有 15 个分区加上整个磁盘,即 16。所以 sda 和 sda[1-15] 是从 0 到 15 的次要,sdb 有 16 到 31,...跨度>
【解决方案2】:

查看链接ubuntu 12.04 libudev-dev won't install because of dependencies,如果与此相关,该链接应该主要解决您的 udev 安装/依赖问题。

udev 是检测硬件插件和获取设备信息的最简单方法之一。签出作为 udev(Linux 内核的设备管理器)一部分的 libudev。除了在 /dev 目录中管理设备节点,同时将硬件设备添加到系统中或从中删除,udev 还处理在添加/删除等各种操作期间引发的所有相关用户空间事件。

libudev 允许访问设备信息,还提供了一个监控接口,例如连接设备事件源的udev_monitor。 udev_monitor_get_fd 提供文件描述符,可与 select 系统调用一起用于监控。

查看此链接,该链接包含与使用 libudev http://www.signal11.us/oss/udev/ 相关的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多