Introduzione a Contenitore di app per Windows CE
Il Contenitore di app per Windows CE è una tecnologia che consente la maggior parte delle applicazioni CE da eseguire su Windows 10 IoT Core.
La soluzione è compilata in due fasi. La prima fase crea un'immagine di Windows CE 2013 usando un BSP per l'architettura x86 o ARM32. Quindi, nella seconda fase, questa immagine è inclusa in un'immagine Windows 10 IoT Core che usa il BSP x64 o ARM32 per l'hardware del dispositivo specifico in cui verrà installata la soluzione.
Per altre informazioni su questa architettura, vedere questo video: Modernizzazione dei dispositivi Windows CE.
Prerequisiti
Il software Contenitore di app per Windows CE richiede una versione aggiornata di Windows Compact 2013 (numero di build 6294 a partire da giugno 2020 o versione successiva) insieme ai pacchetti Windows 10 IoT Core per x64 e ARM32 (aggiornamento di agosto 2020 o versione successiva) . Per ottenere i pacchetti più recenti per Windows 10 IoT Core, contattare il distributore Microsoft.
Nota
È necessario disporre di una sottoscrizione valida di IoT Core Services per distribuire un dispositivo che usa la tecnologia contenitore di app CE.
Inoltre, sono necessari gli elementi seguenti:
Microsoft Visual Studio 2013 Professional o Visual Studio 2015 Professional. Queste versioni sono necessarie sia per gli strumenti di Application Builder che per Platform Builder.
Generatore di applicazioni per Windows Embedded Compact 2013
Platform Builder per Windows Compact 2013
Un provider di servizi BSP IoT Core funzionante
Gli strumenti a cui si fa riferimento nella Guida alla produzione di Windows IoT
Ricordarsi di installare i componenti aggiornati al posto di quelli a cui si fa riferimento in questa guida (componenti aggiuntivi WINDOWS 10 ADK e Windows 10 ADK PE, componenti aggiuntivi ADK IoT Core, Dashboard Windows 10 IoT Core)
Configurazione, compilazione e creazione di pacchetti ce per il Contenitore di app per Windows CE
Il processo di creazione di un'immagine di Windows Embedded Compact 2013 non è stato aggiornato in modo significativo. Il processo generale per la creazione di un'immagine è:
Creare un progetto di progettazione del sistema operativo con Platform Builder
Selezionare il pacchetto BSP (Platform Builder Board Support Package)
Scegliere il modello di progettazione appropriato
Configurare le opzioni fornite dal modello di progettazione
Facoltativamente, aggiungere progetti secondari al progetto di progettazione
Compilare l'immagine
La modifica principale riguarda la selezione del BSP corretto e considerazioni aggiuntive per l'immagine CE. Questa guida presuppone che tu abbia già familiarità con il processo di compilazione di un'immagine di sistema Windows CE, ma vale la pena esaminare in modo più approfondito la sezione modificata.
Il passaggio 2 è l'unica parte del processo di progetto di progettazione del sistema operativo precedente che viene modificato quando si usa il contenitore di app CE, vedere di seguito per altri dettagli.
Passaggio 2 - Selezione BSP di Platform Builder
Per supportare la Contenitore di app per Windows CE, è stato aggiunto un nuovo provider di servizi BSP destinato alle architetture x86 e ARM a Platform Builder.
Quando si crea una progettazione del sistema operativo per il contenitore di app CE, selezionare "Contenitore di app per Windows CE: x86" o "Contenitore di app per Windows CE: ARMv7" (ARM32) a seconda dell'hardware sottostante per il dispositivo basato su IoT Core.
Ad esempio, se il dispositivo IoT Core di destinazione usa hardware Intel, si selezionerà l'opzione "Contenitore di app per Windows CE: x86". In alternativa, se l'hardware IoT Core usa NXP i.MX6, si selezionerà l'opzione "Contenitore di app per Windows CE: ARMv7".
Dopo aver eseguito questa operazione, sarà possibile configurare le opzioni e i sottoproi progetti esattamente come si farebbe normalmente per un'immagine di Windows Embedded Compact. Queste configurazioni verranno integrate nel contenitore CE che verrà distribuito nell'immagine Windows 10 IoT Core.
Compilazione dell'immagine Windows 10 IoT Core
Nota
Questo processo è descritto in modo più dettagliato nei lab che fanno parte della Guida alla produzione di Windows 10 IoT Core. La sezione seguente fornisce solo azioni aggiuntive da eseguire in determinate fasi del processo di compilazione delle immagini IoT Core. Prima di procedere, è consigliabile acquisire familiarità con la Guida alla produzione di Windows 10 IoT Core.
Panoramica processo
A differenza del processo di creazione di un'immagine di Windows Embedded Compact, Windows 10 IoT Core separa ancora la creazione del firmware, i pacchetti di supporto della scheda, la definizione dell'immagine e l'inclusione dell'applicazione. Usando tecnologie diverse per questi componenti, è possibile separare il lavoro che è necessario eseguire tra team diversi o singoli utenti dell'organizzazione.
I passaggi di base per la creazione di un'immagine sono i seguenti:
Importare il pacchetto di supporto della scheda IoT Core (BSP) appropriato
Importare il contenitore di app CE creato in precedenza
Sono disponibili guide dettagliate per ognuno di questi passaggi come parte della Guida alla produzione di Windows 10 IoT Core. Anche se alcuni di questi passaggi sono come il processo di utilizzo di Platform Builder (PB) per creare un'immagine del dispositivo, vale la pena esplorare alcune aree in modo più approfondito.
Passaggio 1- Creare un'area di lavoro
Vedere la documentazione Creare un'immagine di base, nella Guida alla produzione di IoT Core per informazioni su come creare un'area di lavoro.
Passaggio 2: Importare il pacchetto di supporto della scheda IoT Core (BSP) appropriato
Esaminare la documentazione Creare un'immagine di base nella Guida alla produzione di IoT Core per il supporto della scheda.
Passaggio 3: Importazione del Contenitore di app per Windows CE
Il Contenitore di app per Windows CE viene creato usando PB come descritto in precedenza e importato nell'area di lavoro di IoT Core usando il comando Import-IoTCEPAL. Questo comando copia il contenuto necessario dalla directory versione flat ce nell'area di lavoro IoT ADK. Se richiamato più volte, viene eseguito il backup dello Source-\$Arch\CEPAL.OLD
stato precedente nella directory nell'area di lavoro.
Passaggio 4: Creare la definizione del prodotto
Esaminare la documentazione Creare un'immagine di base, nella Guida alla produzione di IoT Core per creare la definizione del prodotto.
Passaggio 5: Aggiunta di un contenitore di app CE a un prodotto
Dopo aver importato la definizione del contenitore di app CE nell'area di lavoro, è necessario assicurarsi di eseguire il comando Add-IoTCEPAL , che aggiungerà un riferimento ai pacchetti del contenitore di app CE ai file di OEMInput.xml di prodotto pertinenti (Test e vendita).
Il passaggio successivo consiste nell'usare il comando Add-IoTProductFeature per aggiungere la funzionalità IOT_CEPAL al OEMInput.xml. In questo modo viene aggiunto il supporto dell'host Windows per la Contenitore di app per Windows CE (app UWP front-end windows CE e driver di supporto) alla definizione del prodotto e include il contenitore di app CE nel gruppo App predefinito. In una sezione successiva verrà descritta la configurazione di avvio.
Passaggio 6: Compilare i file CAB
Questo è un passaggio importante durante la creazione del FFU e deve essere eseguito ogni volta che si modifica una configurazione, aggiungere/modificare un'applicazione o driver. Verrà usata l'opzione New-IoTCabPackage con l'opzione "Tutti". È anche possibile creare funzionalità singole in base alle esigenze, ma in generale è necessario ricompilare tutti i pacchetti prima del passaggio di compilazione del FFU come procedura consigliata.
Passaggio 7: Distribuzione del FFU nel dispositivo
Dopo aver compilato l'immagine, è possibile distribuirla in un dispositivo. Questa operazione può essere eseguita dalla riga di comando usando gestione e manutenzione e manutenzione distribuzione tramite il processo di distribuzione specifico del dispositivo o usando il Dashboard Windows 10 IoT Core. Altri dettagli sono disponibili come parte della Guida alla produzione di Windows 10 IoT Core.
Distribuzione del Contenitore di app per Windows CE in un dispositivo quando si usa un FFU esistente
Le CAB ce sono pacchetti distribuibili in IoT Core. Se è presente un'immagine IoT Core esistente, queste CAB possono essere distribuite nel dispositivo usando il APPLYUPDATE
comando . Copiare prima le CAB nel dispositivo, quindi eseguire il commit e il commit delle CAB con APPLYUPDATE
. Si noti che l'aggiornamento in questo modo rispetta il controllo delle versioni dei pacchetti, quindi se le versioni aggiornate dei pacchetti devono essere distribuite nel dispositivo, devono avere un numero di versione maggiore. Vedere il comando Set-IoTCabVersion nell'ambiente ADK IoT. Altre informazioni su questo argomento sono disponibili in Creare e installare pacchetti
Passaggio 8 - Creazione di un'immagine di vendita al dettaglio
Avere un'immagine firmata correttamente è una parte importante della protezione e dell'aggiornamento di un dispositivo. Per Windows 10 IoT Core, questa differenza viene visualizzata come differenza tra le build firmate dai test e dalle build firmate al dettaglio. Non distribuire mai pubblicamente un'immagine firmata dal test. Le immagini firmate dai test devono essere usate solo a scopo di debug ed è necessario correggere eventuali errori o modifiche alla configurazione prima di creare l'immagine finale firmata al dettaglio.
Nota
Oltre agli strumenti di sviluppo e distribuzione installati nel computer, è necessario quanto segue per abilitare la firma della vendita al dettaglio:
- Un certificato di firma del codice per la vendita al dettaglio
- Un certificato di firma incrociata
Firma corretta e inclusione delle applicazioni
Se hai una o più applicazioni personalizzate che vuoi includere nell'immagine di vendita al dettaglio di Windows 10 IoT Core, devi verificare che queste applicazioni siano firmate correttamente durante l'inclusione nell'immagine di vendita al dettaglio.
Informazioni aggiuntive
Aggiunta di nuove applicazioni a un'immagine esistente
Per aggiungere una nuova applicazione a una progettazione del sistema operativo esistente, è possibile aggiungere il progetto come sottoprogetto al progetto di progettazione del sistema operativo oppure creare normali pacchetti CAB di distribuzione per distribuirli nel dispositivo come parte della configurazione iniziale del dispositivo.
Procedure consigliate per la creazione di pacchetti
È sempre consigliabile assicurarsi che i pacchetti siano il più granulare possibile per ridurre il tempo di aggiornamento.
Poiché un pacchetto è la più piccola unità di aggiornamento, assicurarsi che ogni pacchetto sia il più piccolo possibile. Quando si compila in Platform Builder, i pacchetti generati vengono separati in base alla sezione di memoria e al tipo di modulo/file in base al file bib automaticamente.
Per gli asset personalizzati compilati in Platform Builder e inseriti in un pacchetto tramite OSDesign.bib, prendere in considerazione l'aggiunta di asset personalizzati in una sezione di memoria separata in BIB (non in NK), in modo che gli aggiornamenti al codice personalizzato possano essere forniti separatamente dagli aggiornamenti al sistema operativo CE.
Per gli asset personalizzati aggiunti tramite i comandi di creazione pacchetti di IoT ADK: assicurarsi che i pacchetti creati siano il più piccolo possibile.
Aggiunta di altri elementi al pacchetto Platform Builder
In generale, è consigliabile non modificare il pacchetto risultante prodotto da Platform Builder per includere componenti aggiuntivi nell'immagine di sistema. Seguire invece la guida alla produzione di Windows 10 IoT Core. Tuttavia, se i file devono essere aggiunti al pacchetto creato da Platform Builder, seguire il processo esistente. Quando si aggiunge contenuto al pacchetto generato da PB, considerare quanto segue:
È prevista una dimensione massima per i pacchetti (circa 400 MB) e il superamento di questa dimensione impedirà l'aggiornamento.
Aggiornamenti verifica la granularità del pacchetto. Se è necessario aggiornare un singolo asset nel pacchetto, tutti gli asset del pacchetto verranno aggiornati contemporaneamente. Per ridurre le dimensioni degli aggiornamenti, isolare il contenuto in pacchetti separati per ridurre al minimo le dimensioni complessive degli aggiornamenti.
Aggiunta di file aggiuntivi tramite Platform Builder
Il processo di creazione dei pacchetti descritto in precedenza è basato sugli stessi input che vengono inseriti nella compilazione di un file CE BIN. Pertanto, se ai file viene fatto riferimento in OSDesign.bib e le voci del Registro di sistema vengono aggiunte a OSDesign.reg, il MAKEIMG
processo includerà questi file nel file CAB risultante. Durante questo processo MAKEIMG
verranno ora eseguite le operazioni seguenti:
ROMIMAGE
creerà una directory denominataCEPAL\_PKG
all'interno della directory FRD (Flat Release Directory) che esegue l'installazione di una struttura di directory installata per Windows CE per CEPAL.ROMIMAGE
inventaria tutti i file CE inseriti inCEPAL\_PKG
in base ai file CE BIB.ROMIMAGE
creerà più file WM.XML per ogni sezione della memoria. Questa operazione viene eseguita in modo che gli aggiornamenti possano essere inseriti in modo più granulare perché l'unità minima di aggiornamento è un pacchetto.ROMIMAGE
creerà che fa riferimento a tutti i pacchetti creati.
Tutti i pacchetti creati verranno denominati con un prefisso fisso di “%OEM\_NAME%.WindowsCE.\*”
, dove %OEM\_NAME%
viene popolato durante il processo di creazione di IoT Core quando si chiama New-IoTCabPackage. Il nome del pacchetto all'interno dello spazio dei nomi deriva dalla sezione memoria nel file BIB (ad esempio NK) seguito da modules/files (anche determinato dal file BIB).
Comunicazione tra applicazioni Windows Embedded Compact 2013 e Windows 10 IoT Core
L'approccio consigliato per comunicare tra le applicazioni in esecuzione nel contenitore CE consiste nell'usare il loopback locale. Per altre informazioni, vedere Local Loopback in questo documento.
Avvio automatico dell'applicazione contenitore di app ce
Per avviare automaticamente l'applicazione contenitore CE, è possibile creare un pacchetto di provisioning che imposta l'applicazione di avvio su "Microsoft.Windows.IoT.CEPAL.DkMonUWP_cw5n1h2txyewy! App" e incluso questo pacchetto di provisioning nell'immagine. Sarà anche necessario rimuovere l'applicazione di avvio predefinita usando il comando Remove-IoTProductFeature e rimuovendo l'ID funzionalità IOT_BERTHA dalla definizione del prodotto IoT Core.
Impostazioni di configurazione disponibili per il Contenitore di app per Windows CE
Configurazione basata sul Registro di sistema in CE
Stack non eseguibile per impostazione predefinita
L'Contenitore di app per Windows CE ha disabilitato le pagine dello stack eseguibile per impostazione predefinita per migliorare la sicurezza. Tuttavia, alcune applicazioni legacy possono basarsi su questo comportamento per l'esecuzione corretta. Per abilitare uno stack eseguibile, impostare il valore del Registro di sistema seguente nell'immagine CE (è consigliabile che venga inserito in OSDesign.reg in Platform Builder)
KeyPath = HKEY\_LOCAL\_MACHINE\CEPAL
ValueName = MemoryOptions Type = REG\_DWORD
Value = 1
Override a 16 bit 565 per GWES
Se la Contenitore di app per Windows CE è configurata con uno schermo a 32 bit, le conversioni RGB a 16 bit a 32 bit vengono eseguite da GWES presupponendo che i dati dei pixel RGB a 16 bit siano in formato RGB555. Se le risorse bitmap sono a 16 bit 565 e la conversione in rgb555 di queste risorse non è possibile, il comportamento di conversione predefinito di GWES può essere modificato tramite una chiave del Registro di sistema. Creare la chiave del Registro di sistema seguente:
HKEY\_LOCAL\_MACHINE\SYSTEM\GDI\16bpp565RGBPalette.
Configurazione basata sul Registro di sistema nell'host (IoT Core)
Configurazione delle porte seriali per il Contenitore di app per Windows CE
Le porte seriali host devono essere mappate nell'ambiente CE. Questo mapping esiste nel Registro di sistema in IoT Core e deve essere configurato dall'autore dell'immagine.
In HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial
le voci di configurazione esistono per eseguire il mapping delle porte COM guest alle porte COM host usando lo schema seguente.
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
Se il percorso del Registro di sistema precedente non esiste all'avvio di CE, verrà scritta una configurazione predefinita basata sui dispositivi seriali individuati nel sistema.
Configurazione basata su file nell'host
Il contenitore CE può essere configurato usando un file locale nell'host C:\WindowsCE\CEEnvConfig.json
. Ecco un esempio di questo file di configurazione:
{
"OEMOptions" :
{
"GUI" : true,
"Width" : 1024,
"Height" : 768, "FillScreen" : true, "ColorDepth" : 32,
"RefreshRate" : 30, "noAslrSupport" : true, "OemConfigApp" : "",
"OemConfigFile" : ""
},
"CEPALDevOptions" :
{
"VsDebugMode" : true, "FastDebugBoot" : false
}
}
OEMOptions
Chiave | Descrizione |
---|---|
GUI | Avviare il contenitore dell'app CE con l'interfaccia utente (impostazione predefinita true) |
Larghezza | Larghezza della visualizzazione del contenitore dell'app CE (impostazione predefinita 1024) |
Altezza | Altezza della visualizzazione del contenitore dell'app CE (impostazione predefinita 768) |
FillScreen | |
ColorDepth | Imposta i bit predefiniti per pixel (impostazione predefinita 32) |
RefreshRate | Quante volte lo schermo viene ridisegnato al secondo |
noAslrSupport | Disabilita la casualizzazione casuale del layout dello spazio degli indirizzi nel contenitore dell'app CE (valore predefinito true) |
OEMConfigApp | Nome della famiglia di pacchetti di un'app fornita dall'OEM che deve essere avviata per la configurazione. |
OEMConfigFile | Percorso di un file che contiene opzioni di configurazione aggiuntive condivise tra OEMConfigApp e il contenitore dell'app CE |
Il contenitore dell'app CE rende disponibile solo un'interfaccia di rete per l'uso. Se nel sistema host sono presenti più schede di interfaccia di rete, è necessario selezionare un'interfaccia nel Registro host per assicurarsi che la scheda di interfaccia di rete selezionata sia deterministica.
OEMConfigFile
OEMConfigFile viene specificato in C:\WindowsCE\CEEnvConfig.json
. Assicurarsi che questo file possa essere letto da un'applicazione UWP. Di seguito è riportato un esempio:
{
“FactoryReset”: false, “PlatformBuilderDebugMode”: false,
“NetInterface”: “Some Network Profile Id”
}
Opzioni:
Chiave | Descrizione |
---|---|
FactoryReset | Usato dall'app di configurazione per segnalare al contenitore dell'app CE di eseguire il dump dello stato persistente. |
PlatformBuilderDebugMode | Usato per avviare il contenitore di app CE con il supporto KITL per il debug con Platform Builder. |
NetInterface | Selezionare un'interfaccia di rete per ce in base al nome del profilo. |