【问题标题】:Handling of device insertion and removal on Embedded Linux在嵌入式 Linux 上处理设备插入和移除
【发布时间】:2013-09-24 05:44:59
【问题描述】:

我在 QT (Embedded linux) 中有一个 USB 接口的应用程序。

当 Pendrive 插入内核为此发送信号时,我想识别该信号并希望我的 QT 应用程序检测到它。

我浏览了 QT 的 unix 信号处理教程,但找不到任何解决问题的方法。

我实现了与教程中相同的操作,但我没有找到检测 pendrive 的方法。它只会杀死进程。

请通过以下链接。

QT Unix Signal Handling

我还发现使用 qt 的 QdBus 库。我交叉编译了它,但给了我 lidbus 版本的错误。

还有其他方法可以从应用程序中检测到外置随身碟吗?

【问题讨论】:

  • 您可能想查看libusb,尤其是hotplug event handling
  • 内核绝对不会在设备插入/移除时向应用程序发送 unix 信号! unix 信号是在进程中进行异步调用的一种非常具体的方式。您无需担心 unix 信号或 dbus。 Joachim 指出了正确的方向:您需要处理热插拔事件。

标签: linux qt embedded


【解决方案1】:

内核正在广播netlink 信息。可以的,

  • 编写自定义QSocket() 以获取netlink 信息。见:Qt Projects thread
  • 直接编写socket代码获取netlink信息
  • 使用现成的工具包,例如 libusb,它将使用 netlink
  • udev.confmdev.conf中添加一个脚本来写一个文件并使用QFileSystemWatcher;也可能是 /etc/fstabudevmdev 是标准的 hotplug 处理程序,它们具有允许您在事件上运行脚本的配置文件。底层机制再次是 netlink
如果您想自动挂载文件系统,

解析 netlink 或使用 /etc/fstab 可能会更好。如果选择解析路由,则需要解析the name=value information搜索netlink,相当简单。

【讨论】:

  • 请参阅:Why and How to Use Netlink Socket 和可能来自 Linux JournalManipulating the Networking Environment Using RTNETLINK。可能还有许多其他教程可用; libusb 是可以的,但是除非你想直接操作一个USB 设备,否则它似乎太过分了。为了简单地获得大容量存储的通知,我认为其他机制之一将更有效地实现相同的结果。另外,我不认为 fstab 允许在看了一点之后执行脚本。
  • 我得到了解决方案 我使用了 mkdev.conf 的 busybox 工具。其中我添加了对 USB pendrive 检测的支持,并使用 udev 实用程序在 linux 和应用程序信号处理程序之间建立了桥梁。
【解决方案2】:

我得到了解决方案 我使用了 mkdev.conf 的 busybox 工具。其中我添加了对 USB pendrive 检测的支持,并使用 udev 实用程序在 linux 和应用程序信号处理程序之间建立了桥梁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多