Introducción al Contenedor de aplicación de Windows CE
El Contenedor de aplicación de Windows CE es una tecnología que permite que la mayoría de las aplicaciones de CE se ejecuten sobre Windows 10 IoT Core.
La solución está integrada en dos fases. La primera fase crea una imagen de Windows CE 2013 mediante un BSP para la arquitectura x86 o ARM32. A continuación, en la segunda fase, esta imagen se incluye en una imagen de Windows 10 IoT Core que utiliza el BSP x64 o ARM32 para el hardware de dispositivo específico donde se instalará la solución.
Para obtener más información sobre esta arquitectura, revise este vídeo: Modernización de dispositivos Windows CE.
Requisitos previos
El software de Contenedor de aplicación de Windows CE requiere una versión actualizada de Windows Compact 2013 (número de compilación 6294 de junio de 2020 o posterior) junto con paquetes actualizados de Windows 10 IoT Core para x64 y ARM32 (actualización de agosto de 2020 o posterior). Para obtener los paquetes más recientes para Windows 10 IoT Core, póngase en contacto con el distribuidor de Microsoft.
Nota:
Debe tener una suscripción válida de IoT Core Services para distribuir un dispositivo que emplea la tecnología ce App Container.
Además, necesitará lo siguiente:
Microsoft Visual Studio 2013 Professional o Visual Studio 2015 Professional. Estas versiones son necesarias para las herramientas del Generador de aplicaciones y del Generador de plataformas.
Generador de aplicaciones para Windows Embedded Compact 2013
Generador de plataformas para Windows Compact 2013
Un BSP de IoT Core en funcionamiento
Herramientas a las que se hace referencia en la Guía de fabricación de Windows IoT
Recuerde instalar los componentes actualizados en lugar de los que se hace referencia en esta guía (Complementos de ADK de Windows 10 y Windows 10 ADK PE, Complementos de ADK de IoT Core, Panel de Windows 10 IoT Core)
Configuración, creación y empaquetado de CE para el Contenedor de aplicación de Windows CE
El proceso para crear una imagen de Windows Embedded Compact 2013 no se ha actualizado significativamente. El proceso general para crear una imagen es:
Creación de un proyecto de diseño del sistema operativo con Platform Builder
Seleccione el paquete de compatibilidad de la placa del Generador de plataformas (BSP)
Elección de la plantilla de diseño adecuada
Configurar las opciones proporcionadas por la plantilla de diseño
Opcionalmente, agregue subproyectos al proyecto de diseño.
Compilación de la imagen
El cambio principal está en la selección del BSP correcto y consideraciones adicionales para la imagen de CE. En esta guía se da por supuesto que ya está familiarizado con el proceso para crear una imagen del sistema de Windows CE, pero merece la pena examinar más profundamente la sección modificada.
El paso 2 es la única parte del proceso de proyecto de diseño del sistema operativo anterior que se cambia al usar el contenedor de aplicaciones de CE, consulte a continuación para obtener más detalles.
Paso 2: Selección de BSP del Generador de plataformas
Para admitir la Contenedor de aplicación de Windows CE, se ha agregado a Platform Builder un nuevo BSP destinado a arquitecturas x86 y ARM.
Al crear un diseño de sistema operativo para el contenedor de aplicaciones de CE, seleccione la opción "Contenedor de aplicación de Windows CE: x86" o "Contenedor de aplicación de Windows CE: ARMv7" (ARM32) en función del hardware subyacente del dispositivo basado en IoT Core.
Por ejemplo, si el dispositivo IoT Core de destino usa hardware Intel, seleccionará la opción "Contenedor de aplicación de Windows CE: x86". Como alternativa, si el hardware de IoT Core usa NXP i.MX6, seleccionará la opción "Contenedor de aplicación de Windows CE: ARMv7".
Después de hacerlo, tendrá la capacidad de configurar las opciones y subproyectos como lo haría normalmente para una imagen de Windows Embedded Compact. Estas configuraciones se integrarán en el contenedor de CE que implementará en la imagen de Windows 10 IoT Core.
Compilación de la imagen de Windows 10 IoT Core
Nota:
Este proceso se trata con más detalle en los laboratorios que forman parte de la Guía de fabricación de Windows 10 IoT Core. En la sección siguiente solo se proporcionan acciones adicionales para ejecutarse en determinadas fases del proceso de creación de imágenes de IoT Core. Se recomienda familiarizarse con la Guía de fabricación de Windows 10 IoT Core antes de continuar.
Información general del proceso
A diferencia del proceso de creación de una imagen de Windows Embedded Compact, la desacoplación de Windows 10 IoT Core aún integra la creación de firmware, paquetes de compatibilidad de placa, definición de imágenes e inclusión de aplicaciones. Mediante el uso de diferentes tecnologías para estas piezas, puede separar el trabajo que necesita realizar entre diferentes equipos o individuos de su organización.
Los pasos básicos para crear una imagen son:
Importación del paquete de compatibilidad adecuado de la placa de IoT Core (BSP)
Importación del contenedor de aplicaciones de CE que creó anteriormente
Hay guías detalladas para cada uno de estos pasos como parte de la Guía de fabricación principal de Windows 10 IoT. Aunque algunos de estos pasos son como el proceso de usar Platform Builder (PB) para crear una imagen de dispositivo, merece la pena explorar algunas áreas más profundamente.
Paso 1: Creación de un área de trabajo
Revise la documentación Creación de una imagen básica en la Guía de fabricación de IoT Core para obtener información sobre cómo crear un área de trabajo.
Paso 2: Importación del paquete de compatibilidad adecuado de la placa de IoT Core (BSP)
Revise la documentación Creación de una imagen básica en la Guía de fabricación de IoT Core para obtener soporte técnico para la placa.
Paso 3: Importar el Contenedor de aplicación de Windows CE
El Contenedor de aplicación de Windows CE se crea con PB como se ha descrito anteriormente e importado en el área de trabajo de IoT Core mediante el comando Import-IoTCEPAL. Este comando copiará el contenido necesario del directorio de versión plana de CE en el área de trabajo de IoT ADK. Si se invoca varias veces, se realiza una copia de seguridad del estado anterior en el directorio del Source-\$Arch\CEPAL.OLD
área de trabajo.
Paso 4: Creación de la definición del producto
Revise la documentación, Creación de una imagen básica, en la Guía de fabricación de IoT Core para crear la definición del producto.
Paso 5: Adición de un contenedor de aplicaciones de CE a un producto
Una vez que haya importado la definición del contenedor de aplicaciones de CE en el área de trabajo, deberá asegurarse de ejecutar el comando Add-IoTCEPAL , que agregará una referencia a los paquetes de contenedor de aplicaciones de CE al producto correspondiente OEMInput.xml archivos (Prueba y venta al por menor).
El siguiente paso consiste en usar el comando Add-IoTProductFeature para agregar la característica IOT_CEPAL al OEMInput.xml. Esto agrega la compatibilidad de Host de Windows para el Contenedor de aplicación de Windows CE (controladores de soporte técnico y aplicación para UWP de Windows CE) a nuestra definición de producto e incluye el contenedor de aplicaciones de CE en el grupo Aplicaciones predeterminado. Analizaremos la configuración de inicio en una sección posterior.
Paso 6: Compilar los archivos CAB
Este es un paso importante durante la creación de la FFU y debe realizarse siempre que cambie una configuración, agregue o cambie una aplicación o controladores. Usará New-IoTCabPackage con la opción "All". También puede compilar características únicas según sea necesario, pero en general debe volver a generar todos los paquetes antes del paso de compilar la FFU como procedimiento recomendado.
Paso 7: Implementación de la FFU en el dispositivo
Una vez creada la imagen, puede implementarla en un dispositivo. Esto se puede hacer desde la línea de comandos mediante DISM, a través del proceso de implementación específico del dispositivo o mediante el Panel de Windows 10 IoT Core. Hay más detalles disponibles como parte de la Guía de fabricación de Windows 10 IoT Core.
Implementación del Contenedor de aplicación de Windows CE en un dispositivo cuando se usa una FFU existente
Los CAB de CE son paquetes implementables en IoT Core. Si hay una imagen de IoT Core existente, estas CAB se pueden implementar en el dispositivo mediante el APPLYUPDATE
comando . Copie primero los CAB en el dispositivo y, a continuación, almacene provisionalmente y confirme los CAB con APPLYUPDATE
. Tenga en cuenta que la actualización de esta manera respeta el control de versiones del paquete, por lo que si las versiones actualizadas de los paquetes se van a implementar en el dispositivo, deben tener un número de versión mayor. (Consulte el comando Set-IoTCabVersion en el entorno de IoT ADK). Puede encontrar más información sobre esto en Crear e instalar paquetes.
Paso 8: Creación de una imagen comercial
Tener una imagen firmada correctamente es una parte importante de la protección y actualización de un dispositivo. Para Windows 10 IoT Core, esto aparece como la diferencia entre las compilaciones firmadas por prueba firmadas y minoristas. Nunca debe implementar públicamente una imagen firmada de prueba. Las imágenes firmadas de prueba solo deben usarse con fines de depuración y debe corregir los errores o cambios de configuración antes de crear la imagen final firmada por el comercio minorista.
Nota:
Además de las herramientas de desarrollo e implementación instaladas en la máquina, también necesitará lo siguiente para habilitar la firma comercial:
- Un certificado de firma de código comercial
- Un certificado de firma cruzada
Firma correcta e inclusión de las aplicaciones
Si tienes una o varias aplicaciones personalizadas que quieres incluir en tu imagen comercial de Windows 10 IoT Core, debes comprobar que estas aplicaciones se han firmado correctamente al incluirlas en tu imagen comercial.
Información adicional
Adición de nuevas aplicaciones a una imagen existente
Para agregar una nueva aplicación a un diseño de sistema operativo existente, puede agregar el proyecto como un subproyecto al proyecto de diseño del sistema operativo o puede crear paquetes CAB de implementación normales para implementarlos en el dispositivo como parte de la configuración inicial del dispositivo.
Procedimientos recomendados de empaquetado
Siempre debe tener como objetivo asegurarse de que los paquetes sean lo más granulares posible para reducir el tiempo de actualización.
Dado que un paquete es la unidad más pequeña de actualización, asegúrese de que cada paquete sea lo más pequeño posible. Al compilar en Platform Builder, los paquetes generados se separan según la sección de memoria y el tipo de módulo o archivo según el archivo de biblioteca automáticamente.
En el caso de los recursos personalizados integrados en Platform Builder y empaquetados a través de OSDesign.bib, considere la posibilidad de agregar recursos personalizados a una sección de memoria independiente en el BIB (no en NK), de modo que las actualizaciones del código personalizado puedan enviarse independientes de las actualizaciones del sistema operativo CE.
Para los recursos personalizados agregados a través de los comandos de empaquetado de IoT ADK: asegúrese de que los paquetes creados son lo más pequeños posible.
Adición de otras cosas al paquete de Platform Builder
En general, la recomendación es no modificar el paquete resultante generado por Platform Builder para incluir componentes adicionales en la imagen del sistema. En su lugar, siga la guía de fabricación de Windows 10 IoT Core. Sin embargo, si los archivos se deben agregar al paquete creado por Platform Builder, siga el proceso existente. Al agregar contenido al paquete generado por PB, tenga en cuenta lo siguiente:
Hay un tamaño máximo para los paquetes (unos 400 MB) y superar este tamaño impedirá la actualización.
Novedades se producen en la granularidad del paquete. Si es necesario actualizar un único recurso del paquete, todos los recursos de ese paquete se actualizarán al mismo tiempo. Para reducir el tamaño de las actualizaciones, aísle el contenido en paquetes independientes para minimizar el tamaño general de la actualización.
Adición de archivos adicionales a través de Platform Builder
El proceso de empaquetado detallado anteriormente está controlado por las mismas entradas que entran en la creación de un archivo BIN de CE. Por lo tanto, si se hace referencia a los archivos en OSDesign.bib y las entradas del Registro se agregan a OSDesign.reg, el MAKEIMG
proceso incluirá estos archivos en el archivo CAB resultante. Durante este proceso MAKEIMG
ahora:
ROMIMAGE
creará un directorio denominadoCEPAL\_PKG
dentro del directorio de versión plana (FRD) que almacena provisionalmente una estructura de directorios instalada para Windows CE para CEPAL.ROMIMAGE
inventaria todos los archivos CE que se colocaron enCEPAL\_PKG
en función de los archivos BIB ce.ROMIMAGE
creará varios archivos WM.XML para cada sección de memoria. Esto se hace para que las actualizaciones se puedan insertar de forma más granular, ya que la unidad mínima de actualización es un paquete.ROMIMAGE
creará que haga referencia a todos los paquetes creados.
Todos los paquetes creados se denominarán con un prefijo fijo de “%OEM\_NAME%.WindowsCE.\*”
, donde %OEM\_NAME%
se rellena durante el proceso de creación de IoT Core al llamar a New-IoTCabPackage. El nombre del paquete dentro del espacio de nombres se deriva de la sección de memoria del archivo BIB (por ejemplo, NK) seguido de módulos o archivos (también determinado por el archivo BIB).
Comunicación entre aplicaciones de Windows Embedded Compact 2013 y Windows 10 IoT Core
El enfoque recomendado para comunicarse entre las aplicaciones que se ejecutan en el contenedor de CE es usar Bucle invertido local. Puede leer más sobre Bucle invertido local en este documento.
Iniciar automáticamente la aplicación contenedora de aplicaciones de CE
Para iniciar automáticamente la aplicación contenedora de CE, puede crear un paquete de aprovisionamiento que establezca la aplicación de inicio en "Microsoft.Windows.IoT.CEPAL.DkMonUWP_cw5n1h2txyewy! App" e incluyó este paquete de aprovisionamiento en la imagen. También deberá quitar la aplicación de inicio predeterminada mediante el comando Remove-IoTProductFeature y quitar el identificador de característica de IOT_BERTHA de la definición de producto de IoT Core.
Opciones de configuración disponibles para la Contenedor de aplicación de Windows CE
Configuración basada en el Registro en CE
Pila no ejecutable de forma predeterminada
El Contenedor de aplicación de Windows CE ha deshabilitado las páginas de pila ejecutable de forma predeterminada para mejorar la seguridad. Sin embargo, algunas aplicaciones heredadas pueden depender de este comportamiento para ejecutarse correctamente. Para habilitar una pila ejecutable, establezca el siguiente valor del Registro en la imagen de CE (se recomienda que esto entre en OSDesign.reg en Platform Builder).
KeyPath = HKEY\_LOCAL\_MACHINE\CEPAL
ValueName = MemoryOptions Type = REG\_DWORD
Value = 1
Invalidación de 565 bits de 16 bits para GWES
Si el Contenedor de aplicación de Windows CE está configurado con una pantalla de 32 bits, las conversiones RGB de 16 bits a 32 bits se realizan mediante GWES con la suposición de que los datos de píxelES RGB de 16 bits están en formato RGB555. Si los recursos de mapa de bits están en 565 de 16 bits y la conversión a un RGB555 de estos recursos no es posible, el comportamiento de conversión predeterminado de GWES se puede cambiar a través de una clave del Registro. Cree la siguiente clave del Registro:
HKEY\_LOCAL\_MACHINE\SYSTEM\GDI\16bpp565RGBPalette.
Configuración basada en el Registro en host (IoT Core)
Configuración de puertos serie para el Contenedor de aplicación de Windows CE
Los puertos serie de host deben asignarse al entorno de CE. Esta asignación existe en el registro en IoT Core y debe configurarla el creador de imágenes.
En HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial
, existen entradas de configuración para asignar puertos COM invitados a puertos COM de host mediante el esquema siguiente.
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
Si la ruta de acceso del Registro anterior no existe cuando se arranca CE, se escribirá una configuración predeterminada en función de los dispositivos serie detectados en el sistema.
Configuración basada en archivos en host
El contenedor de CE se puede configurar mediante un archivo local en el host C:\WindowsCE\CEEnvConfig.json
. Este es un ejemplo de este archivo de configuración:
{
"OEMOptions" :
{
"GUI" : true,
"Width" : 1024,
"Height" : 768, "FillScreen" : true, "ColorDepth" : 32,
"RefreshRate" : 30, "noAslrSupport" : true, "OemConfigApp" : "",
"OemConfigFile" : ""
},
"CEPALDevOptions" :
{
"VsDebugMode" : true, "FastDebugBoot" : false
}
}
OEMOptions
Clave | Descripción |
---|---|
GUI | Inicie el contenedor de aplicaciones de CE con la interfaz de usuario (valor predeterminado true) |
Ancho | Ancho de la pantalla del contenedor de aplicaciones de CE (valor predeterminado 1024) |
Height | Alto de la presentación del contenedor de aplicaciones de CE (valor predeterminado 768) |
FillScreen | |
ColorDepth | Establece bits predeterminados por píxel (valor predeterminado 32) |
RefreshRate | Cuántas veces se vuelve a dibujar la pantalla por segundo |
noAslrSupport | Deshabilita la selección aleatoria del diseño del espacio de direcciones en el contenedor de aplicaciones de CE (valor predeterminado true) |
OEMConfigApp | Nombre de familia de paquetes de una aplicación proporcionada por OEM que se debe iniciar para la configuración. |
OEMConfigFile | Ruta de acceso a un archivo que contiene opciones de configuración adicionales compartidas entre OEMConfigApp y el contenedor de aplicaciones de CE |
El contenedor de aplicaciones de CE solo hace que una interfaz de red esté disponible para su uso. Si hay varias NIC presentes en el sistema host, se debe seleccionar una interfaz en el Registro de host para asegurarse de que la NIC seleccionada es determinista.
OEMConfigFile
OemConfigFile se especifica en C:\WindowsCE\CEEnvConfig.json
. Asegúrate de que una aplicación para UWP pueda leer este archivo. A continuación se muestra un ejemplo:
{
“FactoryReset”: false, “PlatformBuilderDebugMode”: false,
“NetInterface”: “Some Network Profile Id”
}
Opciones:
Clave | Descripción |
---|---|
FactoryReset | Lo usa la aplicación de configuración para indicar al contenedor de aplicaciones ce para volcar el estado persistente. |
PlatformBuilderDebugMode | Se usa para arrancar el contenedor de aplicaciones de CE con compatibilidad con KITL para la depuración con Platform Builder. |
NetInterface | Seleccione una interfaz de red para CE en función del nombre del perfil. |