第 9 章 実行に当たっての問題
14.4 Linux の場合
14.4.1 配布パッケージの用意
このセクションの説明のとおり、必要なファイルを含む配布パッケージをを用意します。
注意:
32-bit と 64-bit の両方のターゲット プラットフォームにドライバを配布する場合、各プラットフォーム用
にそれぞれ配布パッケージを別々に用意してください。各パッケージに必要なファイルは、それぞれ のプラットフォーム用の WinDriver のインストール ディレクトリ以下にあります。
以下の手順で、<source_dir> は配布ファイルをコピーするコピー元のソース ディレクトリを表しま す。デフォルトのソース ディレクトリは WinDriver のインストール ディレクトリです。
ただし、WinDriver のドライバ モジュールの名前を変更した場合、ソース ディレクトリは、名前を変更 したドライバをコンパイルおよびインストールするために変更したファイルを含むディレクトリです。
DriverWizard を使用してドライバ コードを生成した場合、名前を変更したドライバのソース ディレクトリ
は、生成された xxx_installation ディレクトリです (xxx は生成されたドライバ プロジェクトの名前 です)。
14.4.1.1 カーネル モジュール コンポーネント
WinDriver ベースのドライバは、WinDriver API を実装する windrvr6.o/.ko はカーネル モジュールに 依存します。さらに、Kernel PlugIn ドライバを作成した場合、kp_xxx_module.o/.ko カーネル ドライバ モジュールで、このドライバの機能を実装します (xxx は選択した対象のドライバのプロジェクト名)。
注意: カーネル ドライバ モジュールはそのままでは配布できません。ターゲットのカーネル バージョンと一 致させるためにターゲット マシンごとに再コンパイルする必要があります。これは次の理由のためです:
Linux のカーネルは開発途中で、カーネル データ構造体はたびたび変更されます。このような流動的な開
発環境をサポートし、安定したカーネルを作成するために、Linux のカーネル開発者は、カーネル自身を コンパイルしたヘッダー ファイルと同一のヘッダーファイルを使用して、カーネル モジュールをコンパイルす ることを決定しました。バージョン番号がカーネル ヘッダー ファイルに挿入され、カーネルにエンコードされ ているバージョンと照合されます。Linux のドライバ開発者は、ターゲット システムのカーネル バージョンでド ライバを再コンパイルする必要があります。
以下、ターゲットのマシンで対象のカーネル ドライバ モジュールをコンパイルするのに配布が必要なコン ポーネントのリストです。
注意: コピー元のサブディレクトリと一致する配布先のディレクトリのサブディレクトリへファイルをコピーするこ とを推奨します (指定した場合を除き、redist および include など)。そのように選択しない場合、configure スクリプトと関連する makefile のテンプレートのファイル パスを変更し、配布先のディレクトリのファイルの場 所と一致させる必要があります。
<source_dir>/include デ ィ レ ク ト リ か ら 、 windrvr.h 、wd_ver.h 、 お よ び windrvr_usb.h をコピーします (ターゲットでカーネル モジュールをビルドするのに必要)。
windrvr_usb.h は USB 以外のドライバにも必要なのでご注意ください。
<WinDriver installation directory>/util ディレクトリから (または DriverWizard で 生成された xxx_installation/redist ディレクトリから)、wdreg をコピーします (WinDriver のカーネル モジュールをロードするスクリプト)。
<source_dir>/include ディレクトリから、特に指定がない限り、以下のファイルをコピーしま す:
setup_inst_dir: wdreg を使用して、WinDriver のドライバ モジュールをインス トールするスクリプト。
linux_wrappers.c/h: カーネル モジュールを Linux カーネルに結合するラッ パー ライブラリのソース コード ファイル。
linux_common.h および wdusb_interface.h: ターゲット マシンで、カーネル モジュールをビルドするのに必要なヘッダー ファイル。
wdusb_interface.h は、USB 以外のドライバにも必要なので、ご注意ください。
WinDriver のカーネル モジュール用にコンパイルしたオブジェクト コード:
windrvr_gcc_v3.a: GCC v3.x.x コンパイル用
windrvr_gcc_v3_regparm.a: regparm フラグで GCC v3.x.x コンパイル用
windrvr_gcc_v2.a: GCC v2.x.x コンパイル用 (このファイルは 64-bit 版の
WinDriver のインストールにはありません。64-bit Linux アーキテクチャでは GCC v2
を使用しません。)
WinDriver のカーネル ドライバ モジュールをビルドおよびインストールするための configure ス
クリプトと makefile のテンプレート。
注意: 名前に .kbuild を含むファイルは、ドライバのコンパイルに kbuild を使用してください。
configure: makefile.in テンプレートを使用して WinDriver のドライバ モジュールをビルド お よ び イ ン ス ト ー ル す るた めの makefile を 作 成 し 、configure.wd ス ク リ プ ト を 実 行 する configure スクリプト。
configure.wd: makefile.wd[.kbuild].in テンプレートを使用して windrvr6.o/.ko ドライバ モジュールをビルドするための makefile.wd[.kbuild] makefile を作成するスクリプ ト。
makefile.in: makefile.wd[.kbuild] を使用して WinDriver のカーネル ドライバ モ ジュールをビルドおよびインストールするためのメインの makefile 用のテンプレート。
makefile.wd.in と makefile.wd.kbuild.in: windrvr6.o/.ko ドライバ モジュールを ビルドおよびインストールするために makefile.wd[.kbuild] makefile を作成するためのテンプレー ト。
Kernel PlugIn ドライバを作成した場合、同様に以下のファイルをコピーしてください:
DriverWizard で生成された xxx_installation/redist ディレクトリから (xxx は対象のドラ
イバ プロジェクトの名前)、以下の configure スクリプトと makefile テンプレートをコピーします (Kernel PlugIn ドライバをビルドおよびインストールするための makefile を作成用)。
注意: DriverWizard を使用して Kernel PlugIn ドライバを生成しない場合、対象の Kernel PlugIn プロジェクトからファイルをコピーしてください
(たとえば、WinDriver/samples/pci_diag/kp_pci ディレクトリいかにある KP_PCI サン
プルのファイル)。
ファイルをコピーする前に、WinDriver のドライバ モジュール ファイルと区別するために、ファイル 名に “.kp” を追加して名前を変更してください (xxx_installation/redist ファイル名)。 ま たファイル名とファイルのパスを編集して、配布先のディレクトリの構造に一致させる必要がありま す。
configure.kp: makefile.kp[.kbuild].in テンプレートを使用して、Kernel PlugIn ドライ バ モ ジ ュー ル を ビ ル ド お よ び イ ン ス ト ー ル す た めの makefile.kp makefile を 作 成 す る cofigure スクリプト。
注意: WinDriver のカーネル モジュールの名前を変更した場合、スクリプトを実行する前に、-DWD_DRIVER_NAME_CHANGE フラグでドライバをビルドするので、Kernel PlugIn の configure
スクリプトの以下の行のコメントを外してください (“#” を削除)。
# ADDITIONAL_FLAGS=”-DWD_DRIVER_NAME_CHANGE”
makefile.kp.in と makefile.kp.kbuild.in: Kernel PlugIn ドライバ モジュールをビルド およびインストールするために makefile.kp makefile を作成するためのテンプレート。
<source_dir>/lib ディレクトリから、コンパイル済みの WinDriver の API オブジェクト コード をコピー:
kp_wdapi1170_gcc_v3.a: GCC v3.x.x コンパイル用
kp_wdapi1170_gcc_v3_regparm.a: regparm フラグで GCC v3.x.x コンパイ ル用
kp_wdapi1170_gcc_v2.a: GCC v2.x.x コンパイル用 (このファイルは 64-bit 版の WinDriver のインストールにはありません。64-bit Linux アーキテクチャでは GCC v2 を 使用しません。)
開発マシンで Kernel PlugIn をビルドする際に生成される kermode/linux/LINUX.<kernel version>.<CPU> ディレクトリから、Kernel PlugIn ドライバ モジュールをビルドするためのコンパ イル済みのオブジェクト コードを lib 配布サブディレクトリへコピー (xxx は Kernel PlugIn ドライバ プロジェクトの名前):
kp_xxx_gcc_v3.a: GCC v3.x.x コンパイル用
kp_xxx_gcc_v3_regparm.a: regparm フラグで GCC v3.x.x コンパイル用
kp_xxx_gcc_v2.a: GCC v2.x.x コ ン パ イ ル 用 (こ の フ ァ イ ル は 64-bit 版 の WinDriver のインストールにはありません。64-bit Linux アーキテクチャでは GCC v2 を 使用しません。)
14.4.1.2 ユーザーモード ハードウェア コントロール アプリケーション / 共有オブジェクト
WinDriver で作成したハードウェア コントロール アプリケーション / 共有オブジェクトを配布パッケージにコ
ピーします。
(サンプルおよび DriverWizard で生成された WinDriver のプロジェクトのように) ハードウェア コントロール
ア プ リ ケ ー シ ョ ン / 共 有 オ ブ ジ ェ ク ト が libwdapi1170.so を 使 用 す る 場 合 、 こ の フ ァ イ ル を
<source_dir>/lib ディレクトリから、対象の配布パッケージにコピーします。ターゲットの 64-bit プラット フォームに 32-bit アプリケーション / 共有オブジェクトを配布する場合、WinDriver/lib ディレクトリの libwdapi1170_32.so を対象の配布パッケージへコピーし、そのコピーを libwdapi1170.so に名前 を変更します。
対象のハードウェア コントロール アプリケーション / 共有オブジェクト はカーネル バージョン番号と一致する 必要はないので、バイナリ オブジェクト (ソース コードの無許可のコピーを防ぎたい場合) として配布しても かまいません。ただし、対象のドライバのソース コードを配布する場合、Jungo Connectivity 社とのソフトウェ ア ライセンス契約により、libwdapi1170.so 共有オブジェクトのソースコード 、または コード内の WinDriver のライセンス コードを配布することは禁じられているのでご注意ください。