Как получить информацию об обнаружении жесткого диска в Linux - PullRequest
0 голосов
/ 07 сентября 2011

У нас есть встроенная сборка Linux, которая начинается с жесткого диска в спящем режиме (аппаратное обеспечение).Затем программное обеспечение запускается и включает питание накопителя.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.Мы могли бы добавить режим сна, но это не надежный механизм, поскольку мы заметили, что время, необходимое для обнаружения, недетерминировано.система сообщает, когда обнаружен жесткий диск?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 07 сентября 2011

Я думаю, что ответ находится где-то в udev диспетчере устройств ( страница википедии ).Он полностью применим во встроенной среде.

Он позволяет писать правила , которые могут запускать скрипты / программы при обнаружении некоторых устройств.

Что-то подобное может помочь:

KERNEL=="sda", RUN+="/usr/bin/my_program"

Если у вас старое ядро, у вас может быть активирована система hotplug .

Последним шансом станет инструмент inotify , который позволит вам контролировать все в вашей файловой системе (даже в каталоге / dev:)).

2 голосов
/ 08 сентября 2011

Для этого у вас есть несколько вариантов, от самых простых до самых сложных:

  • Ручной опрос . Просто напишите сценарий оболочки, который опрашивает, пока жесткий диск не станет доступным, прежде чем фактически его использовать. Конечно, это не самое лучшее решение, но оно работает и просто.
  • mdev . Если ваша встроенная система Linux основана на Busybox (что, я надеюсь, так и есть!), То Busybox интегрирует программу mdev. Его использование очень просто и задокументировано в http://git.buildroot.net/busybox/tree/docs/mdev.txt. mdev, что позволит вам легко запускать сценарий оболочки при обнаружении устройства. Если у вас уже есть Busybox в вашей встроенной Linux-системе, я определенно рекомендую это решение.
  • udev , как предложено другими. Это решение используется в полноценных настольных / серверных системах. Он имеет больше зависимостей, чем mdev, и его немного сложнее настроить. Если вам нужно решить проблему с обнаружением жесткого диска, я бы сказал, что использование udev немного излишне, но если вы собираетесь использовать его для других целей, почему бы и нет.
  • udev + udisks + dbus , это фактически то, что используется в полномасштабных системах. udisks - это демон, который использует udev для уведомления о появлении в системе новых устройств хранения, он получает некоторую дополнительную информацию о них и затем отправляет сообщение по D-Bus. Это позволяет предоставлять услуги D-Bus для манипулирования устройствами хранения.

Надеюсь, это даст вам обзор возможных решений.

0 голосов
/ 22 сентября 2011

Вы можете прослушать сокет uevent netlink - вы получите те же события, что и udevd

см. http://lwn.net/Articles/242046/

...