Erste Schritte mit Windows CE-App-Container

Die Windows CE-App-Container ist eine Technologie, mit der die meisten CE-Anwendungen auf Windows 10 IoT Core ausgeführt werden können.

Die Lösung ist in zwei Phasen aufgebaut. In der ersten Phase wird ein Windows CE 2013-Image mit einem BSP für die x86- oder ARM32-Architektur erstellt. In der zweiten Phase ist dieses Image dann in einem Windows 10 IoT Core-Image enthalten, das den x64- oder ARM32-BSP für die spezifische Gerätehardware verwendet, auf der die Lösung installiert wird.

CE-App-Containerarchitektur

Weitere Informationen zu dieser Architektur finden Sie in diesem Video: Modernizing Windows CE Devices.

Voraussetzungen

Die Windows CE-App-Container Software erfordert eine aktualisierte Version von Windows Compact 2013 (Buildnummer 6294 ab Juni 2020) sowie aktualisierte Windows 10 IoT Core-Pakete für x64 und ARM32 (August 2020 Update oder höher). Wenden Sie sich an Ihren Microsoft-Distributor, um die neuesten Pakete für Windows 10 IoT Core zu erhalten.

Hinweis

Sie benötigen ein gültiges IoT Core Services-Abonnement , um ein Gerät zu verteilen, das die CE App Container-Technologie verwendet.

Darüber hinaus benötigen Sie Folgendes:

Konfigurieren, Erstellen und Verpacken von CE für die Windows CE-App-Container

Der Prozess zum Erstellen eines Windows Embedded Compact 2013-Images wurde nicht wesentlich aktualisiert. Der allgemeine Prozess zum Erstellen eines Images ist:

  1. Erstellen eines Betriebssystementwurfsprojekts mit Platform Builder
  2. Wählen Sie das Platform Builder Board Support Package (BSP) aus.
  3. Auswählen der entsprechenden Entwurfsvorlage
  4. Konfigurieren der von der Entwurfsvorlage bereitgestellten Optionen
  5. Optionales Hinzufügen von Unterprojekten zum Entwurfsprojekt
  6. Erstellen des Image

Die primäre Änderung besteht in der Auswahl des richtigen BSP und zusätzlichen Überlegungen für das CE-Image. In diesem Leitfaden wird davon ausgegangen, dass Sie bereits mit dem Prozess zum Erstellen eines Windows CE Systemimages vertraut sind, aber es lohnt sich, sich den geänderten Abschnitt genauer anzusehen.

Schritt 2 ist der einzige Teil des vorherigen Projektprozesses des Betriebssystementwurfs, der bei Verwendung des CE-App-Containers geändert wurde. Weitere Details finden Sie weiter unten.

Schritt 2: Plattform-Generator-BSP-Auswahl

Um die Windows CE-App-Container zu unterstützen, wurde Platform Builder ein neuer BSP hinzugefügt, der auf x86- und ARM-Architekturen abzielt.

Wählen Sie beim Erstellen eines Betriebssystementwurfs für den CE-App-Container je nach zugrunde liegender Hardware für Ihr IoT Core-basiertes Gerät entweder "Windows CE-App-Container: x86" oder "Windows CE-App-Container: ARMv7" (ARM32) aus.

Wenn Ihr IoT Core-Zielgerät beispielsweise Intel-Hardware verwendet, wählen Sie die Option "Windows CE-App-Container: x86" aus. Wenn Ihre IoT Core-Hardware NXP i.MX6 verwendet, wählen Sie alternativ die Option "Windows CE-App-Container: ARMv7" aus.

Auswählen des CE-App-Container-BSP

Danach haben Sie die Möglichkeit, die Optionen und Unterprojekte so zu konfigurieren, wie sie es normalerweise für ein Windows Embedded Compact-Image tun würden. Diese Konfigurationen werden in den CE-Container integriert, den Sie in Ihrem Windows 10 IoT Core-Image bereitstellen.

Erstellen des Windows 10 IoT Core-Images

Hinweis

Dieser Prozess wird in den Labs, die Teil des Windows 10 IoT Core Manufacturing Guide sind, ausführlicher behandelt. Der folgende Abschnitt enthält nur zusätzliche Aktionen, die in bestimmten Phasen des IoT Core-Imageerstellungsprozesses ausgeführt werden sollen. Es wird dringend empfohlen, sich mit dem Windows 10 IoT Core Manufacturing Guide vertraut zu machen, bevor Sie fortfahren.

Übersicht über den Prozess

Im Gegensatz zum Erstellen eines Windows Embedded Compact-Images entkoppelt Windows 10 IoT Core jedoch die Erstellung von Firmware, Boardunterstützungspaketen, Imagedefinition und Anwendungseinschluss. Durch die Verwendung verschiedener Technologien für diese Teile können Sie die Arbeit, die Sie ausführen müssen, auf verschiedene Teams oder Einzelpersonen in Ihrer Organisation aufteilen.

Die grundlegenden Schritte beim Erstellen eines Images sind:

  1. Erstellen eines Arbeitsbereichs

  2. Importieren des entsprechenden IoT Core Board Support Package (BSP)

  3. Importieren des CE-App-Containers, den Sie zuvor erstellt haben

  4. Erstellen Ihrer Produktdefinition

  5. Hinzufügen von Features und Anwendungen zu Ihrem Produkt

  6. Erstellen Eines vollständigen Flash-Updates (FFU)

  7. Bereitstellen der FFU auf dem Gerät und Testen

  8. Abschließen und Signieren Ihrer Einzelhandels-FFU

Es gibt ausführliche Anleitungen für jeden dieser Schritte im Windows 10 IoT Core Fertigungsleitfaden. Während einige dieser Schritte wie der Prozess der Verwendung von Platform Builder (PB) zum Erstellen eines Geräteimages sind, lohnt es sich, einige Bereiche genauer zu untersuchen.

Schritt 1: Erstellen eines Arbeitsbereichs

Informationen zum Erstellen eines Arbeitsbereichs finden Sie in der Dokumentation Erstellen eines einfachen Images im IoT Core Manufacturing Guide.

Schritt 2: Importieren des entsprechenden IoT Core Board Support Package (BSP)

Lesen Sie die Dokumentation Erstellen eines einfachen Images im IoT Core Manufacturing Guide( IoT Core Manufacturing Guide), um Unterstützung für Ihr Board zu erhalten.

Schritt 3: Importieren des Windows CE-App-Container

Die Windows CE-App-Container wird wie oben beschrieben mithilfe von PB erstellt und mithilfe des Befehls Import-IoTCEPAL in Ihren IoT Core-Arbeitsbereich importiert. Mit diesem Befehl werden die erforderlichen Inhalte aus dem CE-Flat Release-Verzeichnis in den IoT ADK-Arbeitsbereich kopiert. Bei mehrfachem Aufruf wird der vorherige Zustand unter dem Source-\$Arch\CEPAL.OLD Verzeichnis im Arbeitsbereich gesichert.

Schritt 4: Erstellen Ihrer Produktdefinition

Lesen Sie die Dokumentation Erstellen eines einfachen Images im IoT Core Manufacturing Guide, um Ihre Produktdefinition zu erstellen.

Schritt 5: Hinzufügen von CE App Container zu einem Produkt

Nachdem Sie Ihre CE App Container-Definition in Ihren Arbeitsbereich importiert haben, müssen Sie sicherstellen, dass Sie den Befehl Add-IoTCEPAL ausführen, mit dem den relevanten OEMInput.xml Produktdateien (Test und Einzelhandel) ein Verweis auf CE App Container-Pakete hinzugefügt wird.

Der nächste Schritt besteht darin, den Befehl Add-IoTProductFeature zu verwenden, um dem OEMInput.xml das Feature IOT_CEPAL hinzuzufügen. Dadurch wird die Windows Host-Unterstützung für die Windows CE-App-Container (Windows CE Front-End-UWP-App + Supporttreiber) unserer Produktdefinition hinzugefügt und schließt den CE-App-Container in die Standardgruppe Apps ein. In einem späteren Abschnitt wird die Startkonfiguration erläutert.

Schritt 6: Erstellen Ihrer CAB-Dateien

Dies ist ein wichtiger Schritt während der Erstellung Ihrer FFU und sollte immer dann ausgeführt werden, wenn Sie eine Konfiguration ändern, eine Anwendung oder Treiber hinzufügen/ändern. Sie verwenden das New-IoTCabPackage mit der Option "Alle". Sie können auch einzelne Features nach Bedarf erstellen, aber im Allgemeinen sollten Sie alle Pakete vor dem Schritt des Erstellens Ihrer FFU als bewährte Methode neu erstellen.

Schritt 7: Bereitstellen Ihrer FFU auf Ihrem Gerät

Nachdem das Image erstellt wurde, können Sie es auf einem Gerät bereitstellen. Dies kann über die Befehlszeile mithilfe von DISM, über Ihren gerätespezifischen Bereitstellungsprozess oder über die Windows 10 IoT Core-Dashboard erfolgen. Weitere Informationen finden Sie im Windows 10 IoT Core Manufacturing Guide.

Bereitstellen der Windows CE-App-Container auf einem Gerät bei Verwendung einer vorhandenen FFU

Die CE-CABs sind bereitstellungsfähige Pakete in IoT Core. Wenn ein IoT Core-Image vorhanden ist, können diese CABs mithilfe des Befehls auf dem APPLYUPDATE Gerät bereitgestellt werden. Kopieren Sie zuerst die CABs auf das Gerät, dann inszenieren und committen sie mit APPLYUPDATE. Beachten Sie, dass das Aktualisieren auf diese Weise die Paketversionsverwaltung berücksichtigt. Wenn also aktualisierte Versionen von Paketen auf dem Gerät bereitgestellt werden sollen, müssen sie eine höhere Versionsnummer aufweisen. (Siehe Set-IoTCabVersion Befehl in der IoT ADK-Umgebung). Weitere Informationen hierzu finden Sie unter Erstellen und Installieren von Paketen.

Schritt 8: Erstellen eines Einzelhandelsimages

Ein ordnungsgemäß signiertes Image ist ein wichtiger Bestandteil des Schützens und Aktualisierens eines Geräts. Für Windows 10 IoT Core wird dies als Unterschied zwischen signierten Test- und Retail-Signierten Builds angezeigt. Sie sollten niemals ein testsigniertes Image öffentlich bereitstellen. Testsignierte Images sollten nur zu Debugzwecken verwendet werden, und Sie sollten alle Fehler oder Konfigurationsänderungen korrigieren, bevor Sie Ihr endgültiges signiertes Einzelhandelsabbild erstellen.

Hinweis

Zusätzlich zu den auf Ihrem Computer installierten Entwicklungs- und Bereitstellungstools benötigen Sie auch Folgendes, um die Einzelhandelssignatur zu aktivieren:

  • Ein Retail-Codesignaturzertifikat
  • Ein Cross-Signaturzertifikat

Ordnungsgemäßes Signieren und Einbinden Ihrer Anwendungen

Wenn Sie über eine oder mehrere benutzerdefinierte Anwendungen verfügen, die Sie in Ihr Windows 10 IoT Core Einzelhandelsimage einschließen möchten, müssen Sie überprüfen, ob diese Anwendungen ordnungsgemäß signiert sind, wenn sie in Ihr Einzelhandelsimage aufgenommen werden.

Zusätzliche Informationen

Hinzufügen neuer Anwendungen zu einem vorhandenen Image

Um einem vorhandenen Betriebssystementwurf eine neue Anwendung hinzuzufügen, können Sie das Projekt entweder als Unterprojekt dem Betriebssystementwurfsprojekt hinzufügen oder normale CAB-Bereitstellungspakete erstellen, um diese im Rahmen der anfänglichen Geräteeinrichtung auf dem Gerät bereitzustellen.

Bewährte Methoden für die Verpackung

Sie sollten immer darauf achten, dass Pakete so präzise wie möglich sind, um die Aktualisierungszeit zu verkürzen.

Da ein Paket die kleinste Aktualisierungseinheit ist, stellen Sie sicher, dass jedes Paket so klein wie möglich ist. Beim Erstellen in Platform Builder werden die generierten Pakete automatisch nach Arbeitsspeicherabschnitt und Modul-/Dateityp gemäß der Bib-Datei getrennt.

  • Für benutzerdefinierte Ressourcen, die in Platform Builder erstellt und über OSDesign.bib gepackt werden, sollten Sie benutzerdefinierte Ressourcen einem separaten Speicherabschnitt im BIB (nicht in NK) hinzufügen, damit Updates für benutzerdefinierten Code getrennt von Updates an das CE-Betriebssystem geliefert werden können.

  • Für benutzerdefinierte Ressourcen, die über die IoT ADK-Paketbefehle hinzugefügt werden: Stellen Sie sicher, dass die erstellten Pakete so klein wie möglich sind.

Hinzufügen anderer Elemente zum Platform Builder-Paket

Im Allgemeinen wird empfohlen, das resultierende Paket, das von Platform Builder erstellt wird, nicht so zu ändern, dass es zusätzliche Komponenten in das Systemimage einschließt. Befolgen Sie stattdessen den Windows 10 IoT Core Fertigungsleitfaden. Wenn dem Paket, das von Platform Builder erstellt wird, jedoch Dateien hinzugefügt werden müssen, folgen Sie Ihrem vorhandenen Prozess. Beachten Sie beim Hinzufügen von Inhalten zu dem von PB generierten Paket Folgendes:

  • Es gibt eine maximale Größe für Pakete (ca. 400 MB), und eine Überschreitung dieser Größe verhindert das Aktualisieren.

  • Aktualisierungen bei der Paketgranularität auftreten. Wenn ein einzelnes Asset im Paket aktualisiert werden muss, werden alle Ressourcen dieses Pakets gleichzeitig aktualisiert. Um die Größe von Updates zu reduzieren, isolieren Sie Inhalte in separate Pakete, um die Gesamtgröße der Updates zu minimieren.

Hinzufügen zusätzlicher Dateien über Platform Builder

Der oben beschriebene Verpackungsprozess wird durch die gleichen Eingaben gesteuert, die beim Erstellen einer CE BIN-Datei verwendet werden. Wenn also in OSDesign.bib auf die Dateien verwiesen wird und Registrierungseinträge zu OSDesign.reg hinzugefügt werden, schließt der MAKEIMG Prozess diese Dateien in die resultierende CAB-Datei ein. Während dieses Vorgangs MAKEIMG wird nun Folgendes ausgeführt:

  1. ROMIMAGEerstellt ein Verzeichnis namens CEPAL\_PKG innerhalb des Flat Release Directory (FRD), das eine installierte Verzeichnisstruktur für Windows CE für CEPAL inszeniert.
  2. ROMIMAGE inventariert alle CE-Dateien, in die basierend auf CE BIB-Dateien abgelegt CEPAL\_PKG wurden.
  3. ROMIMAGE erstellt mehrere WM.XML Dateien für jeden Speicherabschnitt. Dies geschieht, damit Updates präziser gepusht werden können, da die mindeste Aktualisierungseinheit ein Paket ist.
  4. ROMIMAGE erstellt, das auf alle erstellten Pakete verweist.

Alle erstellten Pakete werden mit einem festen Präfix benannt, wobei %OEM\_NAME% beim Aufrufen von “%OEM\_NAME%.WindowsCE.\*”New-IoTCabPackage während des IoT Core-Erstellungsprozesses aufgefüllt wird. Der Paketname innerhalb des Namensraums wird aus dem Speicherabschnitt in der BIB-Datei (z. B. NK) gefolgt von Modulen/Dateien (auch durch die BIB-Datei bestimmt) abgeleitet.

Kommunikation zwischen Windows Embedded Compact 2013 und Windows 10 IoT Core Anwendungen

Der empfohlene Ansatz für die Kommunikation zwischen Anwendungen, die im CE-Container ausgeführt werden, ist die Verwendung des lokalen Loopbacks. Weitere Informationen finden Sie unter Local Loopback in diesem Dokument.

Automatisches Starten der CE App Container-Anwendung

Um die CE Container-Anwendung automatisch zu starten, können Sie ein Bereitstellungspaket erstellen, mit dem die Startanwendung auf "Microsoft.Windows.IoT.CEPAL.DkMonUWP_cw5n1h2txyewy! App" und dieses Bereitstellungspaket in das Image eingeschlossen. Sie müssen auch die Standardstartanwendung entfernen, indem Sie den Befehl Remove-IoTProductFeature verwenden und die IOT_BERTHA Feature-ID aus der IoT Core-Produktdefinition entfernen.

Verfügbare Konfigurationseinstellungen für die Windows CE-App-Container

Registrierungsbasierte Konfiguration in CE

Nicht ausführbarer Stapel standardmäßig

Die Windows CE-App-Container hat ausführbare Stapelseiten standardmäßig deaktiviert, um die Sicherheit zu verbessern. Einige Legacyanwendungen können jedoch darauf angewiesen sein, dass dieses Verhalten ordnungsgemäß ausgeführt wird. Um einen ausführbaren Stapel zu aktivieren, legen Sie den folgenden Registrierungswert im CE-Image fest (Es wird empfohlen, dass dies in OSDesign.reg in Platform Builder angezeigt wird).

KeyPath = HKEY\_LOCAL\_MACHINE\CEPAL
ValueName = MemoryOptions Type = REG\_DWORD
Value = 1
16-Bit-565-Überschreibung für GWES

Wenn die Windows CE-App-Container mit einer 32-Bit-Anzeige konfiguriert ist, werden 16-Bit- zu 32-Bit-RGB-Konvertierungen von GWES durchgeführt, wobei davon ausgegangen wird, dass 16-Bit-RGB-Pixeldaten im RGB555-Format vorliegen. Wenn Sich Bitmapressourcen in 16-Bit 565 befinden und eine Konvertierung dieser Ressourcen in einen RGB555-Wert nicht möglich ist, kann das Standardkonvertierungsverhalten von GWES über einen Registrierungsschlüssel geändert werden. Erstellen Sie den folgenden Registrierungsschlüssel:

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

Registrierungsbasierte Konfiguration im Host (IoT Core)

Konfigurieren serieller Ports für die Windows CE-App-Container

Serielle Hostports müssen der CE-Umgebung zugeordnet werden. Diese Zuordnung ist in der Registrierung in IoT Core vorhanden und muss vom Ersteller des Images konfiguriert werden.

Unter HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serialsind Konfigurationseinträge vorhanden, um Gast-COM-Ports mit dem folgenden Schema Host-COM-Ports zuzuordnen.

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

Wenn der oben genannte Registrierungspfad beim Starten von CE nicht vorhanden ist, wird eine Standardkonfiguration basierend auf ermittelten seriellen Geräten im System geschrieben.

Dateibasierte Konfiguration im Host

Der CE-Container kann mithilfe einer lokalen Datei auf dem Host C:\WindowsCE\CEEnvConfig.jsonkonfiguriert werden. Hier sehen Sie ein Beispiel für diese Konfigurationsdatei:

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

OEMOptions

Key BESCHREIBUNG
GUI Starten Sie den CE-App-Container mit der Benutzeroberfläche (Standard true)
Breite Breite der CE-App-Containeranzeige (Standard 1024)
Höhe Höhe der CE-App-Containeranzeige (Standard 768)
FillScreen
ColorDepth Legt Standardbits pro Pixel fest (Standard 32)
RefreshRate Wie oft die Anzeige pro Sekunde neu gezeichnet wird
noAslrSupport Deaktiviert die Randomisierung des Adressraumlayouts im CE-App-Container (standard true)
OEMConfigApp Paketfamilienname einer vom OEM bereitgestellten App, die für die Konfiguration gestartet werden soll.
OEMConfigFile Pfad zu einer Datei, die zusätzliche Konfigurationsoptionen enthält, die von der OEMConfigApp und dem CE-App-Container gemeinsam genutzt werden

Der CE-App-Container stellt nur eine Netzwerkschnittstelle zur Verwendung zur Verfügung. Wenn mehrere Netzwerkkarten im Hostsystem vorhanden sind, muss eine Schnittstelle in der Hostregistrierung ausgewählt werden, um sicherzustellen, dass die ausgewählte NIC deterministisch ist.

OEMConfigFile

Die OEMConfigFile-Datei wird in C:\WindowsCE\CEEnvConfig.jsonangegeben. Stellen Sie sicher, dass diese Datei von einer UWP-Anwendung gelesen werden kann. Beispiel:

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

Optionen:

Key BESCHREIBUNG
FactoryReset Wird von der Konfigurations-App verwendet, um dem CE-App-Container zu signalisieren, dass er den persistenten Zustand abspeichert.
PlatformBuilderDebugMode Wird verwendet, um den CE App Container mit KITL-Unterstützung für das Debuggen mit Platform Builder zu starten.
NetInterface Wählen Sie eine Netzwerkschnittstelle für CE basierend auf dem Profilnamen aus.

Referenzen