第 5 章 DriverWizard
5.2 DriverWizard の使い方
次に DriverWizard の使い方を説明します。
1. ハードウェアをコンピュータに接続します。
PCI カードの場合、コンピュータの適切なスロットに接続します。USB デバイスの場合、コンピュー
タの USB ポートに接続します。
または
DriverWizard を使用して、実際のデバイスをインストールすることなく、PCI デバイスのコードを生
成するオプションがあります。このオプションを選択すると、DriverWizard は仮想 PCI デバイスの コードを生成します。
注意: 仮想 PCI デバイス オプションを選択した場合、 デバイスのリソースの定義を行います。IO/メ モリ範囲を指定すると、ランタイム レジスタ (オフセットは、BARs に関連しています) をさらに細かく 定義することも可能です。また、ランタイム レジスタを通じて割り込みを認識するコードを生成した い場合、IRQ を指定する必要があります。IRQ ナンバーと IO/メモリ範囲のサイズは無関係です。
これらは、物理デバイスをインストールしたときに、DriverWizard により自動的に認識されます。
2. ウィザードを実行してデバイスを選択します。
① [スタート] メニューから [プログラム] - [WinDriver] - [DriverWizard] を選択するか、デスクトッ
プの [DriverWizard] アイコンをダブルクリックします。または WinDriver/wizard/ ディレ
クトリから wdwizard ユーティリティを実行します。
② [New host driver project] をクリックして新しいプロジェクトを開始します。または、[Open an
existing project] をクリックして保存したセッションを開きます。
図 5.1: WinDriver のプロジェクトを開く、または新規作成
③ DriverWizard が検出したデバイスの一覧からデバイスを選択します。PCI の場合、
Plug-and-Play カードを選択します。Plug-and-Play カード以外の場合、ISA を選択します。
接続していないデバイスのコードを生成する場合、PCI: VIRTUAL DEVICE を選択します。
図 5.2: デバイスの選択
注意: Windows 98 の場合、一覧に対象の USB デバイスがない場合、USB デバイスを再接続して [新しいハードウェアの検出] ウィザードを表示します。次の手順でデバイスの INF が生成されるま でダイアログボックスを開いたままにします。
3. DriverWizard で INF ファイルを作成します。
Plug-and-Play Windows オペレーティングシステム (Windows 98 / ME / 2000 / XP / Server 2003 /
Vista) 用のドライバを開発する場合は、対象のデバイスの INF ファイルをインストールする必要が
あります。このファイルは、windrvr6.sys ドライバと動作するように Plug-and-Play デバイスを登 録します。このステップで DriverWizard が生成したファイルは、Windows 98 / Me / 2000 / XP / Server 2003 / Vista を使用しているユーザーに配布する際に、その PC にインストールする必要が あります。
また、生成した INF ファイルは、DriverWizard がデバイスの診断を行う際に使用します (たとえば、
PCI / USB デバイス用のドライバがインストールされていない場合で使用します)。上記で説明した
とおり、これは、WinDriver を使用して、Plug-and-Play システム (Windows 98 / Me / 2000 / XP / Server 2003 / Vista) で Plug-and-Play デバイス (PCI / PCMCIA / USB) をサポートする場合のみ必 要です。INF ファイルの必要性は、セクション 15.1.1 で説明します。
INF ファイルを生成する必要がない場合 (DriverWizard を Linux で使用している場合など) は、以下のステップをスキップしてください。
以下のステップで、DriverWizard で INF ファイルを生成します。
① [Select Your Device] 画面で、[Generate .INF file] ボタンまたは [Next] ボタンを押します。
② DriverWizard は、Vendor ID、Device ID、Device Class、メーカー名およびデバイス名を含む デバイスに関する情報を問い合わせます。メーカーおよびデバイス名、およびデバイスのクラ ス情報を変更することができます。
図 5.3: DriverWizard INF ファイル情報
③ マルチ インターフェイスの USB デバイスの場合、各インターフェイスに対して別々に INF ファ イルを作成するか、すべてまたはマルチインターフェイスに対して 1 つの INF ファイルを作成 するかを選択することができます。
− 各インターフェイスの USB デバイスに対して別々に INF ファイルを作成する場合、
[Enter Information for INF File] ダイアログで各インターフェイスに対する INF ファイルを 設定します。
図 5.4: DriverWizard のマルチ インターフェイスの INF ファイル情報 (特定のインターフェイスをそれぞれ設定する場合)
− マルチ インターフェイスに対して 1 つの INF ファイルを作成する場合、[Enter
Information for INF File] ダイアログでルート デバイス用の INF ファイルの生成、または 特定のインターフェイス用の INF ファイルの生成を選択することができます。ルート デバ
イス用の INF ファイルの生成を選択すると、複数のアクティブなインターフェイスを処理 できるようになります。
図 5.5: DriverWizard のマルチ インターフェイスの INF ファイル情報 (1 つのインターフェイスを設定する場合)
④ [Next] を押して、生成される INF ファイルを保存するディレクトリを選択します。DriverWizard
は、自動的に INF ファイルを生成します。
Windows 2000 / XP / Server 2003 / Vista 上では、DriverWizard で [Automatically Install INF
file] オプションをオン (USB デバイスでは、このオプションはデフォルトでオンです) にするこ
とによって INF ファイルを自動的に DriverWizard からインストールできます。Windows 98 /
Me 上では、Windows の [新規ハードウェアの追加ウィザード] または [デバイスドライバの更
新ウィザード] を使用して INF ファイルを手動でインストールする必要があります。セクション
トールに失敗した場合、DriverWizard は手動での INF ファイルのインストール方法を表示し ます。
⑤ INF ファイルのインストールが終了すると、[Select Your Device] 画面の一覧からデバイスを選 択して開きます。
4. デバイスの INF ファイルのアンインストールします。
アンインストールオプションを使用して、対象の Plug-and-Play デバイス (PCI / PCMCIA / USB) の INF ファイルをアンインストールします。INF ファイルをアンインストールすると、そのデバイスは windrvr6.sys と動作するように登録されず、Windows のルートディレクトリから INF ファイルを 削除します。
INF ファイルをアンインストールする必要がない場合、このステップをスキップしてください。
① [Select Your Device] 画面で、[Uninstall .INF file] ボタンをクリックします。
② INF ファイルを選択し、削除します。
5. デバイスの診断
デバイス ドライバのコードを記述する前に、ハードウェアが正常に動作することを確認します。
DriverWizard を使用してハードウェアを診断します。すべてのアクティビティは DriverWizard のロ グに残るので、テスト結果を分析できます。
PCI デバイスの場合
① デバイスを診断します。
② PCI デバイスの I/O、メモリ範囲、レジスタ、割り込みを定義および検証します。
− DirverWizard は自動的に Plug-and-Play ハードウェアリソース (I/O 範囲、メモリ範囲、割 り込み) を検出します。
非 Plug-and-Play ハードウェアの場合、ハードウェアのリソースを手動で定義します。
図 5.7: PCI のリソース画面 レジスタを手動で定義します。
図 5.8: レジスタの定義
注意: [Register Information] ウィンドウの [Auto Read] チェックボックスがあります。[Auto Read] チェックボックスを ON にしたレジスタを Wizard で実行したレジスタの read (読み込み)
/ write (書き込み) で実行自動的に読み込みます (Wizard の [Log] ウィンドウに読み込み結
果を表示します)。
− I/O ポート、メモリスペース、定義したレジスタへの読み込みと書き込みをします。
図 5.9: メモリおよび I/O の Read / Write
注意: メモリ マップされた領域にアクセスする際には、Linux PowerPC は、PCI バス (リトル エンディアンを使用) とは対照的に、メモリ ストレージを処理するのにビッグ エンディアンを使 用します。リトル / ビッグ エンディアンに関する詳細情報はセクション [9.7] を参照してくださ い。
− ハードウェアの割り込みを ‘Listen’ (確認) します。
図 5.10: 割り込みの Listen (確認)
注意: PCI カードの割り込みなど、レベル センシティブな割り込みの場合、DriverWizard で割
り込みの確認をする前に、DriverWizard を使用して、割り込みステータス レジスタを定義し、
割り込みを認識 (解除) するための read (読み込み) / write (書き込み) コマンドを割り当てる必 要があります。正確に定義しない場合には、OS がハングする可能性があります。特定の割り 込みの認識情報はハードウェアの仕様となります。
図 5.11: レベル センシティブな割り込みの転送コマンドの定義 USB デバイスの場合
① USB デバイスにおける代替設定を選択します。
図 5.12: USB デバイスのインターフェースの選択
DriverWizard はサポートするすべてのデバイスの代替設定を読み込み表示します。表示されたリ
ストから設定する代替設定を選択します。
注意: 設定されている代替設定が一つしかない USB デバイスの場合、DriverWizard は自動的に 検出された代替設定を選択するので、[Select Device Interface] ダイアログは表示されません)。
② USB デバイスのパイプを検証します。
図 5.13: USB コントロール転送
DriverWizard は、選択した代替設定により検出したパイプを表示します。USB データ転送を
行う場合は、次の手順に従ってください。
i. 使用するパイプを選択します。
ii. コントロールパイプ (双方向パイプ) の場合、[Read/Write to Pipe] を選択します。新しい ダイアログボックスが表示され、標準 USB 要求 (図 5.8 を参照) を選択またはカスタム要 求を入力できます。
利用可能な標準 USB 要求を選択すると、選択した要求のセットアップパケット情報を自 動的に入力し、[Request Description] ボックスに要求の詳細を表示します。
カスタム要求の場合、セットアップ パケット情報を入力し、データ (ある場合) を書き込む 必要があります。セットアップ パケットのサイズは 8 バイト長にし、リトル エンディアン バイ ト オーダーを使用して定義します。セットアップ パケット情報は、USB 設定パラメータ (bmRequestType、bRequest、wValue、wIndex、wLength) を設定します。
注意: 標準 USB 要求の詳細は、セクション 9.3 「USB コントロール転送」およびセク ション 9.4 「WinDriver でコントロール転送を行う」を参照してください。
iii. 入力パイプ (データをデバイスからホストに転送) の場合、[Listen to Pipe] を選択します。
HID 以外のデバイスでこの操作を正しく行うには、まずデバイスがデータをホストに送る かどうかを確認する必要があります。データが送信されない場合、しばらく listening をし たあとに「Transfer Failed」と表示されます。
iv. 読み込みを中止する場合は、[Stop Listen to Pipe] をクリックします。
図 5.14: パイプの確認
v. 出力パイプ (データをホストからデバイスに転送) の場合、[Write to Pipe] を選択します。
新しいダイアログボックス (図 5.9 を参照) が表示され、書き込みデータを入力します。
DriverWizard はこの操作の結果を記録します。
図 5.15: パイプへの書き込み
vi. 選択したパイプで [Reset Pipe] をクリックして、入力パイプと出力パイプをリセットできま す。
6. 雛型となるドライバ コードを生成します。
① [Project] メニューから [Generate Code] を選択、または [Generate Code] ツールバーアイコン を選択してコードを生成します。
② [Select Code Generation Options] ダイアログボックスが表示されます。生成されるコードの言
語と開発環境を選択し、[Next] を選択してコードを生成します。