クイックスタートガイド
5 分でデバイス ドライバを作成 !
WinDriver を使用する開発者は?
1. ハードウェア開発者 − DriverWizard を使用し、新規ハードウェアをすぐにテストできます。 2. ソフトウェア開発者 − DriverWizard を使用し、ハードウェアを動作させるデバイス ドライ バコードを生成できます。WinDriver ツールでテストとデバッグができます。サポートしているオペレーティング システムは?
1. Windows 98/Me、NT/2000/XP、Windows CE/CE.NET、Windows Server 2003、Linux、Solaris およ
び VxWorks です。新しいオペレーティング システムのサポートに関しては、エクセルソフト 社の Web サイト(http://www.xlsoft.com/jp/products/windriver/)をご覧ください。 2. WinDriver ベースのドライバは、対応するすべてのオペレーティング システム間で互 換性があります。
どこで詳細および最新情報が入手できますか?
1. WinDriver の日本語マニュアルおよび 30 日間の無料評価版は、エクセルソフト社の Web サイ ト (http://www.xlsoft.com/jp/products/download/download.html) から入手できます。ドライバ作成の 8 ステップ:
1. セットアップ
• PC にハードウェアデバイスを挿入します。 • WinDriver をインストールします。 PCI / ISA2 ハードウェアの選択
• メニューから [WinDriver] - [DriverWizard] を選択し、DriverWizard を起動します。 • ダイアログ ボックスが表示されるので、[Create New Driver] を選択します。 • DriverWizard は plug and play カードをすべて表示します。
• •
Plug-and-Play デバイス: 一覧から目的のハードウェア デバイスを選択します。 Plug-and-Play デバイス以外: 一覧から “ISA” を選択します。
3 INF ファイルの生成
• 開発したドライバ用に INF ファイルを作成する必要があります。また、DriverWizard で対象のデ バイスの診断を行うのに INF ファイルの作成が必要な場合もあります (たとえば、対象の PCI デ バイスのドライバがインストールされていない場合)。 DriverWizard は、この手順を自動的に行 い、INF ファイルの作成が必要なことをお知らせします。 [Next] をクリックして、そのような通 知が表示されない場合、このステップをスキップして、次のステップに行きます。• [Generate .INF file] または [Next] ボタンをクリックします。 • ダイアログ ボックスが表示されるので、必要な項目を記入します:
• 終了したら、[Next] をクリックします。 DriverWizard が自動的に INF ファイルをインスト ールします。
• INF ファイルの自動インストールに失敗した場合、DriverWizard はその内容を通知し、手動で インストールを行います。
• INF ファイルのインストールが終了したら、上記のステップ 2 で説明した一覧から対象のデバイ スを選択し開きます。
4. ハードウェアの検出と定義
• DriverWizard は、PnP ハードウェアのリソース(I/O 範囲、メモリ範囲、割り込み)を自動的に 検出します。レジスタは手動で定義できます。
PnP ハードウェア以外は、リソースを手動で定義します。 •
5. ハードウェアのテスト
デバイス ドライバを記述する前に、ハードウェアが正常に動作してるのを確認するのは重要な ことです。Wizard を使用してハードウェアを診断してください。
• I/O ポート、メモリ範囲および定義したレジスタを Read および Write します。 • ハードウェアの割り込みを “Listen” (確認) します。
6. ドライバ コードの生成:
• DriverWizard を使用して、デバイス ドライバの雛形を生成します。[Next] ボタンをクリックす るか、Build メニューから [Generate Code] を選択します。
以下のように、開発言語を選択して、作成するプロジェクトの開発環境を決めます: •
• ドライバ コード内から Plug-and-Play と power management イベントを処理する場合、Kernel PlugIn コードを生成する場合、以下のようになります (注意: Kernel PlugIn を動作させるには、適 切な Microsoft DDK がコンピュータにインストールされている必要があります): • [Next] をクリックします。DriverWizard が、上記のステップ 6 で選択した開発環境を起動しま す。
8 コンパイルと実行
• 以下のコードが生成されます: o アプリケーション レベル (およびカーネル) からハードウェアにアクセスする API o ハードウェアにアクセスする上記の API を使用するサンプル アプリケーション o 対応するオペレーティング システムと環境用のすべての Project make ファイル o 対象のドライバの INF ファイル• • サンプルの診断アプリケーションをコンパイルし、実行します。このサンプルはドライバの強力な 雛型となります。 • アプリケーションの仕様に応じて、サンプルのアプリケーションを修正します。または、WinDriver に付属の多くのサンプルの一つを開始します。 お好みのコンパイラで DriverWizard が生成した make ファイルを使用します。
Q & A:
A:
WinDriver を使用すると、 デバイス ドライバはユーザー モードで (アプリケーションの一部として、また は別の DLL として) 開発されます。これ はドライバ開発、またはデバッグのための スタンダード Win32 ツール (MSDEV、 Borland、他) を使用するため、開発期間を 大幅に短縮します。 WinDriver (YourApp.EXE) で開発したデバ イス ドライバは、スタンダード WinDriver 関数を使用する WinDriver カーネル モジ ュール (Windrvr.VXD/SYS) を使用してハ ードウェアにアクセスします。Q:
WinDriver はどのように動作するか?
Q:
WinDriver で、最適なパフォーマンスをどのように実現するか?
A:
ドライバが完成した後、ドライバコード(割り込みハンドラ、I/O ハンドラ、他)のパフォーマ ンスの重要な部分を Kernel PlugIn へ簡単に移行することによって、カーネル レベルで実行でき、最 適なパフォーマンスを実現することができます。例えば、ハンドラ関数に自分の割り込み処理コードを 埋め込み、ユーザー モードで割り込みハンドラを作成します。このコードをユーザー モードでデバッ グした後、コードを Kernel PlugIn に移動します。この操作によって、割り込みハンドラがカーネル レ ベルで実行され、最適なパフォーマンスで動作します。 この構造によって、WinDriver 関数を使用し、ユーザー モードでのドライバ コードの開発、デバッ グが可能になります。さらに、コードを変更せずに簡単な Kernel PlugIn メカニズムを通して、コー ドのパフォーマンスの重要な部分をユーザー モードへ移行することができます。演習:
以下の 5 分間演習で、WinDriver のいくつかの機能を紹介します。WinDriver の 30 日間評価版を http://www.xlsoft.com/jp/products/download/download.html からダウンロード後、この演習を行っ てください。演習 #1: PCI メモリからの読み込みと書き込み
目的: PCI メモリ範囲からの読み込み、書き込み方法、およびレジスタの定義方法を学びます。 概要: この演習は、DriverWizard を使用して、PCI カードのメモリからの読み込み、書き込み方法、 および同じ処理を実行するアプリケーションの生成方法を説明します。これは PCI (または AGP) ビ デオカードからの読み込み、書き込みを行います。 Step #1: スタート メニューから DriverWizard を起動します。[スタート] – [プログラム] – [WinDriver] - [DriverWizard] を選択します。
Step #2: Wizard のメニューで [File] - [New Project] を選択します。
Step #3: 表示される Plug and Play カードのリストからビデオカードを選択します。 ビデオカードを見つけるには、カードのベンダ名をリストから選びます。 Step #4: [Memory] タブをクッリクします。カードのメモリ範囲が表示されます。このメモリ範囲 の中の 1 つは画面にマップされています(通常は Bar0)。メモリ範囲のバイトは画面の ピクセルに対応し、オフセット 0 (画面左上) から読み込みます。ウィンドウを画面左 上に移動し、色を変えてもう一度読み込みます。値が変わった場合、これが正しいメモリ 範囲です。このオフセット(FFFFFFFF また 00000000 も交互に試してください)を書き 込むと、ピクセルの色が変わります 。 ** 注意: 不正なメモリ範囲に書き込むとコンピュータがハングしてしまうことがあり、再起動が 必要です。 Step #5: 画面左上を表す "TopLeft" というレジスタを定義します (正しいメモリ範囲とオフセット 0)。レジスタから読み込み、書き込みます。オフセットが FF の "Somewhere" というレジ スタを定義します (画面の他のピクセル)。
Step #6: メニューの [Build] - [Generate code] を選択します。DriverWizard はハードウェア リソ ースにアクセスする関数を作成します。ユーザーモードでアプリケーションから直接この 関数を呼ぶことができます。Wizard はこの関数を使った、デバイスをアクセスするサンプ ル アプリケーションを作成します。 Step #7: サンプルア プリケーションをコンパイルし、実行します。このアプリケーションを使 用してビデオカードから読み込み、書き込みを行います。 とても簡単です。お試しください。 ** 注意: プロジェクトのソースを他の対応してるオペレーティング システム (Linux、Solaris、 Windows CE、他) へコピーし、再コンパイルして実行することができます。
<screencard_lib.h>
BOOL SCREENCARD_Open (SCREENCARD_HANDLE *phSCREENCARD, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum, DWORD options);
void SCREENCARD_Close(SCREENCARD_HANDLE hSCREENCARD); // General read/write functions
void SCREENCARD_WriteWord (SCREENCARD_HANDLE hSCREENCARD,
SCREENCARD_ADDR addrSpace, DWORD dwOffset, WORD data);
void SCREENCARD_WriteDword (SCREENCARD_HANDLE hSCREENCARD,
SCREENCARD_ADDR addrSpace, DWORD dwOffset, DWORD data);
// This register represents a Pixel somewhere on the screen.
DWORD SCREENCARD_ReadSomeWhere (SCREENCARD_HANDLE hSCREENCARD); void SCREENCARD_WriteSomeWhere (SCREENCARD_HANDLE hSCREENCARD, DWORD
data);
// This register toggles the top left pixel on the screen.
DWORD SCREENCARD_ReadTopLeft (SCREENCARD_HANDLE hSCREENCARD); void SCREENCARD_WriteTopLeft (SCREENCARD_HANDLE hSCREENCARD, DWORD
data); // handle interrupts
BOOL SCREENCARD_IntEnable (SCREENCARD_HANDLE hSCREENCARD,
SCREENCARD_INT_HANDLER funcIntHandler); void SCREENCARD_IntDisable (SCREENCARD_HANDLE hSCREENCARD);
演習 #2: 割り込み処理
目的: ハードウェアの割り込みのテスト方法、割り込みハンドラの作成方法を学びます。 概要: この演習では DriverWizard を使用し、フロッピー ディスク ドライブが生成する割り込 みを “Listen” (読み取り) します。そして DriverWizard を使用して、この割り込みを Listen (読 み取り) し、ユーザー モードの割り込みハンドラで割り込みを処理するアプリケーションを生成 します。
Step #1: スタート メニューから DriverWizard を起動します。[スタート] – [プログラム] – [WinDriver] - [DriverWizard] を選択します。
Step #2: Wizard のメニューで [File] - [New Project] を選択します。対象のマシンの Plug-n-Play カ ードのリストが表示されます。
Step #3: フロッピー ディスク ドライブを使用するので、メニューから ISA を選択します。 Step #4: [Memory] タブを押下します。
• 1 つ以上のメモリ範囲を定義します (ダミーの範囲でも構いません)。Memory タブで [New] をクリックして、[OK] をクリックしてアドレス 0x0-0x0 のメモリ範囲を生成
ッピー デスク ドライブの割り込み処理をテストするには十分です。 Step #5: [Interrupts] タブを押下します。 • フロッピー ドライブの割り込みを定義します: 割り込みの名前を “FloppyInterrupt” とし、割り込み番号を 6 を選択します。 • 生成した割り込みを右クリックし、[shared] を押下します。フロッピー ドライブの割 り込みをオペレーティング システムと共有するのに必要です。
Step #6: [Listen to Interrupt] タブを押下します
• フロッピー ドライブの割り込みを確認するには: フロッピー ドライブにアクセス します (たとえば、DOS コンソール画面で "a:" と入力するか、またはファイル ブ ラウザでフロッピー ドライブを選択します)。
Step #7: メニューの [Build] - [Generate code] を押下します。DriverWizard はリソースをアクセス する関数を作成し、定義した割り込みを処理します。ユーザーモードでアプリケーション から直接この関数を呼ぶことができます。DriverWizard はこの関数を使った、デバイスを アクセスするサンプルアプリケーションを作成します。 Step #8: サンプルアプリケーションをコンパイルし、実行します。 Step #9: サンプルアプリケーション内から割り込みを有効にし、監視します。フロッピー ドライブ の割り込みを確認してください。後で、割り込みハンドラを修正し、自分の機能を挿入し ます。 とても簡単です。お試しください。 ** 注意:
1. WinDriver の Kernel PlugIn 機能を使用すると、割り込みおよび IO コールがカ ーネルモードから処理されるため、最適なパフォーマンスが実現されます。 2. さらに、PS マウス割り込み (Windows NT の Interrupt 12)、およびキーボード割 り込み (Windows NT の Interrupt 1) のテストも可能です。 エクセル ソフト株 式 会社