開始使用 Windows CE 應用程式容器
Windows CE 應用程式容器 是一種技術,可讓大多數 CE 應用程式在 Windows 10 IoT 核心版 上執行。
解決方案是以兩個階段建置。 第一個階段會使用適用於 x86 或 ARM32 架構的 BSP 來建立 Windows CE 2013 映像。 然後在第二個階段中,此映射會包含在使用 x64 或 ARM32 BSP 安裝解決方案之特定裝置硬體的 Windows 10 IoT 核心版 映射中。
如需此架構的詳細資訊,請檢閱此影片: 現代化 Windows CE 裝置。
必要條件
Windows CE 應用程式容器 軟體需要更新版本的 Windows Compact 2013(2020 年 6 月或更新版本起的組建編號 6294),以及 x64 和 ARM32 的更新 Windows 10 IoT 核心版 套件(2020 年 8 月更新或更新版本)。 若要取得 Windows 10 IoT 核心版 的最新套件,請連絡您的 Microsoft 散發者。
注意
您必須擁有有效的 IoT核心服務 訂用帳戶,才能散發採用CE應用程式容器技術的裝置。
此外,您將需要下列專案:
Microsoft Visual Studio 2013 Professional 或 Visual Studio 2015 Professional。 Application Builder 和 Platform Builder 工具都需要這些版本。
適用於 Windows Compact 2013 的平臺建立器
運作中的IoT核心 BSP
Windows IoT 製造指南中 參考的工具
請記得安裝更新的元件,以取代本指南中所參考的元件(Windows 10 ADK 和 Windows 10 ADK PE 附加元件、IoT 核心版 ADK 附加元件、Windows 10 IoT 核心版 儀錶板)
設定、建置和封裝 Windows CE 應用程式容器的 CE
建立 Windows Embedded Compact 2013 映像的程式尚未大幅更新。 建置映像的一般程式如下:
使用 Platform Builder 建立 OS 設計專案
選取平台產生器面板支援套件 (BSP)
選擇適當的設計範本
設定設計範本所提供的選項
選擇性地將子專案新增至設計專案
建置映像
主要變更是在選取正確的 BSP 和 CE 映像的其他考慮中。 本指南假設您已熟悉建置 Windows CE 系統映像的程式,但值得更深入地查看已變更的區段。
步驟 2 是先前使用 CE 應用程式容器時變更之 OS 設計專案程式的唯一部分,請參閱下方以取得其他詳細數據。
步驟 2 - 平台產生器 BSP 選取專案
為了支援 Windows CE 應用程式容器,已將以 x86 和 ARM 架構為目標的新 BSP 新增至 Platform Builder。
建立 CE 應用程式容器的 OS 設計時,請根據 IoT 核心版裝置的基礎硬體,選取 「Windows CE 應用程式容器: x86」 或 「Windows CE 應用程式容器: ARMv7」 (ARM32)。
例如,如果您的目標 IoT 核心版裝置使用 Intel 硬體,您將選取 [Windows CE 應用程式容器: x86] 選項。 或者,如果您的IoT核心版硬體使用ARM i.MX6,您將選取 [Windows CE 應用程式容器:ARMv7] 選項。
執行此動作之後,您將能夠設定選項和子專案,就像您通常針對 Windows Embedded Compact 映像所做的一樣。 這些組態會內建於您將部署到 Windows 10 IoT 核心版 映射的 CE 容器中。
建置 Windows 10 IoT 核心版 映射
注意
此程式會在屬於 Windows 10 IoT 核心版 製造指南的實驗室中詳細說明。 下一節只會提供其他動作,以在IoT核心版映像建置程式的特定階段執行。 強烈建議先熟悉 Windows 10 IoT 核心版 製造指南,再繼續進行。
程序概觀
不同於建置 Windows Embedded Compact 映射的程式,Windows 10 IoT 核心版 分離,但整合了韌體、面板支援套件、映像定義和應用程式包含的建立。 藉由針對這些部分使用不同的技術,您可以分隔組織中不同小組或個人之間需要執行的工作。
建立映像的基本步驟如下:
匯入您先前建立的 CE 應用程式容器
在 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 主機支援(Windows CE 前端 UWP app + 支援驅動程式)新增至我們的產品定義,並在預設應用程式群組中包含 CE 應用程式容器。 我們將在稍後的一節中討論啟動設定。
步驟 6 - 建置 CAB 檔案
這是建立 FFU 期間的重要步驟,應該在變更設定、新增/變更應用程式或驅動程式時完成。 您將使用 New-IoTCabPackage 搭配 “All” 選項。 您也可以視需要建置單一功能,但一般而言,您應該在建置 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設計,您可以將專案新增為操作系統設計專案的子專案,也可以建立一般部署 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
期間,現在將會:
ROMIMAGE
將會在一般發行目錄 (FRD) 內建立名為CEPAL\_PKG
的目錄,以分階段安裝適用於 CEPAL 的 Windows CE 目錄結構。ROMIMAGE
清查所有以CEPAL\_PKG
CE BIB 檔案為基礎的 CE 檔案。ROMIMAGE
會為每個記憶體區段建立多個WM.XML檔案。 這樣做可讓更新以更細微的方式推送,因為更新的最小單位是套件。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
關鍵 | 描述 |
---|---|
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”
}
選項:
關鍵 | 描述 |
---|---|
FactoryReset | 由設定應用程式用來向 CE 應用程式容器發出信號,以傾印持續性狀態。 |
PlatformBuilderDebugMode | 用來以 KITL 支援啟動 CE 應用程式容器,以使用 Platform Builder 進行偵錯。 |
NetInterface | 根據配置檔名稱選取 CE 的網路介面。 |