linux - 在 Linux 中检测到 HDD 时如何得到通知

标签 linux embedded-linux hard-drive scsi

我们有一个嵌入式 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/

相关文章:

linux - sed 只识别 HEX 序列的一部分

arduino - 从/dev/ttyACM0 读取输出会导致 beagle 板卡住(嵌入式内容)

android - 嵌入式linux/android内核开发流程

c# - 计算硬盘吞吐量

python - 了解 python subprocess.check_output 的第一个参数和 shell=True

linux - 如何在 Eclipse 中使用 GDB 进行 C/C++ 调试?

embedded-linux - 在 pkg-config 搜索路径中找不到软件包 xkbcommon。构建 Yocto 图像时

c++ - 卷到物理驱动器

python - 如何使用 Python 确定驱动器上的文件数?

c++ - 通过 C++ 程序更改 shell 的目录