在Linux中检测到HDD时如何通知
-
27-10-2019 - |
题
我们有一个嵌入式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相同的事件
不隶属于 StackOverflow