CEをビルドする

Windows CE は、PDA から POS 端末まで必要な機能や性質が大きく異なる様々なデバイスでの利用を想定し、必要な機能だけを組み込んだ独自の Windows CE を各ベンダがビルドする形態を取っていました。この記事では、Brain が搭載している Windows Embedded CE 6.0 をビルドする手順を紹介します。

なお、以下の手順はできる限り**高性能な PC** で行うことを推奨します。

## できること

* Brain で足りていない DLL や機能不足な DLL を作成する (起動しないCEアプリを動くようにする)
* Windows CE エミュレータを PC で動作させる
* SDK を作成する

## Windows Embedded CE 6.0 のインストール

予め、Visual Studio 2005 Professional をセットアップしておきます。評価版でも問題ありません。

まず、Windows Embedded CE 6.0 (直リンク) をインストールします。プロダクトキーを聞かれますが、ダウンロードサイトに記載の Static Activation Key (アクティベーション不要なソフトに提供されるプロダクトキー) が使用できます。

次に、以下のパッチを**この順で**インストールします。設定はデフォルトで構いません。

1. Windows Embedded CE 6.0 Platform Builder Service Pack 1 (直リンク)
2. Windows Embedded CE 6.0 R2 (直リンク)
3. Windows Embedded CE 6.0 R3 (直リンク)

Windows Embedded CE 6.0 には、R3 以降もサポート終了までの間 QFE と呼ばれるセキュリティパッチが提供されていましたが、インストールが煩雑であることと、今回の目的は実際の製品に採用する OS をビルドすることではないという理由から省略します。一応、リンクはこちら (直リンク) です。

なお、アンインストールはこの逆順で行います。

## Windows Embedded CE 6.0 のビルド

まず、Visual Studio 2005 を起動します。Windows Vista 以降では管理者権限で起動します。次に、プロジェクトを新規作成 (Ctrl + Shift + N) し、「Platform Builder for CE 6.0」の「OS デザイン」を作成します。プロジェクト名は適当でいいですが、場所は覚えておいてください。場所・プロジェクト名は空白無しの ASCII にしておくのが無難です。

OK を押すとウィザードが開きます。「次へ」で BSP を選ぶ画面になるので「デバイス エミュレータ: ARMV4I」を選択します。次のデザインテンプレートを選ぶ画面以降は、以下の例を参考に目的に合わせて設定します。最後に「完了」を押したときにセキュリティ警告が出る場合がありますが、無視します。

* 通常は「PDA デバイス」を選択して以降の全てのチェックボックスを有効化します
	+ ビルド時間は、最近の PC では 15 分程度です
	+ DLL の取得やエミュレータの動作には十分です
	+ チェックボックスをデフォルトのまま進めると、ビルド時にエラーで止まります
* フル機能の Windows CE をビルドしたい場合は、「カスタム デバイス」を選択して以降の全てのチェックボックスを有効化します
	+ ビルド時間は、最近の PC では 20 分程度です
* 最小限の Windows CE をビルドしたい場合は、「スモール フットプリント デバイス」を選択します
	+ ビルド時間は、最近の PC では 10 分程度です
	+ かなり機能の少ない Windows CE が得られるので、coredll.dll の取得やエミュレータを目的とする場合には使えません
	+ 情報がありませんが、Brain の Windows CE が最小限であることを考えると、Brain 用 SDK の作成には丁度良いかもしれません

プロジェクトが開いたら、上部のツールバーの緑色の三角ボタン (開始) の右で「デバイス エミュレータ ARMV4I Release」を選び、「詳細なビルド コマンド -> システム生成」でビルドします。ここで掛かる時間は、ウィザードで選択した内容によって変化します。

「エラー」と「失敗」が 0 で終了すれば成功で、最初に作ったプロジェクトフォルダの RelDir\DeviceEmulator\_ARMV4I\_Release に coredll.dll 等の DLL を含む OS のファイルが生成されます。警告は無視してください。エラーになった場合は、ウィザードでの選択項目を変更する必要があるかもしれません。

## DLL の取得

**RelDir\DeviceEmulator\_ARMV4I\_Release** に生成された DLL を使用します。

## エミュレータ

「ターゲット -> 接続オプション」を開きます。選択できない場合は、VS2005 を再起動してプロジェクトを開き直してください。もちろん、Windows Vista 以降では管理者権限で起動します。開いたら、左の「カーネル サービス マップ」をクリックし、「ダウンロード」と「トランスポート」をともに「Device Emulator (DMA)」に設定します。ここで、「ダウンロード」の右の「設定 -> Display」から画面解像度を変更できます。次に「デバッガ」を「KdStub」に設定します。ここまで設定できたら「適用」を押して閉じます。**適用を押さないと変更が反映されない**ので注意してください。

この状態で「ターゲット -> デバイスの接続」を押し、しばらく待つとエミュレータが起動します。起動しない場合は、ビルド時のウィザードでエミュレータ実行に必要な機能を選択しなかったことが考えられます。終了するときはエミュレータウィンドウを「×」で閉じ、VS2005 で「ターゲット -> デバイスの切断」を選択します。

## SDK の作成

「ソリューション エクスプローラ」の「SDK」フォルダを右クリックし、「新規 SDK の追加」を選択します。すると「SDK1 プロパティ ページ」が開くので、「全般」の各項目を適当に設定します。個人で使う分にはこの文字列は自分しか見ないので、ネタでも嘘でも何でもいいので埋めます。他の主要な設定としては、「インストール」で SDK インストーラを出力するフォルダを設定でき、「エミュレーション」で SDK に OS イメージを追加して Platform Builder がない PC でもエミュレータでデバッグできるようにする設定ができます。設定できたら OK で閉じます。

32-bit 環境であればここで「ビルド -> すべての SDK のビルド」を押すとビルドできますが、64-bit 環境ではエラーになります。これを回避するには、SDK を作成するプログラムである GenSdk.exe を 32-bit で動作させる必要があります。そのために、まず GenSDK32.exe をダウンロードして GenSdk.exe と同じ場所 (通常は C:\Program Files (x86)\Microsoft Platform Builder\6.00\cepb\IdeVS) に配置します。**上書きではない**ので注意してください。そして、コマンドプロンプトを用いて GenSDK32 を BuildSDK1.xml のパスを引数に与えて実行すると、「SDK1 プロパティ ページ」で設定したフォルダに SDK の MSI ファイルが生成されます。コマンド入力の例を以下に示します。

```
"C:\Program Files (x86)\Microsoft Platform Builder\6.00\cepb\IdeVS\GenSDK32.exe" "C:\WINCE600\OSDesigns\S4WE\S4WE\SDKs\SDK1\obj\BuildSDK1.xml"

```

ここで生成された SDK は、Visual Studio 2005/2008 の Professional 以上で使用できます。インストール方法は通常の SDK と同じです。

注釈
--

1. ↑ GenSdk.exe は .NET アプリケーションで、32-bit モードを強制する設定になっていないため 64-bit システムでは 64-bit モードで起動されるのですが、レジストリ情報が 32-bit 側にしか設定されていないためエラーを吐きます。そのために、32-bit モードを強制する設定にした GenSDK32.exe から GenSdk.exe 内の Main メソッドを呼び出すことで 32-bit モードで実行されるようにしています。この仕様の通り、GenSDK32.exe は GenSdk.exe の代替ではなく GenSdk.exe がないと実行できません。また、クラス名とファイル名を一致させる必要があるので GenSdk.exe を改名することもできません。よって、このような手順になっています。

参考
--

* CE 6.0 用のアプリケーションを開発する
* Installing Windows CE 6.0 tools on a Windows7 64bit PC