質問

スリープモードのHDD(ハードウェア)で始まる組み込みLinuxビルドがあります。次に、ソフトウェアが起動し、ドライブへの電力供給が可能になります。Linuxはドライブを正常に検出します: ジェネラコディセタグプレ

残念ながら、ソフトウェアは上記のSCSI検出が発生する前にドライブにアクセスしようとします。スリープを追加することはできますが、検出にかかる時間が非決定論的であることに気付いたため、これは信頼できるメカニズムではありません。

kernel / hotplug / etcを取得する方法はありますか。HDDが検出されたときに報告するシステム?

ありがとうございます。

役に立ちましたか?

解決

答えは udev デバイスマネージャー(ウィキペディアページ)。組み込み環境で完全に使用できます。

これにより、一部のデバイスが検出されたときにスクリプト/プログラムを起動できるルールを作成できます。

このようなことができます: ジェネラコディセタグプレ

古いカーネルを使用している場合は、 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と同じイベントを取得します

http://lwn.net/Articles/242046/ を参照

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top