Windows CE アプリ コンテナーの概要

Windows CE アプリ コンテナーは、ほとんどの CE アプリケーションを Windows 10 IoT Core の上で実行できるようにするテクノロジです。

ソリューションは 2 つのステージで構築されます。 最初のステージでは、x86 または ARM32 アーキテクチャ用の BSP を使用して Windows CE 2013 イメージが作成されます。 次に、2 番目のステージでは、このイメージが、ソリューションがインストールされる特定のデバイス ハードウェア用の x64 または ARM32 BSP を使用する Windows 10 IoT Core イメージに含められます。

CE App Container Architecture

このアーキテクチャの詳細については、Windows CE デバイスの最新化に関する動画をご覧ください。

前提条件

Windows CE アプリ コンテナー ソフトウェアには、Windows Compact 2013 (ビルド番号 6294 2020 年 6 月以降)のアップデート版と、Windows 10 IoT Core Packages for x64 または ARM32 (2020 年 8 月更新以降)のアップデート版が必要です。 Windows 10 IoT Core 用の最新パッケージを入手するには、Microsoft ディストリビューターにお問い合わせください。

Note

CE アプリ コンテナー テクノロジが採用されているデバイスを配布するには、IoT Core Services の有効なサブスクリプションが必要です。

さらに、次も必要です。

Windows CE アプリ コンテナーの CE の構成、ビルド、およびパッケージ化

Windows Embedded Compact 2013 イメージを作成するプロセスに、大きな更新はありません。 イメージをビルドするための一般的なプロセスは次のとおりです。

  1. プラットフォーム ビルダーを使用して OS デザイン プロジェクトを作成する
  2. Platform Builder のボード サポート パッケージ (BSP) を選択する
  3. 適切な設計テンプレートを選択する
  4. 設計テンプレートで提供されているオプションを構成する
  5. 必要に応じて、設計プロジェクトにサブプロジェクトを追加する
  6. イメージをビルドする

主な変更点は、正しい BSP の選択と CE イメージに関する追加の考慮事項です。 このガイドでは、ユーザーが Windows CE システム イメージをビルドするプロセスについて既に理解していることを想定していますが、変更されたセクションを詳しく確認することをお勧めします。

手順 2 は、CE アプリ コンテナー使用時に変更される、以前の OS デザイン プロジェクト プロセスの唯一の部分です。詳細は以下を参照してください。

手順 2 - Platform Builder BSP の選択

Windows CE アプリ コンテナーをサポートするために、x86 と ARM アーキテクチャを対象とする新しい BSP がプラットフォーム ビルダーに追加されました。

CE アプリ コンテナー用の OS デザインを作成する場合は、IoT Core ベース デバイスの基になるハードウェアに応じて、「Windows CE アプリ コンテナー: x86」または「Windows CE アプリ コンテナー: ARMv7」 (ARM32) のいずれかを選択します。

たとえば、ターゲットの IoT Core デバイスで Intel ハードウェアが使用されている場合は、「Windows CE アプリ コンテナー: x86」オプションを選択します。 または、IoT Core ハードウェアで NXP i.MX6 が使用されている場合は、“Windows CE アプリ コンテナー: ARMv7” オプションを選択します。

Select the CE App Container BSP

これを行った後は、Windows Embedded Compact イメージに対して行うのと同様に、オプションとサブプロジェクトを構成できます。 これらの構成は、Windows 10 IoT Core イメージにデプロイする CE コンテナーに組み込まれます。

Windows 10 IoT Core イメージのビルド

Note

このプロセスについては、Windows 10 IoT Core 製造ガイドの一部であるラボで詳しく説明しています。 以下のセクションでは、IoT Core イメージのビルド プロセスでの特定のステージで実行する追加のアクションのみを提供します。 次に進む前に、Windows 10 IoT Core 製造ガイドの内容を確認しておくことを強く推奨します。

プロセスの概要

Windows Embedded Compact イメージをビルドするプロセスとは異なり、Windows 10 IoT Core ではファームウェア、ボード サポート パッケージ、イメージ定義、アプリケーション インクルードの作成は切り離されていますが、統合されています。 これらの部分に異なるテクノロジを使用することで、組織内の異なるチームまたは個人間で行う必要がある作業を分離できます。

イメージを作成する基本的な手順は次のとおりです。

  1. ワークスペースを作成する

  2. 適切な IoT Core ボード サポート パッケージ (BSP) をインポートする

  3. 前に作成した CE アプリ コンテナーをインポートする

  4. 製品定義を作成する

  5. 機能とアプリケーションを製品に追加する

  6. Full Flash Update (FFU) をビルドする

  7. FFU をデバイスにデプロイしてテストする

  8. リテール FFU を最終処理して署名する

これらの手順には、Windows 10 IoT Core 製造ガイドの一部として、それぞれ詳細なガイドがあります。 これらの手順の一部は、Platform Builder (PB) を使用してデバイス イメージを作成するプロセスに似ていますが、一部の領域についてさらに深く探索する価値があります。

手順 1 - ワークスペースを作成する

ワークスペースを作成する方法については、IoT Core 製造ガイドの基本イメージの作成に関するドキュメントを参照してください。

手順 2 - 適切な IoT Core ボード サポート パッケージ (BSP) をインポートする

お使いのボードのサポートについては、IoT Core 製造ガイドの基本イメージの作成に関するドキュメントを参照してください。

手順 3 - Windows CE アプリ コンテナーをインポートする

Windows CE アプリ コンテナーは、前述のように PB を使用して作成され、Import-IoTCEPAL コマンドを使用して IoT Core のワークスペースにインポートされます。 このコマンドにより、CE フラット リリース ディレクトリから IoT ADK ワークスペースに必要な内容がコピーされます。 複数回呼び出された場合、前の状態はワークスペースの Source-\$Arch\CEPAL.OLD ディレクトリにバックアップされます。

手順 4 - 製品定義を作成する

製品定義を作成するには、IoT Core 製造ガイドの基本イメージの作成に関するドキュメントを参照してください。

手順 5 - CE アプリ コンテナーを製品に追加する

CE アプリ コンテナー定義をワークスペースにインポートしたら、Add-IoTCEPAL コマンドを必ず実行する必要があります。これにより、CE アプリ コンテナー パッケージへの参照が、関連する製品の OEMInput.xml ファイル (Test と Retail) に追加されます。

次の手順では、Add-IoTProductFeature コマンドを使用して、IOT_CEPAL 機能を OEMInput.xml に追加します。 これにより、Windows CE アプリ コンテナー用の Windows ホスト サポート (Windows CE フロントエンド UWP アプリとサポート ドライバー) が製品定義に追加され、CE アプリ コンテナーが既定のアプリ グループに含まれます。 起動構成については、後のセクションで説明します。

手順 6 - CAB ファイルをビルドする

これは、FFU の作成中の重要な手順であり、構成を変更したり、アプリケーションやドライバーを追加または変更したりするたびに実行する必要があります。 New-IoTCabPackage を "All" オプションを指定して使用します。 必要に応じて単一の機能をビルドすることもできますが、一般に、ベスト プラクティスとして、FFU をビルドする手順の前に、すべてのパッケージをリビルドする必要があります。

手順 7 - FFU をデバイスにデプロイする

イメージがビルドされたら、デバイスにデプロイできます。 これは、DISM を使ってコマンド ラインから行うか、デバイス固有のデプロイ プロセスを使用するか、Windows 10 IoT Core ダッシュボードを使用して行うことができます。 詳細情報は、Windows 10 IoT Core 製造ガイドの一部として利用できます。

既存の FFU を使用するときに Windows CE アプリ コンテナーをデバイスにデプロイする

CE CAB は、IoT Core 上にデプロイ可能なパッケージです。 既存の IoT Core イメージがある場合は、APPLYUPDATE コマンドを使用してこれらの CAB をデバイスにデプロイできます。 最初に CAB をデバイスにコピーし、次に APPLYUPDATE を使用して CAB をステージングしてコミットします。 この方法で更新する場合、パッケージのバージョン管理が考慮されます。そのため、更新されたバージョンのパッケージをデバイスにデプロイする場合は、より大きなバージョン番号が必要になります。 (IoT ADK 環境の Set-IoTCabVersion コマンドを参照してください)。 これに関する詳細については、パッケージの作成とインストールに関するページを参照してください。

手順 8 - リテール イメージをビルドする

適切に署名されたイメージを持つことは、デバイスのセキュリティ保護と更新の重要な部分です。 Windows 10 IoT Core の場合、これはテスト署名付きとリテール署名付きビルドの違いとして現れます。 テスト署名付きイメージは、パブリックにデプロイするべきではありません。 テスト署名付きイメージはデバッグ目的にのみ使用し、最終的なリテール署名付きイメージを作成する前に、エラーや構成変更をすべて修正する必要があります。

Note

コンピューターにインストールされている開発とデプロイ ツールに加えて、リテール サイニングを有効にするには次も必要です。

  • リテール コードサイニング証明書
  • クロスサイニング証明書

アプリケーションに適切に署名して組み込む

Wiindows 10 IoT Core のリテール イメージに組み込む 1 つ以上のカスタム アプリケーションがある場合は、リテール イメージに組み込むときにこれらのアプリケーションが適切に署名されていることを確認する必要があります。

追加情報

新しいアプリケーションを既存のイメージに追加する

既存の OS Design に新しいアプリケーションを追加するには、プロジェクトをサブプロジェクトとして OS Design プロジェクトに追加するか、通常のデプロイ CAB パッケージを作成し、それらを初期デバイス セットアップの一部としてデバイスにデプロイできます。

パッケージ化のベスト プラクティス

更新時間を短縮するために、常に、パッケージができるだけ細分性されるようにする必要があります。

パッケージは更新の最小単位なので、各パッケージができるだけ小さくなるようにしてください。 Platform Builder でビルドする場合、生成されたパッケージは、bib ファイルに従い、メモリ セクションとモジュールまたはファイルの種類に従って自動的に分離されます。

  • Platform Builder でビルドされ、OSDesign.bib を使用してパッケージ化されたカスタム資産の場合、カスタム コードへの更新を CE OS への更新とは別に出荷できるように、カスタム資産を BIB 内 (NK 内ではない) の別のメモリ セクションに追加することを検討してください。

  • IoT ADK パッケージ化コマンドを使用して追加されたカスタム資産の場合は、作成されたパッケージができるだけ小さくなるようにします。

Platform Builder パッケージに他のものを追加する

一般に、追加のコンポーネントをシステム イメージに含めるために Platform Builder によって生成された結果のパッケージを変更しないことが推奨されます。 代わりに、Windows 10 IoT Core 製造ガイドに従ってください。 ただし、Platform Builder によって作成されたパッケージにファイルを追加する必要がある場合は、既存のプロセスに従ってください。 PB によって生成されたパッケージにコンテンツを追加する場合は、次の点を考慮してください。

  • パッケージには最大サイズ (約 400 MB) があります。このサイズを超えると、更新が妨げられます。

  • 更新はパッケージの粒度で行われます。 パッケージ内の 1 つの資産を更新する必要がある場合、そのパッケージのすべての資産が同時に更新されます。 更新プログラムのサイズを小さくするには、コンテンツを別々のパッケージに分離して、更新プログラムの全体的なサイズを最小化します。

Platform Builder を使用してファイルを追加する

上記で説明したパッケージ化プロセスは、CE BIN ファイルを作成する場合と同じ入力によって行われます。 そのため、OSDesign.bib でファイルを参照し、OSDesign.reg でレジストリ エントリを追加した場合、MAKEIMG プロセスでは、これらのファイルが結果として得られる CAB ファイルに含まれます。 この処理中、MAKEIMG は次のようになります。

  1. ROMIMAGE は、Flat Release Directory (FRD) 内に、Windows CE for CEPAL のインストール済みディレクトリ構造をステージ化する CEPAL\_PKG というディレクトリを作成します。
  2. ROMIMAGE は、CE の BIB ファイルに基づいて CEPAL\_PKG に配置されたすべての CE ファイルのインベントリを作成します。
  3. ROMIMAGE は、メモリ セクションごとに複数の WM.XML ファイルを作成します。 これは、更新プログラムの最小単位がパッケージであるため、更新プログラムをより細分化した方法でプッシュできるようにするために行われます。
  4. ROMIMAGE は、作成されたすべてのパッケージを参照するものを作成します。

作成されるすべてのパッケージには、“%OEM\_NAME%.WindowsCE.\*” という固定のプレフィックスが付けられます。ここで、%OEM\_NAME% は、IoT Core の作成プロセス中に New-IoTCabPackage を呼び出すときに設定されます。 名前空間内のパッケージ名は、BIB ファイル (例: NK) のメモリ セクションから派生し、その後に modules/files (これも、BIB ファイルによって決まる) が続きます。

Windows Embedded Compact 2013 と Windows 10 IoT Core アプリケーション間で通信を行う

CE コンテナーで実行されているアプリケーション間で通信を行う場合は、ローカル ループバックを使用することをお勧めします。 詳細については、ローカル ループバックに関する記事を参照してください。

CE アプリ コンテナー アプリケーションを自動的に開始する

CE コンテナー アプリケーションを自動的に起動するには、起動アプリケーションを "Microsoft.Windows.IoT.CEPAL.DkMonUWP_cw5n1h2txyewy!App" に設定するプロビジョニング パッケージを作成し、このプロビジョニング パッケージをイメージに含めることができます。 また、既定のスタートアップ アプリケーションを削除する必要もあります。Remove-IoTProductFeature コマンドを使用して、IoT Core 製品の定義から IOT_BERTHA Feature ID を削除します。

Windows CE アプリ コンテナーの使用可能な構成設定

CE でのレジストリ ベースの構成

既定で実行不可能なスタック

セキュリティを強化するために、Windows CE アプリ コンテナーでは実行可能スタック ページが既定で無効になっています。 ただし、一部のレガシ アプリケーションは、正しく実行するためにこの動作に依存している場合があります。 実行可能スタックを有効にするには、CE イメージに次のレジストリ値を設定します (これは、Platform Builder で OSDesign.reg に指定することをお勧めします)。

KeyPath = HKEY\_LOCAL\_MACHINE\CEPAL
ValueName = MemoryOptions Type = REG\_DWORD
Value = 1
GWES の 16 ビット 565 オーバーライド

Windows CE アプリ コンテナーが 32 ビットのディスプレイで構成されている場合、16 ビットの RGB ピクセル データが RGB555 形式であると想定して、GWES によって 16 ビットから 32 ビットへの RGB 変換が行われます。 ビットマップ リソースが 16 ビット 565 であり、これらのリソースの RGB555 への変換ができない場合は、レジストリ キーを使用して GWES の既定の変換動作を変更できます。 次のレジストリ キーを作成します。

HKEY\_LOCAL\_MACHINE\SYSTEM\GDI\16bpp565RGBPalette.

ホスト (IoT Core) でのレジストリ ベースの構成

Windows CE アプリ コンテナー用のシリアル ポートを構成する

ホストのシリアル ポートを CE 環境にマップする必要があります。 このマッピングは、IoT Core のレジストリに存在しており、イメージの作成者が構成する必要があります。

HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial に、次のスキーマを使用してゲストの COM ポートをホストの COM ポートにマッピングする構成エントリが存在します。

KeyPath = HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial\0

ValueName = Guest Type = REG\_SZ Value = COM1

ValueName = Host

Type = REG\_SZ

Value = \\?\Some\DeviceInterface\Path

KeyPath= HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial\1

ValueName = Guest Type = REG\_SZ Value = COM2

ValueName= Host Type = REG\_SZ

Value = \\?\Some\Other\DeviceInterface\Path

CE の起動時に上記のレジストリ パスが存在しない場合は、システム上で検出されたシリアル デバイスに基づいて既定の構成が書き込まれます。

ホストでのファイル ベースの構成

CE コンテナーは、ホスト C:\WindowsCE\CEEnvConfig.json 上のローカル ファイルを使用して構成できます。 この構成ファイルのサンプルを次に示します。

{
 "OEMOptions" :
    {
     "GUI" : true,
     "Width" : 1024,
     "Height" : 768, "FillScreen" : true, "ColorDepth" : 32,
     "RefreshRate" : 30, "noAslrSupport" : true, "OemConfigApp" : "",
     "OemConfigFile" : ""
    },
 "CEPALDevOptions" :
    {
     "VsDebugMode" : true, "FastDebugBoot" : false
    }
 }

OEMOptions

Key 説明
GUI UI で CE アプリ コンテナーを起動します (既定値は true)
CE アプリ コンテナーのディスプレイの幅 (既定値は 1024)
Height CE アプリ コンテナーのディスプレイの高さ (既定値は 768)
FillScreen
ColorDepth ピクセルあたりの既定のビット数を設定します (既定値は 32)
RefreshRate 1 秒間にディスプレイが再描画される回数
noAslrSupport CE アプリ コンテナーでのアドレス空間レイアウトのランダム化を無効にします (既定値は true)
OEMConfigApp 構成のために起動する必要がある OEM 提供アプリのパッケージ ファミリ名。
OEMConfigFile OEMConfigApp と CE アプリ コンテナー間で共有されている追加の構成オプションが含まれたファイルへのパス

CE アプリ コンテナーでは、使用できるネットワーク インターフェイスは 1 つだけになります。 ホスト システムに複数の NIC が存在する場合は、選択した NIC が常に確定的になるように、ホスト レジストリで 1 つのインターフェイスを選択する必要があります。

OEMConfigFile

OEMConfigFile は、C:\WindowsCE\CEEnvConfig.json に指定されています。 このファイルを UWP アプリケーションで読み取れることを確認します。 サンプルを次に示します。

{
   “FactoryReset”: false, “PlatformBuilderDebugMode”: false,
   “NetInterface”: “Some Network Profile Id”
}

"オプション:

Key 説明
FactoryReset 永続的な状態をダンプするように CE アプリ コンテナーにシグナルを送信するために、構成アプリによって使用されます。
PlatformBuilderDebugMode Platform Builder を使用したデバッグのために KITL サポート付きで CE アプリ コンテナーを起動するために使用されます。
NetInterface プロファイル名に基づいて CE のネットワーク インターフェイスを選択します。

References