次に DriverWizard の使い方を説明します。
1. ハードウェアをコンピュータに接続します。
PCI カードの場合、コンピュータの適切なスロットに接続します。USB デバイスの場合、コンピュータの USB ポートに接続します。
または、DriverWizard を使用して、実際のデバイスをインストールすることなく、仮想 PCI デバイスの コードを生成するオプションがあります。この DriverWizard の PCI Virtual Device オプションを選 択すると、DriverWizard は 仮想 PCI デバイスのコードを生成します。
2. DirverWizard を起動して対象のデバイスを選択します。
① [スタート] メニューから [プログラム] - [WinDriver] - [DriverWizard] を選択するか、デスクトッ
プの [DriverWizard] アイコンをダブル クリックします。または WinDriver/wizard/ ディレ クトリから wdwizard ユーティリティを実行します。
注意: Windows Vista および 7 では、管理者権限で DriverWizard を起動する必要がありま す。
② [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: デバイスの選択
3. DriverWizard で INF ファイルを作成します。
Plug-and-Play Windows オペレーティングシステム (Windows 2000 / XP / Server 2003 / Server
2008 / Vista / 7) 用のドライバを開発する場合は、対象のデバイスの INF ファイルをインストールす
る必要があります。このファイルは、windrvr6.sys ドライバと動作するように Plug-and-Play デバ イスを登録します。このステップで DriverWizard が生成したファイルは、Windows 2000 / XP /
Server 2003 / Server 2008 / Vista / 7 を使用しているユーザーに配布する際に、その PC にインス トールする必要があります。
また、生成した INF ファイルは、DriverWizard がデバイスの診断を行う際に使用します (たとえば、
PCI / USB デバイス用のドライバがインストールされていない場合で使用します)。上記で説明した
とおり、これは、WinDriver を使用して、Plug-and-Play システム (Windows 2000 / XP / Server 2003 / Server 2008 / Vista / 7) で 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 ファイルを生成します。
DriverWizard で [Automatically Install INF file] オプションをオン (USB デバイスでは、このオ プションはデフォルトでオンです) にすることによって INF ファイルを自動的に DriverWizard からインストールできます。
INF ファイルの自動インストールに失敗した場合、DriverWizard は手動での INF ファイルの インストール方法を表示します。セクション 15.1 で説明します。
⑤ INF ファイルのインストールが終了すると、[Select Your Device] 画面の一覧からデバイスを選 択して開きます。
注意: PCI MSI (Message-Signaled Interrupts) と MSI-X (Extended Message-Signaled Interrupts) の 処理を行うには、セクション 9.2.6.1 の説明のとおり、デバイスの INF ファイルに特定の設定が必要 です。
Windows Vista およびそれ以降で、対象のハードウェアが MSI か MSI-X をサポートする場合、
DriverWizard の INF 生成ダイアログの Support Message Signaled Interrupts オプションが デフォルトで有効になります。このオプションをチェックすると、対象のデバイス用に DriverWizard で生成した INF ファイルに MSI / MSI-X 処理のサポートが含まれます。ただし、このオプションの チェックを外すと (無効にすると)、対象のハードウェアと OS が MSI / MSI-X をサポートしてる場合 でも、PCI 割り込みをレガシーなレベルセンシティブ割り込みの方法を使用して処理します。
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 ポート、メモリスペース、定義したレジスタへの読み込みと書き込みをします。
注意: メモリマップ範囲にアクセスする際に、LinuxPowerPCでメモリストレージをビッグ エンディアンを使用して処理する場合、リトルエンディアンを使用するPCIバスとは反対にな るので注意してください。詳細は、セクション 9.7「バイトオーダー」を参照してください。
図 5.9: メモリおよび I/O の Read / Write
− ハードウェアの割り込みを ‘Listen’ (確認) します。
図 5.10: 割り込みの Listen (確認)
注意: レガシーな PCI カードの割り込みなど、レベル センシティブな割り込みの場合、
DriverWizard で割り込みの確認をする前に、DriverWizard を使用して、割り込みステータス
レジスタを定義し、割り込みを認識 (解除) するための read (読み込み) / write (書き込み) コ マンドを割り当てる必要があります。正確に定義しない場合には、OS がハングする可能性が あります。以下、図 5.11 で、定義済みの INTCSR ハードウェアレジスタ用の割り込み確認コ マンドを定義する方法を紹介します。ただし、割り込みの確認情報はハードウェア独自となり ます。
図 5.11: レベル センシティブな割り込みの転送コマンドの定義 USB デバイスの場合
① USB デバイスにおける代替設定を選択します。
図 5.12: USB デバイスのインターフェースの選択
DriverWizard はサポートするすべてのデバイスの代替設定を読み込み表示します。表示されたリ
ストから設定する代替設定を選択します。
注意: 設定されている代替設定が 1 つしかない 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] を選択してコードを生成します。