高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1131
Apple Mass Storage Class Driver always matches to my device at startup


Q: 自分でベンダ固有のドライバを書いたマスストレージデバイスを持っています。MacOS 9.x で、このデバイスを接続してシステムを再起動すると、このデバイスには必ず、アップルのマスストレージクラスドライバがマッチされます。なぜこのようなことが起きるのでしょうか?代わりに自分で作成したドライバが使われるようにするために何かできることがありますか?

A: これは既知の問題で、USB デバイスからの Macintosh の起動をサポートしようとした結果生じています。 起動時、システムは ROM 上にあるドライバだけを利用できます。 アップルのマスストレージクラスドライバは、ROM に実装されており、USB マスストレージクラスデバイスをサポートするために利用可能な唯一のドライバです。システムの起動時には、メディアが入っている USB マスストレージクラスの各デバイス(存在していれば)をサポートするために、このドライバが使用されます。 システムの起動時に、メディアが入っているマスストレージデバイスがなく、起動後にデバイスが接続されたりメディアが挿入されたりした場合には、標準のデバイスドライバアービトレーション機能が使用され、デバイスはベンダ固有のドライバがあればそれにマッチされます。

この問題は、Mac OS 9.0(またはそれ以上)が稼動し USB が組み込まれた Power Macintosh システムだけに生じる問題です。 PCI USB カードが装備された Beige の G3、または USB が組み込まれておらず CardBus USB カードを使う PowerBook G3 にはこの問題はありません。

Mac OS 9 用にアップルのマスストレージクラスドライバを開発する段階では、USB 大容量記憶デバイスがブートデバイスでない場合には、後でベンダ固有のドライバでアップルのドライバを置き換える方法があるべきだと考えられていました。 アップル以外の USB のキーボードとマウスに関してはすでに同様のサポートが提供されていました。 時間的な制約から、USB マスストレージデバイスに対するサポートは実装することができず、アップルのマスストレージクラスドライバの今後のリリースの強化機能とすることで実装が延期されました。残念なことに、この強化機能はまだ実装されていません。現時点では、技術開発の焦点は Mac OS X にあるため、ロード時のアップルのマスストレージクラスドライバの動作を変更する予定はありません。

ここで述べた問題は主に、マルチ LUN をサポートしているマスストレージクラスデバイスに影響します。マルチ LUN の USB マスストレージデバイスを提供するハードウェアベンダは、アップルドライバがマルチ LUN をサポートしていないことを知っているため、自社のデバイスをサポートするためにベンダ固有のドライバを提供しています。アップルのマスストレージクラスドライバは、USB マスストレージデバイスでは、LUN 0 のみをサポートします。そのため、システム起動時にマルチ LUN のマスストレージクラスデバイスが接続されている場合、LUN 0 のストレージデバイスだけが検出されます。 したがってハードウェアベンダは、デバイスが確実にアップルドライバとうまく動作し、LUN 0 をサポートするように図らなければなりません。

開発者は、USB API が USBAddDriverForFSSpec の呼び出しを提供していることを知っているでしょう。この呼び出しは、USB に強制的に、現在のドライバの使用を止めさせ、別のドライバを使用させるために使います。INIT を実装することによって、アップルドライバの代わりにベンダ固有のドライバを使用させることができると考える人もいるでしょう。この方法の問題は、USBAddDriverForFSSpec の呼び出しでは、ドライブ上のファイルにシステムがアクセスしていないことを保証せずに、システムからドライバをはずしてしまうことです。これは簡単には解決できない問題です。

この状況下での選択肢は限られています。最初の選択肢は、システムの起動時に USB デバイスが接続されている場合のアップルマスストレージクラスドライバに関する制限事項をユーザに知らせると同時に、USB ボリュームのマウントを解除し、デバイスのプラグを抜き、デバイスを再び接続するように助言することです。これにより、 ベンダ固有のドライバがデバイスにマッチされます。

上記に代わる魅力的な選択肢は、デバイスがベンダ固有のクラスとサブクラスを持つようにファームウェアを変更することです。こうすることによって、アップルマスストレージクラスドライバがデバイスにマッチされることはなくなります。


[2002 年 3 月 23 日]