第 9 章 実行に当たっての問題
12.7 Kernel PlugIn ドライバのコンパイル
12.7.1 Windows でのコンパイル
サンプルの WinDriver\samples\pci_diag\kp_pci\ Kernel PlugIn ディレクトリと Driver Wizard で 生成されたKernel PlugIn の <project_dir>\kermode\ ディレクトリ (<project_dir> は、生成され たドライバプロジェクトを保存したディレクトリ) には、以下の Kernel PlugIn プロジェクトファイルが含まれます (xxx はドライバ名。サンプルの場合は pci、またはウィザードでコードを生成する際に指定した名前。):
z x86\: 32 ビットプロジェクトファイル
○ msdev_2005\kp_xxx.vcproj: 32 ビット MSDEV 2005 プロジェクト
○ msdev_2003\kp_xxx.vcproj: 32 ビット MSDEV 2003 プロジェクト
○ msdev_6\kp_xxx.dsp: 32 ビット MSDEV 6.0 プロジェクト z amd64\: 64 ビットプロジェクトファイル
○ msdev_2005\kp_xxx.vcproj: 64 ビット MSDEV 2005 プロジェクト
サンプルの WinDriver\samples\pci_diag\ ディレクトリと生成された <project_dir>\ ディレクト リには、それぞれ Kernel PlugIn ドライバを実行するユーザーモードアプリケーション用のプロジェクトファイ ルが含まれます(xxx はドライバ名。サンプルの場合は pci、またはウィザードでコードを生成する際に指定 した名前。):
z x86\: 32 ビット プロジェクト ファイル
○ msdev_2005\xxx_diag.vcproj: 32 ビット MSDEV 2005 プロジェクト
○ msdev_2003\xxx_diag.vcproj: 32 ビット MSDEV 2003 プロジェクト
○ msdev_6\xxx_diag.dsp: 32 ビット MSDEV 6.0 プロジェクト
○ cbuilder4\xxx.bpr および xxx.cpp: Borland C++ Builder 4.0 プロジェクトファイルと 関連 CPP ファイル。これらのファイルは、Borland C++ Builder 5.0 および 6.0 でも使用できま す。
○ cbuilder3\xxx.bpr および xxx.cpp: Borland C++ Builder 3.0 プロジェクトファイルと 関連 CPP ファイル
z amd64\: 64 ビット プロジェクト ファイル
○ msdev_2005\xxx_diag.vcproj: 64 ビット MSDEV 2005 プロジェクト
上記の MSDEV ディレクトリには、Kernel PlugIn とユーザーモード アプリケーション両方のプロジェクト ファイ ルを含む xxx_diag.dsw/sln ワークスペース / ソリューション ファイルも含まれています。
Kernel PlugIn ドライバと各ユーザーモードアプリケーションをビルドするには、以下のステップを実行しま
す。
1. ご使用の PC に対象の OS 用の Windows DDK (Driver Development Kit) がインストールされてい ることを確認します (セクション 11.6.1 を参照してください)。
対象の OS とは、作成するドライバが動作するオペレーティングシステムのことです。たとえば、
Windows XP 用のドライバを作成する場合には、Windows XP DDK をインストールします。
それぞれの OS 用に複数の DDK をインストールでき、ドライバが対応する対象の OS に応じて、
Kernel PlugIn ドライバをリビルドします。
2. 対象のプラットフォーム用の Windows DDK の場所を示すように BASEDIR 環境変数を設定しま す。たとえば、Windows XP 用の Kernel PlugIn ドライバをビルドするには、Windows XP DDK を インストールしたディレクトリを示すように BASEDIR 環境変数を設定します。
3. Microsoft Developer Studio (MSDEV) を開始し、下記のステップを実行します。
① ドライバのプロジェクト ディレクトリから、生成されたワークスペース/ソリューション ファイル (<project_dir>\<MSDEV_dir>\xxx_diag.dsw/.sln) を開きます。
<project_dir> は、ドライバのプロジェクト ディレクトリです (サンプル コードの場合は pci_diag\、または Driver Wizard で生成されたコードの保存先のディレクトリ)。
<MSDEV_dir> は、ターゲット MSDEV ディレクトリ (msdev2005 / msdev2003 / msdev_6) です。xxx はドライバ名です (サンプルの場合は pci、または Driver Wizard でコードを生成 する際に指定した名前)。
DriverWizard で MSDEV IDE 用にコードを生成するように選択した場合、コードファイルを
生成した後、Wizard が自動的に MSDEV を起動し、生成されたワークスペースファイルまた はソリューションファイルを開くので注意してください。ただし、コード生成ダイアログの ''IDE
to Invoke'' オプションを''None'' に設定することによって、この動作を回避できます。
② Kernel PlugIn SYS ドライバ (サンプルの場合は kp_pci.sys、ウィザードで生成されたコー
ドの場合は kp_xxx.sys) をビルドするには以下のステップを実行します。
i. Kernel PlugIn プロジェクト (kp_pci.dsp/vcproj または kp_xxx.dsp/vcproj) をアクティブなプロジェクトとして設定します。
ii. 対象のプラットフォーム用のアクティブな構成を選択します。[ビルド] メニューから [構成 マネージャ] (MSDEV 2003 / 2005 の場合) または [アクティブな構成の設定 …]
(MSDEV 6.0 の場合) を選択し、使用する構成を選択します。
注意: アクティブな設定は、ビルドするドライバのターゲットの OS と対応している必要が あります。たとえば、Windows 2000 の場合、Win32 win2k free (リリースモード) ま
たは Win32 win2k checked (デバッグモード) のどちらかを選択します。
iii. ドライバをビルドします。ショートカット キー (MSDEV 6.0 では F7 キー) を押すか、[Build]
メニューから実行してください。
③ Kernel PlugIn ドライバを実行するユーザーモードアプリケーションをビルドするには、以下の
ステップを実行します (サンプルの場合は pci_diag.exe、ウィザードで生成されたコード の場合は xxx_diag.exe):
i. ユーザーモード プロジェクト (サンプルの場合は pci_diag.dsp/vcproj、ウィザー ドで生成されたコードの場合は xxx_diag.dsp/vcproj) をアクティブなプロジェクト として設定します。
ii. アプリケーションをビルドします。ショートカットキー (MSDEV 6.0 では F7 キー) を押す か、[ビルド] メニューから実行します。
注意: Windows 98 / Me では、生成されたコードを上記で説明した方法では、SYS ドライバを ビルドできません。ただし、Windows 2000 / XP / Server 2003 / Vista で Windows 98 / Me プラット フォームをターゲットとして SYS ドライバをビルドできます – つまり、Windows 2000 / XP / Server
2003 / Vista が起動する PC でコードをビルドします。しかし、Windows 98 / Me DDK の場所を示す
ように BASEDIR 環境変数を設定し、Windows 98 / Me 用に Kernel PlugIn プロジェクトでビルド ターゲットを設定し、Windows 98 / Me で生成されたドライバを使用します。
12.7.2 Linux でのコンパイル
1. Shell ターミナルを開きます。
2. Kernel PlugIn ディレクトリに移動します。たとえば、サンプル KP_PCI ドライバをコンパイルする場
合は、次のコマンドを実行します。
cd WinDriver/samples/pci_diag/kp_pci
DriverWizard で生成された Kernel PlugIn コード用の Kernel PlugIn ドライバをコンパイルする場合 は、次のコマンドを実行します (<path> は生成された DriverWizard プロジェクトのディレクトリ。
例: /home/user/WinDriver/wizard/my_projects/my_kp/):
cd <path>/kermode/linux/
3. configure スクリプトを使用して、makefile を生成します。
./configure
注意: configure スクリプトは、起動してるカーネルをベースとしたカーネル独自の makefile を作成します。configure スクリプトに --with-kernel-source=<path> フラグを追加す ることによって、インストールした他のカーネル ソースをベースとした configure スクリプトを起動で きます。<path> には、カーネル ソースのディレクトリへのフル パスを指定します。
4. Kernel PlugIn モジュールをビルドします。“make” コマンドを使用します。
このコマンドは、作成された kp_xxx.o/.ko ドライバを含む、新しい LINUX.xxx/ ディレクトリ を作成します (xxx は Linux カーネルにより異なります)。
5. サンプルユーザーモード診断アプリケーションの makefile のあるディレクトリに移動します。
KP_PCI サンプルドライバの場合: cd ../LINUX/
DriverWizard で生成された Kernel PlugIn ドライバの場合:
cd ../../linux/
6. サンプル診断プログラムをコンパイルします。 “make” コマンドを使用します。
12.7.3 Solaris でのコンパイル
注意: WinDriver は、GNU make ユーティリティ用にのみ makefiles を生成します。
GNU make ではなく、標準的な make ユーティリティを使用する場合、WinDriver が生成する makefile を修正する必要があります。http://www.sunfreeware.com から GNU make パッケージを入手できます。
1. Shell ターミナルを開きます。
2. ドライバのプロジェクト ディレクトリに移動します。
たとえば、サンプル KP_PCI ドライバをコンパイルする場合は、次のコマンドを実行します。
cd WinDriver/samples/pci_diag/
3. “make” コマンドを使用して、Kernel PlugIn モジュールをビルドします。たとえば、サンプル
KP_PCI ドライバをビルドする場合は、次のコマンドを実行します。
make -C kp_pci /SOLARIS
DriverWizard で生成された Kernel PlugIn ドライバをビルドする場合は、次のコマンドを実行しま す。
make -C kermode/solaris
4. サンプル診断プログラムをコンパイルします。
make -C solaris
注意: 64 ビット カーネルの場合、Kernel PlugIn モジュールおよびユーザーモード アプリケーションの両方共 に 64 ビット モードでコンパイルする必要があります。WinDriver で提供される makefile は、特別な宣言をせ ずに CC および LD 環境変数を使用します。したがって、ご使用のコンパイラおよびリンカに対応する独自の フラグに合うように、これらの変数を設定する必要がある場合があります。
たとえば、GCC でコンパイルする場合には、CC および LD 変数を以下のように設定する必要があります。
Kernel PlugIn モジュールのコンパイルの場合:
$ export LD="gcc -m64 -melf64_sparc -nostdlib"
$ export CC="gcc -m64 -isystem /usr/include/"
ユーザーモードアプリケーションのコンパイルの場合:
$ export LD="gcc -m64"
$ export CC="gcc -m64"