ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

Visual Studio 2005上で、DDKを使い(デバイスドライバをビルド)しましょう

や、デバイスドライバデバッグが出来ないから、IDE上に構築しても意味ないじゃん。って突っ込みは十分判りますよ。


でもですね、デバッグだけがIDEの本質じゃない訳で。
ソースの管理は一目でわかるし、コードは色付き表示だし、慣れた環境じゃないですか?


それに、実際試したら、意外と簡単だったんですよ?設定するの。

発端

なんでVisual Studio 2005上で構築してみようかな?と思ったかと言うと、以下の文面を見たからです。

Visual Studio をエディタおよび統合開発環境として使用する以外に、Visual Studio から Hollis Technology Solutions 製の Ddkbuild などのバッチ コマンド ファイルを使用してビルド ユーティリティを呼び出すことができます。

http://www.microsoft.com/japan/whdc/devtools/tools/buildenv.mspx

これを見て、「え?Visual Studio上でビルドできるの?」って思った訳です。


で、他の人は、どうやってんのかな?と思って、早速ぐーぐる。

Ddkbuild の検索結果のうち 日本語のページ 約 10 件中 1 - 8 件目 (0.18 秒)

少なっ!
…まぁ、普通のバイナリャー(バイナリアンな人々)は、んな軟弱な事はしませんわな。


しょうがないので、ddkbuildなるものをゲット。
MSのリンク紹介には、2件あります。


ゲットして開いてみると唖然。中は、ddkbuild.bat 一本だけ。

何を、どうすれば良いか?

バッチファイルとサイト上の説明を機械翻訳に掛けながら 眺めてみると、要するに、以下のようにして使えば良いようです。

  • Visual Studioのビルドイベントに、ddkbuild.bat とオプション引数を少々渡してやれば良い。
  • オプション引数には、使用するDDKとターゲットの種類を掛け合わせたものと、リリース/デバッグの指定等を行えば良い。
  • インストールしたDDKの場所を、DDKの種類に合わせて環境引数をセットし呼び出せば、後は適当にビルドしてくれる。

検証した環境

以降、実際に試したやり方を、簡単に述べます。
テストした環境は以下の通り。

VS2005でビルドまで

プロジェクトの作成から開始します。
プロジェクトは、Visual C++ → 全般 → メイクファイル プロジェクト です。
DDK1
DDK1 (C)wacky


ここでは、設定タブが幾つか ありますので、以下のように設定します。
DDK3
DDK3 (C)wacky

DDK4
DDK4 (C)wacky


設定で注意すべきなのは、以下の項目です。

ビルドコマンドライン ddkbuild -WNET checked .
リビルドコマンドライン ddkbuild -WNET checked . -cZ

ここでは、ddkbuild.batの第1引数に"-WNET"を与えていますが、使うDDKとターゲットの組み合わせ如何によって変える必要があります。
第2引数では、デバッグするので"checked"を与えていますが、リリースだと"free"のようですね。


とりあえず、プロジェクトを作成した直後です。
DDK5
DDK5 (C)wacky


それでは、早速ソースを引っ張ってきて、ビルドしましょう。
今回は、DDKのgeneralサンプルを使います。以下のフォルダのファイルを丸ごと…
DDK6
DDK6 (C)wacky
 ↓プロジェクトフォルダにコピーします。
DDK7
DDK7 (C)wacky
あ、注意点として、ビルド時、C:\WINDDK\3790.1830\src\general\portio\gpioctl.h がビルドに必要ですので、忘れずにコピーして下さい。
(私はビルドに失敗して、ようやく気付いた)


次に、ソリューションエクスプローラから右クリックで、追加 → 既存の項目 を選び…。
DDK8
DDK8 (C)wacky
 ↓入れます。
DDK10
DDK10 (C)wacky


次に、ddkbuild.batを持ってきます。
DDK11
DDK11 (C)wacky


次に、ddkbuild.batを開き、先頭行に 環境変数 WNETBASE に、DDKのルート位置を教えてあげます。

set WNETBASE=C:\WINDDK\3790.1830

@echo off
...


閉じて、ビルドすると、以下のようにビルドできるハズです。
DDK12
DDK12 (C)wacky

ほら、すっごく簡単でしょ?

それでは、動かしてみましょう

動かすには、コンソールアプリケーションもビルドしなければならないので、同じプロジェクト内に突っ込んで、えいやっとビルド。
DDK13
DDK13 (C)wacky


次は、ビルドした以下のバイナリをターゲットにコピーします。

  • genport.sys
  • gpdread.exe
  • genport.inf


後は、付属するドキュメント通りにドライバを組み込み、gpdread.exe を実行。
DDK24
DDK24 (C)wacky

おぉ、ちゃんと動いていますよ。
(ドライバの組み込みに失敗していたら、"Unable to open the device."と出ます)

まとめ

恒例のまとめ〜。

  • VS2005で、デバイスドライバのビルドは簡単です
  • 要するに、ddkbuild.batを引数付きで呼び出すだけです
  • IDE上で、ソースを一括管理できるのは、魅力的です