Вопрос

У нас есть встроенная сборка Linux, которая запускается с жесткого диска в спящем режиме (аппаратном).Затем программное обеспечение запускается и включает питание привода.Linux нормально определяет диск:

родовое слово

К сожалению, программное обеспечение пытается получить доступ к диску до того, как произойдет вышеуказанное обнаружение SCSI.Мы могли бы добавить сон, но это ненадежный механизм, поскольку мы заметили, что время, необходимое для обнаружения, не является детерминированным.

Есть ли способ получить ядро / hotplug / и т. д.система сообщать при обнаружении жесткого диска?

Спасибо.

Это было полезно?

Решение

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

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

Что-то вроде этого могло бы помочь:

родовое слово

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

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

Другие советы

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

  • Ручной опрос . Просто напишите сценарий оболочки, который опрашивает, пока жесткий диск не станет доступным, прежде чем его использовать. Конечно, это не лучшее решение, но оно работает и простое.
  • 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 для управления устройствами хранения.

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

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

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

.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top