消費者入門與 Windows CE 應用程式容器

Windows CE 應用程式容器是一種技術,可讓大部分的 CE 應用程式在Windows 10 IoT 核心版上執行。

解決方案是建置在兩個階段中。 第一個階段會使用適用于 x86 或 ARM32 架構的 BSP 建立 Windows CE 2013 映射。 然後在第二個階段中,此映射會包含在Windows 10 IoT 核心版映射中,該映射會針對將安裝解決方案的特定裝置硬體使用 x64 或 ARM32 BSP。

CE 應用程式容器架構

如需此架構的詳細資訊,請檢閱這段影片:將Windows CE裝置現代化

必要條件

Windows CE 應用程式容器軟體需要更新版本的 Windows Compact 2013 (組建編號 6294,從 2020 年 6 月或更新版本) ,以及x64 和 ARM32 更新版本的 Windows 10 IoT 核心版更新版本,以及 x64 和 ARM32 (2020 年 8 月更新或更新版本) 。 若要取得Windows 10 IoT 核心版的最新套件,請連絡您的 Microsoft 散發者。

注意

您必須擁有有效的 IoT 核心服務 訂用帳戶,才能散發採用 CE 應用程式容器技術的裝置。

此外,您將需要下列專案:

為Windows CE 應用程式容器設定、建置和封裝 CE

建立 Windows Embedded Compact 2013 映射的程式尚未大幅更新。 建置映射的一般程式如下:

  1. 使用 Platform Builder 建立 OS 設計專案
  2. 選取 [平臺建立器面板支援套件] (BSP)
  3. 選擇適當的設計範本
  4. 設定設計範本所提供的選項
  5. 選擇性地將子專案新增至設計專案
  6. 建立映像

主要變更是在選取正確的 BSP 和 CE 映射的其他考慮中。 本指南假設您已熟悉建置Windows CE系統映射的程式,但值得更深入地查看已變更的區段。

步驟 2 是使用 CE 應用程式容器時變更之先前 OS 設計專案程式的唯一部分,請參閱下方以取得其他詳細資料。

步驟 2 - 平臺產生器 BSP 選取

為了支援Windows CE 應用程式容器,已將以 x86 和 ARM 架構為目標的新 BSP 新增至 Platform Builder。

建立 CE 應用程式容器的 OS 設計時,請根據 IoT Core 裝置的基礎硬體,選取 「Windows CE 應用程式容器: x86」 或 「Windows CE 應用程式容器:ARMv7」 (ARM32) 。

例如,如果您的目標 IoT 核心版裝置使用 Intel 硬體,您將選取 [Windows CE 應用程式容器: x86] 選項。 或者,如果您的 IoT 核心硬體使用 NXP i.MX6,您將選取 [Windows CE 應用程式容器:ARMv7] 選項。

選取 CE 應用程式容器 BSP

執行此動作之後,您將能夠設定選項和子專案,就像您平常針對 Windows Embedded Compact 映射所做的一樣。 這些組態會內建于您將部署至Windows 10 IoT 核心版映射的 CE 容器中。

建置Windows 10 IoT 核心版映射

注意

此程式在屬於Windows 10 IoT 核心版製造指南的實驗室中詳細說明。 下一節只會提供在 IoT 核心映射建置程式的特定階段執行的其他動作。 強烈建議先熟悉Windows 10 IoT 核心版製造指南,再繼續進行。

程序概觀

不同于建置 Windows Embedded Compact 映射的程式,Windows 10 IoT 核心版分離,但整合了韌體、面板支援套件、映射定義和應用程式包含的建立。 藉由針對這些片段使用不同的技術,您可以分隔組織中不同小組或個人之間需要執行的工作。

建立映射的基本步驟如下:

  1. 建立工作區

  2. 匯入適當的 IoT 核心板支援套件 (BSP)

  3. 匯入您先前建立的 CE 應用程式容器

  4. 建立您的產品定義

  5. 將功能和應用程式新增至您的產品

  6. 建置您的完整 Flash Update (FFU)

  7. 將 FFU 部署至裝置並測試

  8. 完成並簽署零售 FFU

每個步驟都有詳細的指南,做為Windows 10 IoT 核心版製造指南的一部分。 雖然其中一些步驟就像是使用 Platform Builder (PB) 來建立裝置映射的程式,但值得更深入探索某些區域。

步驟 1 - 建立工作區

請參閱 IoT 核心製造指南中的建立 基本映射檔,以瞭解如何建立工作區。

步驟 2 - 匯入適當的 IoT 核心板支援套件 (BSP)

請參閱 IoT 核心製造指南中的檔建立 基本映射,以取得面板的支援。

步驟 3 - 匯入Windows CE 應用程式容器

Windows CE 應用程式容器是使用上述的 PB 建立,並使用Import-IoTCEPAL命令匯入您的 IoT 核心工作區。 此命令會將必要的內容從 CE 一般發行目錄複寫到 IoT ADK 工作區。 如果多次叫用,則會在工作區的目錄下 Source-\$Arch\CEPAL.OLD 備份先前的狀態。

步驟 4 - 建立您的產品定義

請檢閱 IoT 核心製造指南中的建立 基本映射檔,以建立您的產品定義。

步驟 5 - 將 CE 應用程式容器新增至產品

將 CE 應用程式容器定義匯入工作區之後,您必須確定您執行 Add-IoTCEPAL 命令,這會將 CE 應用程式容器套件的參考新增至相關的產品OEMInput.xml檔案 (Test and Retail) 。

下一個步驟是使用 Add-IoTProductFeature 命令,將IOT_CEPAL功能新增至OEMInput.xml。 這會將Windows CE 應用程式容器 (Windows CE前端 UWP app + 支援驅動程式的 Windows 主機支援新增至我們的產品定義) ,並在預設應用程式群組中包含 CE 應用程式容器。 我們將在稍後的一節中討論啟動組態。

步驟 6 - 建置 CAB 檔案

這是建立 FFU 期間的重要步驟,您應該在變更設定、新增/變更應用程式或驅動程式時完成。 您將使用 New-IoTCabPackage 搭配 [全部] 選項。 您也可以視需要建置單一功能,但一般而言,您應該在建置 FFU 作為最佳做法的步驟之前重建所有套件。

步驟 7 - 將 FFU 部署至裝置

建置映射之後,您可以將它部署至裝置。 這可以從命令列使用DISM、透過裝置特定的部署程式或使用Windows 10 IoT 核心版儀表板來完成。 如需更多詳細資料,請參閱Windows 10 IoT 核心版製造指南

使用現有的 FFU 時,將Windows CE 應用程式容器部署到裝置

CE CAB 是 IoT 核心版上的可部署套件。 如果有現有的 IoT 核心映射,可以使用 命令將這些 CAB 部署到裝置 APPLYUPDATE 。 先將 CAB 複製到裝置,然後使用 暫存並認可 CAB APPLYUPDATE 。 請注意,以這種方式更新會遵守套件版本設定,因此,如果要將更新的套件版本部署至裝置,則必須有更大的版本號碼。 (請參閱 IoT ADK 環境中的 Set-IoTCabVersion 命令) 。 如需詳細資訊,請參閱 建立和安裝套件

步驟 8 - 建置零售映射

擁有正確簽署的映射是保護及更新裝置的重要部分。 針對Windows 10 IoT 核心版,這會顯示為測試簽署與零售簽署組建之間的差異。 您絕對不應該公開部署測試簽署的映射。 測試簽署的映射應該僅用於偵錯目的,您應該在建立最終零售簽署映射之前更正任何錯誤或設定變更。

注意

除了安裝在您電腦上的開發和部署工具之外,您也需要下列專案才能啟用零售簽署:

  • 零售程式碼簽署憑證
  • 交叉簽署憑證

正確簽署並包含您的應用程式

如果您有一或多個想要包含在Windows 10 IoT 核心版零售映射中的自訂應用程式,您必須在零售映射中包含這些應用程式時,確認這些應用程式是否已正確簽署。

其他資訊

將新的應用程式新增至現有的映射

若要將新的應用程式新增至現有的 OS 設計,您可以將專案新增為 OS 設計專案的子專案,也可以建立一般部署 CAB 套件,以將這些套件部署至裝置作為初始裝置設定的一部分。

封裝最佳做法

您應該一律將目標設為確保盡可能細微的套件,以減少更新時間。

由於套件是更新的最小單位,因此請確定每個套件盡可能小。 在 Platform Builder 中建置時,產生的套件會根據記憶體區段和根據 bib 檔案自動區分模組/檔案類型。

  • 針對內建在 Platform Builder 中並透過 OSDesign.bib 封裝的自訂資產,請考慮將自訂資產新增至 BIB (不在 NK) 的個別記憶體區段中,讓自訂程式碼的更新可以與 CE OS 的更新分開傳送。

  • 針對透過 IoT ADK 封裝命令新增的自訂資產:請確定建立的套件盡可能小。

將其他專案新增至 Platform Builder 套件

一般而言,建議不要修改 Platform Builder 所產生的封裝,以將其他元件納入系統映射中。 請改為遵循Windows 10 IoT 核心版製造指南。 不過,如果檔案必須新增至 Platform Builder 所建立的套件,請遵循您現有的程式。 將內容新增至 PB 所產生的套件時,請考慮下列事項:

  • 套件的大小上限 (大約 400 MB) ,超過此大小將會防止更新。

  • 更新在套件細微性上發生。 如果需要更新套件中的單一資產,則會同時更新該套件的所有資產。 若要減少更新的大小,請將內容隔離成個別的套件,以將整體更新大小降到最低。

透過 Platform Builder 新增其他檔案

上述詳述的封裝程式是由建置 CE BIN 檔案的相同輸入所驅動。 因此,如果在 OSDesign.bib 中參考檔案,並將登錄專案新增至 OSDesign.reg,則 MAKEIMG 程式會將這些檔案包含在產生的 CAB 檔案中。 在此程式中 MAKEIMG ,現在將會:

  1. ROMIMAGE將會在一般發行目錄 (FRD) 中建立名為 CEPAL\_PKG 的目錄,以階段Windows CE CEPAL 的已安裝目錄結構。
  2. ROMIMAGE 會清查根據 CE BIB 檔案放入 CEPAL\_PKG 的所有 CE 檔案。
  3. ROMIMAGE 會為每個記憶體區段建立多個WM.XML檔案。 這麼做可讓更新以更細微的方式推送,因為更新的最小單位是套件。
  4. ROMIMAGE 將會建立參考所有已建立套件的 。

所有建立的套件都會以 的固定前置詞 “%OEM\_NAME%.WindowsCE.\*” 命名,其中 %OEM\_NAME% 會在呼叫 New-IoTCabPackage時填入 IoT 核心版建立程式期間。 名稱空間內的套件名稱衍生自 BIB 檔案中的記憶體區段 (例如 NK) ,後面接著模組/檔案, (也會由 BIB 檔案) 決定。

在 Windows Embedded Compact 2013 與 Windows 10 IoT 核心版 應用程式之間進行通訊

在 CE 容器中執行的應用程式之間通訊的建議方法是使用本機回送。 您可以在 本檔中深入瞭解本機回送。

自動啟動 CE 應用程式容器應用程式

若要自動啟動 CE 容器應用程式,您可以建立布 建套件 ,將啟動應用程式設定為 「Microsoft.Windows.IoT.CEPAL.DkMonUWP_cw5n1h2txyewy!應用程式」,並在映射中包含此布建套件。 您也需要使用 Remove-IoTProductFeature 命令移除預設啟動應用程式,並從 IoT 核心產品定義中移除IOT_BERTHA功能識別碼。

Windows CE 應用程式容器可用的組態設定

CE 中的登錄型組態

預設為非可執行堆疊

Windows CE 應用程式容器預設已停用可執行堆疊頁面,以改善安全性。 不過,某些繼承應用程式可能會依賴此行為來正確執行。 若要啟用可執行檔堆疊,請在 CE 映射中設定下列登錄值, (建議您在 Platform Builder 中將下列登錄值移至 OSDesign.reg)

KeyPath = HKEY\_LOCAL\_MACHINE\CEPAL
ValueName = MemoryOptions Type = REG\_DWORD
Value = 1
16 位 565 覆寫 GWES

如果Windows CE 應用程式容器設定為 32 位顯示器,則 GWES 會完成 16 位到 32 位 RGB 轉換,假設 16 位 RGB 圖元資料採用 RGB555 格式。 如果點陣圖資源在 16 位 565 中,而且無法轉換成這些資源的 RGB555,GWES 的預設轉換行為可以透過登錄機碼進行變更。 建立下列登錄機碼:

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

主機 (IoT 核心版中的登錄型組態)

設定Windows CE 應用程式容器的序列埠

主機序列埠必須對應至 CE 環境。 此對應存在於 IoT 核心版的登錄中,而且必須由映射建立者設定。

在 底下 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)
高度 CE 應用程式容器的高度顯示 (預設為 768)
FillScreen
ColorDepth 設定每個圖元的預設位 (預設 32)
RefreshRate 每秒重繪顯示次數
noAslrSupport 停用 CE 應用程式容器中的位址空間配置隨機化, (預設為 true)
OEMConfigApp 應針對組態啟動之 OEM 提供的 OEM 應用程式套件系列名稱。
OEMConfigFile 檔案的路徑,其中包含 OEMConfigApp 與 CE 應用程式容器之間共用的其他組態選項

CE 應用程式容器只會讓一個網路介面可供使用。 如果主機系統中有多個 NIC,則必須在主機登錄中選取一個介面,以確保選取的 NIC 具決定性。

OEMConfigFile

OEMConfigFile 是在 中 C:\WindowsCE\CEEnvConfig.json 指定。 請確定 UWP 應用程式可以讀取此檔案。 以下是範例︰

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

選項:

Key 描述
FactoryReset 由設定應用程式用來向 CE 應用程式容器發出信號,以傾印持續性狀態。
PlatformBuilderDebugMode 用來啟動具有 KITL 支援的 CE 應用程式容器,以使用 Platform Builder 進行偵錯。
NetInterface 根據設定檔名稱選取 CE 的網路介面。

參考資料