3

私は、OS X システムからプラグが差し込まれたり取り外されたりする USB および firewire デバイスの自動検出を含むプロジェクトに取り組んでいます。特定のデバイスの場合、システムはデバイスが接続されたときにデバイスを認識し (ポートに関係なく)、デバイス固有のバンドルをロードして処理する必要があります。

これを機能させるための鍵は、明らかに各デバイスの一意の識別です。USB デバイスはベンダー ID フィールドと製品 ID フィールドの組み合わせによって識別されることは知っていますが、これは一意の ID ではなく、デバイスの「種類」のみを提供します。同じデバイスが 2 つあり、両方をコンピューターに接続している場合、それらを区別する方法が必要です。おそらくUSB記述子の他のフィールドを使用して、これを行うための一般的で信頼できる方法はありますか?

関連する質問ですが、これは USB シリアル ポートではどのように機能しますか? 同じメーカー/モデルの 2 つの USB シリアル ポートを差し込んだとします。OS X は、/dev ツリーで一意の inode を提供する必要があります。ただし、それらを /dev/usbserial1 および /dev/usbserial2 と呼ぶとします。次に、ポートを取り外してそのうちの 1 つだけを差し込んだ場合、そのポートには以前と同じ名前が付けられますか、それとも /dev/usbserial1 (唯一のポートであるため) が差し込まれるだけですか?

firewire デバイスについても同じ質問ですが、firewire デバイスには 64 ビットの GUID が必要だと思います。この場合、firewire デバイスの識別に GUID を使用することが信頼できるかどうかを検証する人を探しています。言い換えれば、同じメーカーとモデルの 2 台の別々のカメラを接続した場合、それらの GUID が異なると思いますか?

適切なハードウェアでこれらのいくつかをテストできることはわかっていますが、現時点では複数のハードウェアを持っていないため、誰かが上記の質問に対する答えの少なくともいくつかを知っていることを願っています.

4

2 に答える 2

1

運が良ければ、VID / PIDの組み合わせに加えて、USBデバイスに一意のシリアル番号が必要です。IOUSBDeviceオブジェクトを列挙している場合は、USB Serial Numberプロパティを確認してください。

于 2011-06-09T10:11:24.763 に答える
0

Windows では、Microsoft は次の方法でデバイス固有の設定を記憶しています。

  • 利用可能な場合、デバイスのシリアル番号 (USB デバイス記述子の iSerialNumber フィールド)
  • または、デバイスへの「パス」: バス (つまり、接続されているハブなど) + USB VID および PID

シリアル番号がなければ、USB デバイスは実質的に見分けがつきません。さまざまな USB ディスク ドライブを区別することはできますが、どのような種類の不揮発性メモリも持たないデバイス (多くの USB デバイスがこのカテゴリに分類されます) の場合、区別がつかないため、最善を尽くして何をすべきかを判断する必要があります。ユーザーは期待しています。

于 2011-06-09T15:53:26.147 に答える