第 9 章 実行に当たっての問題
12.7 Kernel PlugIn ドライバのコンパイル
注意: Kernel PlugIn は後方互換性はありません。従って、WinDriver のバージョンを変更する場合には、新 しいバージョンを使用して、Kernel PlugIn ドライバをリビルドする必要があります。
12.7.1 Windows で Kernel PlugIn ドライバをコンパイル
サンプルの WinDriver\samples\pci_diag\kp_pci Kernel PlugIn ディレクトリと DriverWizard で生 成された Kernel PlugIn の <project_dir>\kermode ディレクトリ (<project_dir> は、生成された ドライバ プロジェクトを保存したディレクトリ) には、以下の Kernel PlugIn プロジェクト ファイルが含まれます (xxx はドライバ名。サンプルの場合は pci、またはウィザードでコードを生成する際に指定した名前):
x86: 32 ビット プロジェクト ファイル
msdev <version>\kp_xxx.vcproj: 32 ビット MS Visual Studio プロジェクト ファイル (<version> は、IDE のバージョンを表します — 例えば “2012”)
win_gcc\makefike: 32 ビット Windows GCC (MinGW / Cygwin) makefike
amd64: 64 ビット プロジェクト ファイル
msdev <version>\kp_xxx.vcproj: 64 ビット MS Visual Studio プロジェクト ファイル (<version> は、IDE バージョンを表します — 例えば “2012”)
win_gcc\makefike: 64 ビット Windows GCC (MinGW / Cygwin) makefike
サンプルの WinDriver\samples\pci_diag ディレクトリと生成された <project_dir> ディレクトリに は、それぞれ Kernel PlugIn ドライバを実行するユーザーモード アプリケーション用のプロジェクト ファイルが 含まれます(xxx はドライバ名。サンプルの場合は pci、またはウィザードでコードを生成する際に指定した 名前):
x86: 32 ビット プロジェクト ファイル
msdev <version>\xxx_diag.vcproj: 32 ビット MS Visual Studio プロジェクト ファイ ル (<version> は、IDE バージョンを表します — 例えば “2012”)
win_gcc\makefike: 32 ビット Windows GCC (MinGW / Cygwin) makefike
amd64: 64 ビット プロジェクト ファイル
msdev <version>\xxx_diag.vcproj: 64 ビット MS Visual Studio プロジェクト ファ イル (<version> は、IDE バージョンを示します — 例えば “2012”)
win_gcc\makefike: 64 ビット Windows GCC (MinGW / Cygwin) makefike
上記の msdev <version> MS Visual Studio ディレクトリには、Kernel PlugIn とユーザーモード アプリ ケーション両方のプロジェクト ファイルを含む xxx_diag.sln ソリューション ファイルも含まれています。
DriverWizard を使用してコードを生成し、DLL (ダイナミックリンク ライブラリ) の生成を選択した場合、生成
した <project_dir> ディレクトリには libproj DLL プロジェクトのディレクトリも含まれます。このディレ ク ト リ に は 、x86 (32-bit) と / ま た は amd64 (64-bit) デ ィ レ ク ト リ が あ り 、 選 択 し た IDE 用 に msdn_<version> デ ィ レ ク ト リ が 含 ま れ 、 各 IDE の デ ィ レ ク ト リ に は 、DLL の ビ ル ド 用 に xxx_libapi.vcproj プロジェクト ファイルがあります。DriverWizard で生成したユーザーモードの診断 プロジェクト (xxx_diag.vcproj) から DLL を使用します。Windows で Kernel PlugIn ドライバと各ユー ザーモード アプリケーションをビルドするには、以下のステップを実行します。
1. WDK (Windows Driver Kit) がインストールされていることを確認します。
2. WDK をインストールした場所を示すように BASEDIR 環境変数を設定します。
3. Kernel PlugIn SYS ド ラ イ バ (サ ン プ ル の kp_pci.sys、 ま た は DriverWizard で 生 成 さ れ た kp_xxx.sys) をビルドします。
MS Visual Studio を使用する場合 - Microsoft Visual Studio を起動し、下記を実行します。
ドライバのプロジェクト ディレクトリから、Visual Studio Kernel PlugIn ソリューション ファイル (<project_dir>\msdev <version>\xxx_diag.sln) を 開 き ま す 。
<project_dir> は、ドライバのプロジェクト ディレクトリです (サンプル コードの場合は pci_diag、または DriverWizard で生成されたコードの保存先のディレクトリ)。msdev
<version> は、ターゲットの Visual Studio ディレクトリ (例 msdev_2012) です。xxx はド ライバ名です (サンプルの場合は pci、または DriverWizard でコードを生成する際に指定 した名前)。
注意: DriverWizard で MS Visual Studio 用にコードを生成するように選択した場合、コード ファイルを生成した後、[IDE to Invoke] オプションを使用して、選択した IDE で Wizard が 自動的に生成されたワークスペース ファイルまたはソリューション ファイルを開きます。
MS Visual Studio を使用して Kernel PlugIn プロジェクトをビルドする際には、プロジェクトの ディレクトリへのパスにスペースを含めないでください。
Kernel PlugIn プロジェクト (kp_pci.vcproj または kp_xxx.vcproj) をアクティブな プロジェクトとして設定します。
対象のプラットフォーム用のアクティブな構成を選択します。[ビルド] メニューから [構成マ ネージャ] を選択し、使用する構成を選択します。
Kernel PlugIn SYS ドライバ (サンプルの場合は kp_pci.sys、ウィザードで生成された
コードの場合は kp_xxx.sys) をビルドするには以下のステップを実行します。
注意: 複数の OS 用にドライバをビルドするには、そのドライバサポートする最も下位の OS を選択します。たとえば、Windows XP およびそれ以降をサポートする場合、Win32 winxp free (リリース モード) または Win32 winxp checked (デバッグ モード) のど ちらかを選択します。
ドライバをビルドします。ショートカット キー (Visual Studio 2008 では F7 キー) を押すか、
[Build] メニューから実行してください。
Windows GCC を使用する場合 – 選択した Windows GCC 開発環境 (MinGW / Cygwin) から下
記のステップを実行します。
ターゲットの Windows GCC Kernel PlguIn プロジェクトのディレクトリへ移動します -
<project_dir>\<kernel_dir>\<CPU>\win_gcc、<project_dir> は対象のド ラ イ バ の プ ロ ジ ェ ク ト デ ィ レ ク ト リ (サ ン プ ル コ ー ド の 場 合 は pci_diag、 ま た は DriverWizard で生成されたコードの保存先のディレクトリ)、<kernel_dir> は対象のプロ ジ ェ ク ト の Kernel PkugIn デ ィ レ ク ト リ (サ ン プ ル コー ド の 場 合 は kp_pci、 ま た は DriverWizard で生成されたコードの場合は kermode)、<CPU> は対象の CPU アーキテク チャ (x86 プラットフォームの場合は x86、x64 プラットフォームの場合は amd64) です。
たとえば、サンプルの KP_PCI ドライバの 32-bit バージョンをビルドする場合:
$ cd WinDriver\samples\pci_diag\kp_pci\x86\win_gcc
DriverWizard で生成された Kernel PlugIn ドライバの 64-bit バージョンをビルドする場合:
$ cd <project_dir>\kermode\amd64\win_gcc
<project_dir> は DriverWizard で生成されたプロジェクト ディレクトリへのパスです (た とえば、~\WinDriver\wizard\my_projects\my_kp)。
Kernel PlugIn の makefile の ddk_make.bat コマンドを編集して、対象のビルド構成を設定し
ます – つまり、ターゲットの OS とビルド モード (release – free、または debug - checked)。
デフォルトでは、WinDriver のサンプルと DriverWizard で生成された makefile には、ター ゲットの OS のパラメータに Windows XP (32-bit の場合 winxp、64-bit の場合 x64)、およ びビルド モードに release (free) を設定します。
4. 注意:
ddk_make.bat ユーティリティは WinDriver\util ディレクトリ以下にあり、ビルド コマン
ド を 起 動 す る 際 に 、Windows が 自 動 的 に 認 識 し ま す 。 パ ラ メ ー タ な し で ddk_make.bat を起動すると、このユーティリティで利用可能かオプションを表示しま す。
選択したビルド OS は、WinDriver の CPU アーキテクチャのバージョンと一致させ て く だ さ い 。 た と え ば 、WinDriver 32-bit 版 を 使 用 し て い る 場 合 に は 、64-bit win7_x64 OS フラグを選択できません。
複数の OS 用にドライバをビルドする場合には、ドライバがサポートする最も下位の
OS バージョンを選択してください。たとえば、Windows XP およびそれ以降をサ
ポートする場合、OSパラメータには、winxp (32-bit の場合) または x64 (64-bit の 場合) を設定してください。
make コマンドを使用して Kernel PlugIn ドライバをビルドします。
4. Kernel PlugIn ドライバと動作するユーザーモード アプリケーションをビルドします (サンプルの
pci_diag.ese、または DriverWizard で生成された xxx_diag.exe) 。
MS Visual Studio を使用する場合:
ユーザーモードのプロジェクトをアクティブなプロジェクトとして設定します (サンプルの場合 は pci_diag.vcproj、 ま た は DriverWizard で 生 成 さ れ た コ ー ド の 場 合 は xxx_diag.vcproj)。
アプリケーションをビルドします: Buid メニューからプロジェクトをビルドするか、関連する ショートカット キー (たとえば、Visual Studio 2008 の場合 F7) を使用してビルドします。
Windows GCC を使用する場合 – 選択した Windows GCC 開発環境 (MinGW / Cygwin) から下
記のステップを実行します:
タ ー ゲ ッ ト の Windows GCC ア プ リ ケ ー シ ョ ン の デ ィ レ ク ト リ へ 移 動 し ま す -
<project_dir>\<CPU>\win_gcc、<project_dir> は対象のドライバのプロジェク ト ディレクトリ (サンプル コードの場合は pci_diag、または DriverWizard で生成された コードの保存先のディレクトリ)、<CPU> は対象の CPU アーキテクチャ (x86 プラットフォーム の場合は x86、および x64 プラットフォームの場合は amd64) です。
たとえば:
サンプルの pci_diag アプリケーションの 32-bit バージョンをビルドする場合:
$ cd WinDriver\samples\pci_diag\x86\win_gcc
DriverWizard で生成されたユーザーモードのアプリケーションの 64-bit バージョンをビルド する場合:
$ cd <project_dir>\amd64\win_gcc
<project_dir> は DriverWizard で生成されたプロジェクト ディレクトリへのパスです (た とえば、~\WinDriver\wizard\my_projects\my_kp)。
make コマンドを使用してアプリケーションをビルドします。
12.7.2 Linux でKernel PlugIn ドライバをコンパイル
Linux で Kernel PlugIn ドライバと関連するユーザーモード アプリケーションをビルドするには、以下のステッ プを実行してください:
1. Shell ターミナルを開きます。
2. Kernel PlugIn ディレクトリに移動します。
たとえば、サンプル KP_PCI ドライバをコンパイルする場合は、次のコマンドを実行します。
$ cd WinDriver/samples/pci_diag/kp_pci
DriverWizard で生成された Kernel PlugIn コード用の Kernel PlugIn ドライバをコンパイルする場合は、
次のコマンドを実行します。
$ cd <project_dir>/kermode/linux
(<project_dir> は DriverWizard で生成されたプロジェクトのディレクトリへのパスです (たとえば、
~/WinDriver/wizard/my_projects/my_kp)。
3. configure スクリプトを使用して、makefile を生成します。
$ ./configure
ヒント: WinDriver のカーネル モジュールの名前を変更した場合、スクリプトを実行する前に、-DWD_DRIVER_NAME_CHANGE フラグでドライバをビルドするので、Kernel PlugIn の configure ス クリプトの以下の行のコメントを外してください (“#” を削除)。
# ADDITIONAL_FLAGS=”-DWD_DRIVER_NAME_CHANGE”
注意:
configure スクリプトは、起動してるカーネルをベースとしたカーネル独自の makefile を作成します。configure スクリプトに --with-kernel-source=<path> フラグを追 加することによって、インストールした他のカーネル ソースをベースとした configure スクリ プトを起動できます。<path> には、カーネル ソースのディレクトリへのフル パスを指定しま す。
Linux カーネル バージョンが 2.6.26 またはそれ以降の場合、configure スクリプトは、
kbuildを使用してカーネル モジュールをコンパイルする makefile を生成します。以前の バージョンの Linux で、kbuild を強制的に使用するには、configure スクリプトに --enable-kbuild フラグを渡します。
ヒント: configure スクリプトのオプションの一覧を表示するには、以下のように --help オプションを
使用します:
./configure --help
4. make コマンドを使用して Kernel PlugIn モジュールをビルドします。
このコマンドは、作成された kp_xxx_module.o/.ko ドライバを含む、新しい LINUX.<kernel version>.<CPU> ディレクトリを作成します。
5. サンプル ユーザーモード診断アプリケーションの makefile のあるディレクトリに移動します。
KP_PCI サンプル ドライバの場合:
cd ../LINUX
DriverWizard で生成された Kernel PlugIn ドライバの場合:
cd ../../linux
6. make コマンドを使用してサンプル診断プログラムをコンパイルします。