我们有一个嵌入式Linux构建,它从休眠模式的HDD开始(硬件)。然后,软件启动并启用驱动器的电源。Linux检测到驱动器正常:
ata1: exception Emask 0x10 SAct 0x0 SErr 0x4050000 action 0x42 frozen
ata1: soft resetting port
ata1: SATA link up 1.5 Gbps (SStatus 113 SControl F0000)
ata1.00: ATA-8, max UDMA/133, 976773168 sectors: LBA48 NCQ (depth 0/32)
ata1.00: ata1: dev 0 multi count 0
ata1.00: configured for UDMA/133
ata1: EH complete
Vendor: ATA Model: Hitachi HCS5C105 Rev: JC2O
Type: Direct-Access ANSI SCSI revision: 05
SCSI device sda: 976773168 512-byte hdwr sectors (500108 MB)
sda: Write Protect is off
SCSI device sda: drive cache: write back
SCSI device sda: 976773168 512-byte hdwr sectors (500108 MB)
sda: Write Protect is off
SCSI device sda: drive cache: write back
sda: sda1 sda2
sd 0:0:0:0: Attached scsi disk sda
sd 0:0:0:0: Attached scsi generic sg0 type 0不幸的是,在上述SCSI检测发生之前,软件会尝试访问驱动器。我们可以添加睡眠,但这不是一个可靠的机制,因为我们已经注意到检测所用的时间是不确定的。
有没有办法让内核/热插拔等系统在检测到硬盘时进行报告?
谢谢。
发布于 2011-09-07 21:51:39
我想答案就在udev设备管理器(wikipedia page)的某个地方。它在嵌入式环境中完全可用。
它允许您的write rules,能够启动脚本/程序时,一些设备被检测到。
像这样的东西可以做这些事情:
KERNEL=="sda", RUN+="/usr/bin/my_program"如果你有一个旧的内核,你可以激活hotplug系统。
最后一次机会是让您监视文件系统中的任何内容(甚至是/dev inotify:)的目录工具。
发布于 2011-09-08 15:26:17
您有一组选项可以做到这一点,从最简单到最复杂:
mdev程序。它的用法非常简单,在http://git.buildroot.net/busybox/tree/docs/mdev.txt上有文档。当检测到设备时,mdev将非常容易地允许您运行外壳脚本。如果你已经在你的嵌入式Linux系统中安装了Busybox,这绝对是我recommend.mdev有更多的依赖项,并且更难设置。如果您只有硬盘检测问题要解决,我想说使用udev有点过分,但是如果您打算将它用于其他目的,为什么not.udisks是一个守护进程,它使用udev来通知系统中出现了新的存储设备,它会获得一些关于这些存储设备的附加信息,然后通过D-Bus发送消息。它允许提供D-Bus服务来操作存储设备。我希望这能让你对可能的解决方案有一个大概的了解。
发布于 2011-09-22 09:54:54
您可以监听uevent netlink套接字-您将获得与udevd相同的事件
请参阅http://lwn.net/Articles/242046/
https://stackoverflow.com/questions/7334807
复制相似问题