我们有一个嵌入式Linux构建,该构建以处于睡眠模式的HDD(硬件)开始。然后,该软件将启动并为驱动器供电。Linux可以正常检测到驱动器: 通用标签

不幸的是,在上述SCSI检测发生之前,软件尝试访问驱动器。我们可以增加睡眠时间,但这不是一个可靠的机制,因为我们注意到检测所花费的时间是不确定的。

有什么方法可以获取内核/ hotplug / etc。系统何时检测到硬盘报告?

谢谢。

有帮助吗?

解决方案

我认为答案在 udev 设备管理器(维基百科页面)。在嵌入式环境中完全可用。

它允许您编写规则,当检测到某些设备时,这些规则可以启动脚本/程序。

类似的事情可以做到: 通用标签

如果您的内核较旧,则可能已激活 hotplug 系统。/ p>

最后一次机会将是 inotify 工具,该工具可用于监视文件中的任何内容系统(甚至/ dev目录:))。

其他提示

从最简单到最复杂的操作,您都有一组选项可以做到这一点:

  • 手动轮询。只需编写一个shell脚本,该脚本将轮询直到硬盘可用之前,才实际使用它。当然,这不是最好的解决方案,但它有效且简单。
  • mdev 。如果您的嵌入式Linux系统是基于Busybox的(我希望是这样!),那么Busybox集成了mdev程序。它的用法非常简单,并记录在 http://git.buildroot.net/ busybox / tree / docs / mdev.txt 。当检测到设备时,mdev将非常容易地允许您运行shell脚本。如果您的嵌入式Linux系统中已经有Busybox,那么绝对是我推荐的解决方案。 其他人建议的
  • udev 。这是在功能强大的台式机/服务器系统中使用的解决方案。它比mdev具有更多的依赖关系,并且设置起来有些困难。如果您只需要解决硬盘检测问题,那么我会说使用udev有点矫kill过正,但是如果您打算将其用于其他目的,为什么不呢?
  • udev + udisks + dbus ,这实际上是在完整系统上使用的。 udisks是一个守护程序,它使用udev通知系统中出现的新存储设备,它获取有关它们的一些其他信息,然后通过D-Bus发送消息。它允许提供D-Bus服务来操纵存储设备。

    我希望这为您提供了可能的解决方案的概述。

您可以收听uevent netlink套接字-您将获得与udevd相同的事件

请参见 http://lwn.net/Articles/242046/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top