ベンダーIDと製品IDはUSBデバイス用のドライバを独立して決定しますか?

ベンダーIDと製品IDはUSBデバイス用のドライバを独立して決定しますか?

ベンダーID(VID)0123と製品ID(PID)abcd

0123:abcd

~によるとusb.org、製品IDの割り当ては、製造元によって完全に異なります。

製品ID(PID)は、各ベンダーが適切であると判断したときに割り当てられます。

したがって、間違ったベンダーが異なるドライバーを必要とし、すべて同じベンダーと製品IDを使用するさまざまなUSBデバイスを販売するのを防ぐ方法はありません。

USB Device A (needs driver X) -> 0123:abcd
USB Device B (needs driver Y) -> 0123:abcd
USB Device C (needs driver Z) -> 0123:abcd

USB.orgは、これらの潜在的なベンダーの行動が問題を引き起こす可能性があることを認めています。

重複した番号によってドライバエラーが発生する可能性があります。

他のドライバが必要なカードにIDが再利用される場合、OSが適切なドライバを決定するためにできることはありますか?

適切なドライバを推論するために使用できる(または一般的に使用される)USBデバイス用の他のフィールドはありますか?はい仮説この決定には、ベンダーIDと製品IDのみが使用されます。

0123:abcdあるいは、一般的な*nixシステムは、使用する必要があるドライバと1対1の関係を想定しているので、できることはドライバを選択するだけです。1ドライバーはそれが適切だと思いますか?

通常、ベンダーIDと製品IDのみを使用している場合は、正しいドライバーをロードするためにユーザーが手動で介入する以外に何もしないことが推測されます。

ベストアンサー1

デバイスドライバを選択するために使用できるいくつかの追加情報があります。バージョン番号、デバイスクラス、サブクラスとプロトコル、インターフェイスクラス、サブクラス、およびプロトコル。 (Linuxのドライバについては、次の点を確認してください。USB_DEVICEマクロ。出力により、どの情報が利用可能かを確認できますlsusb -v。 )

予想通り、これだけでは不十分なので、カーネルは実際にデバイス用のドライバを登録する前にドライバからプローブ機能を呼び出します。この関数は、ドライバが実際にデバイスをサポートしているかどうかを確認します。通常、Linux では ID は同じですが、実装が異なるデバイスは同じドライバによって処理されるため、複数のドライバを 1 つのデバイスにマップしません。このルールの例外を表示するには、次のようにします。

find /lib/modules/$(uname -r) -name \*.ko\* | xargs /sbin/modinfo | awk '/^filename:/ { filename = $2 } /^alias:/ { printf "%s %s\n", filename,$2 }' | sort | uniq -D -f 1 | uniq -u | less

これにより、競合するIDと一致する複数のドライバが一覧表示されます(どちらもUSBデバイスドライバではありません)。

おすすめ記事