« ザイリンクスのパートナーになりました! | トップページ | WDMコントローラをリリースしました »

2009.05.01

WDMデバイスのコントローラ

WDMデバイスドライバのインストール・アンインストール・開始・停止が、自分のプログラムからコントロールできるようになりました。
普通、WDMドライバのインストールは、プラグアンドプレイによって呼び出されるます。USBに新しいデバイスが挿されたり、PCIに新しいデバイスを挿入して電源を入れたりすることで、OS(バスドライバ)が新規デバイスを見つけて、WDMドライバのインストールルーチンを呼び出すからです。

しかし、特定ハードウェアに対応しないWDMデバイスドライバ(カーネルモードでメモリやI/Oを操作したり、任意のハードウェアにアクセスするためだけにあるようなドライバ)を作りたいときもあります。例えば、パラレルポート操作用ドライバとか、汎用PCI Expressドライバなどです。
このような特殊なWDMドライバは、特定のハードウェアの検出によって呼び出されるわけではないので、インストールは極めて面倒です。  その例

ハードウェアの追加ウィザードを開いて、「その他のデバイス」、とか選んでいってINFファイルを指定すれば無理やりインストールできないこともありませんが、WindowsのGUIを操作するのは苦痛です。

常々この手順を何とかしたいと思っていました。NT形式のドライバなら、サービスマネージャとかで簡単にできるのですが、WDMの場合のやり方は一般的には広く知られていません。

その答えはdevconというツールの中にありました。devconは、マイクロソフトがドライバ開発者のために配布しているツールで、コントロールパネルのハードウェアウィザードやデバイスマネージャをコマンドラインから操作することができるようなものです。そのソースコードはDDKのディスクの中にあります。そのソースを読めば、どのような順番でどのAPIをアクセスすればよいかがわかります。ほとんどはsetupapiの中のAPIをアクセスすることになります。

そういうわけで、WDMドライバをインストールするプログラムを作ってみました。
Tkdv1

① hardwareIDと書かれた欄に、インストールしたいデバイスのハードウェアID(識別するための任意の文字列)を入れ、INFファイルを指定します。ハードウェアIDはINFファイルに書かれています。
汎用PCI ExpressドライバのハードウェアIDは、"*root\tkpe"です。

② 「操作→インストール」を実行すると、INFファイルを読み込んで、インストールされます。
Tkdv3

③ デバイスマネージャに、インストールされたデバイスが登場します。
Tkdv2

④ 「無効」ボタンを押すと、そのデバイスドライバを無効(停止)にできます。
Tkdv4

⑤ 「有効」ボタンを押すと、そのデバイスドライバを再び有効(再起動)にできます。
Tkdv2

⑥ アンインストールを押すと、そのデバイスドライバが削除されます。
Tkdv5


これでもう、デバイスマネージャもハードウェアウィザードも、マウスで操作しないでよくなりました。

このツールがどのような場合に便利かというと、PCIとかPCI Expressは、FPGAをコンフィギュレーションすると、FPGA内のレジスタもクリアされてしまうから、BAR0とかの設定も全部消えてしまうのです。だからといって、パソコンを再起動するのは芸がなさすぎます。
そのため、今まで私はデバイスマネージャを開いて目的のデバイスドライバを無効→有効とやってきたのですが、デバイスマネージャで目的のデバイスを選んで、マウスで右クリックして、プルダウンメニューの中から目的の処理を選ぶ・・・・というのが大変でした。
これからは、このツールを使って「無効」「有効」を押せばよいだけなので、FPGAを載せたPCI (e)ボードの開発がぐっと楽になるというわけです。

このツールは近日公開予定です。

|

« ザイリンクスのパートナーになりました! | トップページ | WDMコントローラをリリースしました »

コメント

コメントを書く



(ウェブ上には掲載しません)




« ザイリンクスのパートナーになりました! | トップページ | WDMコントローラをリリースしました »