LinuxでHDDが検出された場合の通知方法
-
27-10-2019 - |
質問
スリープモードのHDD(ハードウェア)で始まる組み込みLinuxビルドがあります。次に、ソフトウェアが起動し、ドライブへの電力供給が可能になります。Linuxはドライブを正常に検出します: ジェネラコディセタグプレ
残念ながら、ソフトウェアは上記のSCSI検出が発生する前にドライブにアクセスしようとします。スリープを追加することはできますが、検出にかかる時間が非決定論的であることに気付いたため、これは信頼できるメカニズムではありません。
kernel / hotplug / etcを取得する方法はありますか。HDDが検出されたときに報告するシステム?
ありがとうございます。
解決
答えは
これにより、一部のデバイスが検出されたときにスクリプト/プログラムを起動できる
このようなことができます: ジェネラコディセタグプレ
古いカーネルを使用している場合は、 hotplug システムがアクティブになっている可能性があります。
最後のチャンスは、ファイル内のあらゆるものを監視できる inotify ツールです。システム(/ devディレクトリも:))。
他のヒント
これを行うには、最も単純なものから最も複雑なものまで、一連のオプションがあります。
- 手動ポーリング。実際に使用する前に、ハードディスクが使用可能になるまでポーリングするシェルスクリプトを作成するだけです。確かに、これは最も優れたソリューションではありませんが、機能し、シンプルです。
- mdev 。組み込みLinuxシステムがBusyboxベースの場合(そうだといいのですが!)、Busyboxは
mdev
プログラムを統合します。その使用法は非常に単純で、 http://git.buildroot.net/に文書化されています。 busybox / tree / docs / mdev.txt 。mdev
を使用すると、デバイスが検出されたときにシェルスクリプトを非常に簡単に実行できます。組み込みLinuxシステムにBusyboxがすでにある場合、これは間違いなく私がお勧めするソリューションです。 - udev 、他の人が提案したとおり。これは、本格的なデスクトップ/サーバーシステムで使用されるソリューションです。これは、
mdev
よりも多くの依存関係があり、セットアップが少し難しいです。解決すべきハードディスク検出の問題しかない場合は、udev
を使用するのは少しやり過ぎだと思いますが、他の目的で使用する場合は、そうしないでください。 - udev + udisks + dbus 、これは実際には本格的なシステムで使用されているものです。
udisks
は、udev
を使用して、システムに表示される新しいストレージデバイスの通知を受け取るデーモンであり、それらに関するいくつかの追加情報を取得して、D-Busを介してメッセージを送信します。これにより、D-Busサービスを提供してストレージデバイスを操作できます。これにより、考えられる解決策の概要がわかることを願っています。
ueventnetlinkソケットをリッスンできます-udevdと同じイベントを取得します
所属していません StackOverflow