USB libusb

http://libusb-win32.sourceforge.net/

特にドライバを書かなくてもWin32ユーザモードアプリケーションからUSBデバイスを叩ける便利なドライバ。

libusb互換。qemu-win32、DisplayLinkのUSB-VGAコンバータ等で利用されている。

利用

Cygwinや通常のWin32アプリケーションから利用できる。

pyusbなどのWrapperも大抵サポートしている。libusbを参照のこと。

バックエンド

  • リリース版にはデバイスドライバによるバックエンドしか含まれていない。

他のlibusbと異なり、このLibUsb-Win32は、現在の所明示的にデバイスドライバを組み込む必要がある。

デバイスドライバ

リリースされている唯一のバックエンドで、通常はこちらを利用する。

デバイスドライバはさらに2つの形態を持ち、それぞれ全く異なる方法でUSBデバイスへのアクセスを行う。どちらを利用したとしても利用できるlibusbのAPIは同一であり、両者は正常に共存できる。

フィルタドライバ

  • WindowsVista以降では使うべきではない。このドライバはローレベルのUSB実装に依存している。

フィルタドライバ(Upper filter)として組み込む。既存のUSBドライバを利用しつつ、その動作をインターセプトするので、既存のドライバと動作が競合することが有る。

USBイベントをフィルタリングすることで、デバイスドライバの組み込み等は自動化される。つまり、一度組み込めば、ホストに接続された全てのUSBデバイスをlibusbのAPIから制御できる。

VMware等、他のフィルタドライバを要求するソフトウェアとは共存できない - この記述は古く、現状は不明(.mjt)

SnoopyPro等のモニタリングソフトウェアとは共存可能。

デバイスドライバ

(こちらはWindowsVista以降でも使用できる。)

普通のデバイスドライバとして組み込む。デバイスに応じたinfの書き換えとデバイス毎のインストール作業が必要。

infの準備を簡略化するウィザードが付属する。

こちらの方が安定して動作する。製品付属のドライバがlibusbとなっている場合もこれ。

デバイスドライバ vs フィルタドライバ

  • フィルタドライバ
    • × WindowsVista以降では使用できない
    • × 他のUSBフィルタドライバと共存できない
    • ○ 個々の機器に対してインストールする必要はない
    • 既存のWindowsデバイスドライバも平行して動作できる
  • デバイスドライバ
    • WindowsVista以降でも使用できる
    • ○ 安定している(DisplayLink等の使用実績)
    • × 制御対象のデバイス毎にインストールする必要がある
      • 特に、WindowsXPを使用していて、かつ、他にメーカやWindows提供のデバイスドライバが存在する場合は、ポート毎にインストールする必要がある
    • 既存のドライバを組み込む必要はない

アイデアとしては、WinPcapのtunとtapの違いに近い。つまり、フィルタドライバは、tapのように既存のドライバも使いつつUSBパケットをlibusbのAPIによって『割り込ませる』ことができる。対して、デバイスドライバはtunのように独立したデバイスを提供する。

HID?(開発中)

2007/7現在まだリリース版に含まれていない。

WindowsがHID?と認識しているデバイスをlibusbの呼び出しで制御できる。

WinUSB(開発中)

2007/7現在まだリリース版に含まれていない。

WindowsVistaで新しく装備された汎用ドライバをバックエンドとして利用できる。

HIDと同じくlibusbの提供するドライバをインストールする必要はない。(但し、WinUSBのドライバそのものはインストールする必要がある)

Alternative

  • WinUSB - WindowsVista以降で利用できる同様のライブラリ。libusb同様、アイソクロナス転送には対応していない
  • いくつかのベンダが同様の目的の商用ドライバを販売している。(windriver等)

使用方法(libusb0)

フィルタドライバ版とデバイスドライバ版の両方をインストールする必要は無いが、もし両方をインストールしたとしても共存すること自体は可能。

API等は基本的にlibusbと同一であるため同じように使えばよい。ただし、OS毎に細かい差異が有ることに気を付ける必要がある。

  • 他のlibusbホストと同様に、アイソクロナスエンドポイントを取り扱うことは出来ない
  • フィルタドライバ版を利用した場合、デバイスはWindows側のデバイスドライバにより初期化されていることが有る。それ以外の挙動もホスト側に接続されたデバイスドライバに依存するため、ポータビリティを確保するためにはデバイスドライバ版の使用が望ましい。
  • デバイスドライバ版の場合、Windowsのドライバの存在状況によっては差し込むポートを変更する毎にドライバのインストールが必要になることがある

フィルタドライバ版

libusb-win32-filter-bin-x.x.x.x.exeをダウンロードしてインストール。

デバイスドライバ版

制御対象デバイスを接続する前に以下の準備を行う。

  1. libusb-win32-device-bin-x.x.x.x.tar.gzをダウンロード
  2. 同梱のinf-wizardによってinfファイルを作成する
  3. 作成して出来たinf、catとおなじディレクトリにlibusb0*.sys/dllをコピーする(inf-wizardが自動的に行うわけではない)
  4. デバイスを接続
  5. 通常のインストールプロセスとして作成したinfを指定するか、『デバイスドライバの更新』でデバイスドライバを作成したinfに更新する

幾つかのデバイス(マスストレージやHIDのようなWindows標準のドライバが存在するデバイス)は、この方法ではインストールできない。この場合、

  1. 管理者権限でコマンドプロンプトを開く
  2. infのディレクトリにchdirする
  3. rundll32 libusb0.dll,usb_install_driver_np_rundll 作成した.inf

としてインストールすることが出来る。

Tips

フィルタドライバのインストール/アンインストール

  • USBデバイスを大量に接続しているとインストールにやたら時間が掛かることが有るので、USBデバイスは全て外してからインストールした方が早い
  • また、アンインストール時に問題が発生するときもUSBデバイスを外す(特にオーディオ、HID)
  • アンインストールが不完全な場合(主にサービスレジストリの削除が権限の関係で出来ない場合)が有る。レジストリHKLM\SYSTEM\CurrentControlSet?中のlibusbを含むエントリを削除する。削除できないレジストリは一時的にアクセス権を付与する。

デバイスドライバのインストール

このセクションはフィルタドライバ版には関係が無い。フィルタドライバ版は全てのUSBデバイスに対してインターセプトできる。

  • Windowsは署名されたドライバを優先するため、usb_touch_inf_file_np_rundllを利用する必要があるかも知れない。

互換性

  • HID,WinUSBのようなリリース版に含まれていないバックエンドはあまり安定していない印象がある。可能な限りリリース版を利用するべき。
  • デバイスドライバとインターフェースDLL(libusb0.dll)は同じバージョンを推奨する。これといったバージョンチェックのロジックを含んでいないように思える。
    • アプリケーションと同時にlibusb0.dllを配布すると問題が発生するかもしれない。
    • しかし、古いドライバには問題があるので単にユーザ側のドライバのアップグレードを求めるべき。
  • libusbとの互換性は高い。
    • しかし、OS毎に動いたり動かなかったりすることもある。仮にWindows上で動作しても初期化/解放のステップを省略するべきではない。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-01-17 (土) 17:48:44 (559d)