★【 My Biz Blog 】★

興味のあるビジネス情報を伝えていきます♪
(IoT,Azure,Windows 10, etc...)

WEC2013 on VMWareは可能か?(5)

2014-02-05 19:00:00 | Windows Embedded CE/Compact
※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構造体変数の

 アドレスをセットします。



ここまで完了したら一度ビルドを通してみてください。

⇒残念ながら、リンクフェーズで失敗するかと思います。



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