我们有一个嵌入式 Linux 构建,它以处于 sleep 模式(硬件)的 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 检测发生之前尝试访问驱动器。我们可以添加 sleep ,但这不是一种可靠的机制,因为我们注意到检测所花费的时间是不确定的。
有没有办法获得内核/热插拔/等等。系统在检测到硬盘时报告?
谢谢。
最佳答案
我认为答案在 udev 中的某处设备管理器(wikipedia page)。它完全可以在嵌入式环境中使用。
它允许您 write rules能够在检测到某些设备时启动脚本/程序。
像这样的东西可以做的东西:
KERNEL=="sda", RUN+="/usr/bin/my_program"
如果你有一个旧内核,你可能有 hotplug系统激活。
最后的机会是 inotify该工具可让您监控文件系统中的任何内容(甚至/dev 目录 :))。
关于linux - 在 Linux 中检测到 HDD 时如何得到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7334807/