2011-09-07 12 views
0

スリープモード(ハー​​ドウェア)のHDDで始まる組み込みLinuxビルドがあります。その後、ソフトウェアが起動し、ドライブの電源が入ります。 Linuxはドライブを正常に検出します:LinuxでHDDが検出された場合の通知方法

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検出が行われる前にドライブにアクセスしようとします。睡眠を加えることができますが、これは検出に要する時間が非決定論的であることに気づいたので、信頼できるメカニズムではありません。

カーネル/ hotplug/etcを入手する方法はありますか? HDDが検出されたときに報告するシステム?

ありがとうございました。

+0

参照udevdと同じイベントを取得します起動スクリプト? –

+0

残念ながら。ハードウェアはそのように配線されており、出力ピンのレベルを変更する必要があります。このピンはカーネルのinit中に利用できるかもしれないので、私はそれをチェックする必要があります。 – user626201

答えて

3

回答は、udevデバイスマネージャ(wikipedia page)のどこかにあると思います。それは埋め込まれたenvironementで完全に使用可能です。

これは、デバイスが検出されたときにスクリプト/プログラムを起動できるwrite rulesになります。このような

何かがものを行うことができます:あなたは、古いカーネルを使用している場合

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

、あなたはアクティブにhotplugシステムを有することができます。

最後に、ファイルシステム内の何か(/ devディレクトリ:)を監視するツールinotifyがあります。

+0

残念なことに、私たちのシステムはudevを実行していません。 'mdev -s'がどこからでも起動するのを見ていないのに、カーネルのホットプラグをサポートしているようです。 – user626201

+0

@ user626201:古いカーネル?多分あなたはカーネルがホットプラグデーモンを使用していますか? –

+0

うん、2.6.18ベースのカーネル – user626201

2

あなたは、単純なものから最も複雑に、これを行うためのオプションのセットがあります。

  • マニュアルポーリングを。実際に使用する前にハードディスクが使用可能になるまでポーリングするシェルスクリプトを作成してください。確かに、これは一番いい解決策ではありませんが、それは機能し、簡単です。
  • 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サービスが提供されます。

可能な解決策の概要をお伝えしたいと思います。

+0

ありがとう - 私たちは手動ポーリングに頼った。 mdevとudevはサポートされていません:(残念なことに、この特定のチップが必要でした。私たちはチップが合理的に古いのでツールのサポートが限られています。 – user626201

0
あなたはUEVENTネットリンクソケットを聞くことができ

- あなたは

は、中にスピンダウンし、それを伝えるためにはhdparmを使用し、その後、起動時のHDを起動することはできませんhttp://lwn.net/Articles/242046/

関連する問題