※2014.2.8 加筆修正しています。
※2014.2.13 さらに加筆修正しています。
前回までで、WCELDRのビルドと組込方法まで解説しました。
今回からは、WCELDRの変更方法を解説します。
今回、Plattformフォルダにある、BSPのソースコードを変更するのですが、
CEPC用BSPのソースコードを変更してしまうといろいろと面倒があるので、
まずBSPを複製してVMWare用のBSPを生成することにしました。
ツールメニューから、
[Platform Builder]→[Clone BSP]を選択してください。
以下のようなダイアログが表示されます。

[Source BSP]はコンボボックスになっているので、
選択肢からCEPCのBSPを選択します。
New BSP Informationの各項目は以下のような意味です。
・Name:BSPの名前を入力してください。
・Description:BSPの概要を入力してください。
・Platform directory:Platformディレクトリ配下にBSP専用のフォルダが生成されますが、そのフォルダ名を入力します。
・Vender:BSPを作成した会社名などを入力します。
・Version:バージョン番号を入力します。自由に入力してください。
[Clone]ボタンをクリックすると、
Source BSPのファイルを使用し、ダイアログで設定したBSPとして複製されます。
複製が完了したら、一度Visual Studioを立ち上げ直し、
複製したBSPでOSイメージのプロジェクトを作成してください。
複製が完了したら、WCELDRの変更をしていきます、
以前の記事で、VMWare Playerがエミュレートしてるネットワークアダプタは
AMD AM79C970Aで、KITL用に提供されているAM79C973用ライブラリが
流用できそうということを書きました。
ということで、WCELDRにネットワークアダプタのライブラリを追加します。
KITL用に提供されているAMD AM79C973用ライブラリのソースコードは
以下のフォルダに格納されています。
WINCE800¥platform¥common¥src¥common¥ethdrv¥am79c973
このコードはビルドされると、以下のフォルダにライブラリ(lib)を生成します。
$(_PLATCOMMONLIB)¥$(_CPUDEPPATH)¥oal_ethdrv_am79c973.lib
WCELDRにこのlibを組み込んで、
このlibが提供する関数を呼び出すようにする必要がありますが、
WCELDRは自身をRAMに展開するXLDRと、
OSイメージをRAMに展開する機能を担うBLDRの二つのモジュールで構成されているので、
ネットワークアダプタのlibは、BLDRに組み込みます。
■□■ libの組み込み ■□■
で、どのようにするかというと、
BLDRモジュールをビルドするためのsourcesファイルに書き込むことで実現します。
コンソール版の場合は、
WINCE800¥platform¥CEPC¥src¥boot¥bldr¥console¥sources
シリアル版の場合は、
WINCE800¥platform¥CEPC¥src¥boot¥bldr¥serial¥sources
を編集します。
sources内のTARGETLIBSに、
以下の行を追加してください。
$(_PLATCOMMONLIB)¥$(_CPUDEPPATH)¥oal_ethdrv_am79c973.lib ¥
■□■ lib提供関数への対応 ■□■
BLDRがこのlibが提供する関数を呼び出せるようにします。
①以下のヘッダーファイルを新規に作成し、
libが提供する関数の定義を書き出します。
WINCE800¥platform¥common¥src¥common¥bldr¥inc¥bootTransportEdbgAm79c973.h
書き出す関数は以下の通りです。
詳細なインターフェースは、先に記載したlib用ソースコードを参照ください。
・AM79C973InitDMABuffer
・AM79C973Init
・AM79C973SendFrame
・AM79C973GetFrame
②次に以下のファイルを編集します。
WINCE800¥platform¥CEPC¥src¥boot¥bldr¥init.c
※他のネットワークドライバのlibを使用するコードが書かれているので、
それを参考にしながら編集します。
作成したヘッダーファイルをincludeします。
#include <bootTransportEdbgAm79c973.h>
そして、ネットワークアダプタのインターフェース登録用の
BootEdbgDriver_t構造体の変数を作り、
libが提供する関数のアドレスをその変数にセットします。
static
const
BootEdbgDriver_t
s_AM79C973 = {
AM79C973InitDMABuffer,
AM79C973Init,
NULL,
AM79C973SendFrame,
AM79C973GetFrame,
NULL
};
次に、定義されているDevice_t構造体配列に、作成した構造体変数等をセットします。
{ L"Am79C973", DeviceTypeEdbg, IfcTypePci, 0x20001022, &s_AM79C973 }
一つ目のパラメータは、メニューで表示するネットワークドライバ名です。
二つ目のパラメータは、デバイス種別です。
ここでは他のネットワークドライバと同様に「DeviceTypeEdbg」をセットします。
三つ目のパラメータは、そのデバイスが接続されるインターフェースの種別です。
VMWare PlayerではPCI接続としてエミュレートされているはずなので、
IfcTypePciをセットします。
四つ目のパラメータは、ベンダーIDとデバイスIDをつなげた値です。
ただし、デバイスID→ベンダーIDの順でつなげてください。
五つ目のパラメータが、先に作成したBootEdbgDriver_t構造体変数の
アドレスをセットします。
ここまで完了したら一度ビルドを通してみてください。
⇒残念ながら、リンクフェーズで失敗するかと思います。

次回は、このリンクフェーズのエラーについて見ていきます。
※2014.2.13 さらに加筆修正しています。
前回までで、WCELDRのビルドと組込方法まで解説しました。
今回からは、WCELDRの変更方法を解説します。
今回、Plattformフォルダにある、BSPのソースコードを変更するのですが、
CEPC用BSPのソースコードを変更してしまうといろいろと面倒があるので、
まずBSPを複製してVMWare用のBSPを生成することにしました。
ツールメニューから、
[Platform Builder]→[Clone BSP]を選択してください。
以下のようなダイアログが表示されます。

[Source BSP]はコンボボックスになっているので、
選択肢からCEPCのBSPを選択します。
New BSP Informationの各項目は以下のような意味です。
・Name:BSPの名前を入力してください。
・Description:BSPの概要を入力してください。
・Platform directory:Platformディレクトリ配下にBSP専用のフォルダが生成されますが、そのフォルダ名を入力します。
・Vender:BSPを作成した会社名などを入力します。
・Version:バージョン番号を入力します。自由に入力してください。
[Clone]ボタンをクリックすると、
Source BSPのファイルを使用し、ダイアログで設定したBSPとして複製されます。
複製が完了したら、一度Visual Studioを立ち上げ直し、
複製したBSPでOSイメージのプロジェクトを作成してください。
複製が完了したら、WCELDRの変更をしていきます、
以前の記事で、VMWare Playerがエミュレートしてるネットワークアダプタは
AMD AM79C970Aで、KITL用に提供されているAM79C973用ライブラリが
流用できそうということを書きました。
ということで、WCELDRにネットワークアダプタのライブラリを追加します。
KITL用に提供されているAMD AM79C973用ライブラリのソースコードは
以下のフォルダに格納されています。
WINCE800¥platform¥common¥src¥common¥ethdrv¥am79c973
このコードはビルドされると、以下のフォルダにライブラリ(lib)を生成します。
$(_PLATCOMMONLIB)¥$(_CPUDEPPATH)¥oal_ethdrv_am79c973.lib
WCELDRにこのlibを組み込んで、
このlibが提供する関数を呼び出すようにする必要がありますが、
WCELDRは自身をRAMに展開するXLDRと、
OSイメージをRAMに展開する機能を担うBLDRの二つのモジュールで構成されているので、
ネットワークアダプタのlibは、BLDRに組み込みます。
■□■ libの組み込み ■□■
で、どのようにするかというと、
BLDRモジュールをビルドするためのsourcesファイルに書き込むことで実現します。
コンソール版の場合は、
WINCE800¥platform¥CEPC¥src¥boot¥bldr¥console¥sources
シリアル版の場合は、
WINCE800¥platform¥CEPC¥src¥boot¥bldr¥serial¥sources
を編集します。
sources内のTARGETLIBSに、
以下の行を追加してください。
$(_PLATCOMMONLIB)¥$(_CPUDEPPATH)¥oal_ethdrv_am79c973.lib ¥
■□■ lib提供関数への対応 ■□■
BLDRがこのlibが提供する関数を呼び出せるようにします。
①以下のヘッダーファイルを新規に作成し、
libが提供する関数の定義を書き出します。
WINCE800¥platform¥common¥src¥common¥bldr¥inc¥bootTransportEdbgAm79c973.h
書き出す関数は以下の通りです。
詳細なインターフェースは、先に記載したlib用ソースコードを参照ください。
・AM79C973InitDMABuffer
・AM79C973Init
・AM79C973SendFrame
・AM79C973GetFrame
②次に以下のファイルを編集します。
WINCE800¥platform¥CEPC¥src¥boot¥bldr¥init.c
※他のネットワークドライバのlibを使用するコードが書かれているので、
それを参考にしながら編集します。
作成したヘッダーファイルをincludeします。
#include <bootTransportEdbgAm79c973.h>
そして、ネットワークアダプタのインターフェース登録用の
BootEdbgDriver_t構造体の変数を作り、
libが提供する関数のアドレスをその変数にセットします。
static
const
BootEdbgDriver_t
s_AM79C973 = {
AM79C973InitDMABuffer,
AM79C973Init,
NULL,
AM79C973SendFrame,
AM79C973GetFrame,
NULL
};
次に、定義されているDevice_t構造体配列に、作成した構造体変数等をセットします。
{ L"Am79C973", DeviceTypeEdbg, IfcTypePci, 0x20001022, &s_AM79C973 }
一つ目のパラメータは、メニューで表示するネットワークドライバ名です。
二つ目のパラメータは、デバイス種別です。
ここでは他のネットワークドライバと同様に「DeviceTypeEdbg」をセットします。
三つ目のパラメータは、そのデバイスが接続されるインターフェースの種別です。
VMWare PlayerではPCI接続としてエミュレートされているはずなので、
IfcTypePciをセットします。
四つ目のパラメータは、ベンダーIDとデバイスIDをつなげた値です。
ただし、デバイスID→ベンダーIDの順でつなげてください。
五つ目のパラメータが、先に作成したBootEdbgDriver_t構造体変数の
アドレスをセットします。
ここまで完了したら一度ビルドを通してみてください。
⇒残念ながら、リンクフェーズで失敗するかと思います。

次回は、このリンクフェーズのエラーについて見ていきます。