7

この質問には 2 つの要素があります。

1- USB デバイスからドライバーを手動で切り離し、別のドライバーを接続するにはどうすればよいですか? たとえば、接続時に自動的に usb-storage ドライバーを使用するデバイスがあります。

// usbview 出力

Vendor Id: xxxx
Product Id: xxxx
...
    Number of Interfaces: 2
    Interface Number: 0
        Name: usb-storage
        Number of Endpoints: 2
        ...
    Interface Number: 1
        Name: (none)
        Number of Endpoints: 2
        ...

usb-storage ドライバーを使用したくないので、libusb ライブラリーを使用して usb-storage ドライバーをデタッチし、インターフェースを要求するホスト上でアプリケーションを実行しています。その後、USB デバイスとホスト Linux システムで実行されているアプリケーションとの間でデータを送受信できます。

アプリケーションの外部でドライバーを手動で切り離すにはどうすればよいですか?

2- デバイス プラグインに接続するドライバーを自動的に割り当てるにはどうすればよいですか。現在、デバイスのアクセス許可を自動的に設定する udev ルールをセットアップしています。

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"

udev ルールを使用して、USB デバイスの特定のインターフェイスにドライバーを割り当てることはできますか? たとえば、usbnet モジュールを usb-storage の代わりにインターフェイス 0 で自動的に使用したい場合、udev でそれは可能ですか?

ありがとう、

(StackExchange が異なるサイトでどのように機能するか、またはそれらがすべて同じであるかについて少し混乱しています。これは Linux の質問なので、Unix と Linux にも投稿されました。ここにも投稿すべきではない場合は、ご容赦ください。しかし、StackOverflow は Linux も扱うので...)

4

1 に答える 1

8

この質問は、Windowsドライバーを含む小さなフラッシュディスクを含むUSBデバイスによく似ていますが、実際には一種のネットワークアクセスデバイスです(UMTSモデムが頭に浮かびます)。この場合は、USBデバイスのデータベースと、デバイスを「ストレージモード」から「ネットワークアクセスモード」に移行するために使用する必要のあるコマンドとデータを含むUSB_ModeSwitchを使用してみてください。デバイスがデータベースで構成されていない場合は、 WindowsでUsb Sniffer for Windowsを使用して、USBトラフィックをトレースし、必要なコマンド/データコンボを抽出できます。

usb_modeswitchの自動化。これにより、デバイスを接続したときに魔法のように実行され、udevルールを使用して実行できます。FedoraまたはUbuntuベースのディストリビューションを使用している場合、これはusb_modeswitchを提供するパッケージをインストールするときに処理されます(申し訳ありませんが、SUSEについての情報はありませんが、似ていると思います)。 usb_modeswitchcmdと必要なルールファイルのラッパー。

USBデバイスをドライバーにバインド/バインド解除する必要がある場合は、このLWNの記事を参照してください。ルートとして、「usb-storage」ドライバーからecho $usbid > /sys/bus/usb/drivers/usb-storage/unbindUSBデバイスのバインドを解除します。$usbid同じコマンドを使用しますが、bindの代わりにを使用unbindすると、デバイスをドライバーにバインドしようとします。ただし、ストレージデバイスのように機能するデバイスをusbnetドライバーにバインドすることは意味がない(そして機能しない)ことに注意してください。

于 2011-12-10T18:57:08.217 に答える