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.

Arquitectura de contenedor de aplicaciones de CE

Para obtener más información sobre esta arquitectura, consulte este vídeo: Modernización de dispositivos Windows CE.

Requisitos previos

El software 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 de Windows 10 IoT Core actualizados 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 emplee la tecnología CE App Container.

Además, necesitará lo siguiente:

Configuración, compilació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:

  1. Creación de un proyecto de diseño del sistema operativo con Platform Builder
  2. Seleccione el paquete de soporte técnico de la placa del Generador de plataformas (BSP)
  3. Elección de la plantilla de diseño adecuada
  4. Configurar las opciones proporcionadas por la plantilla de diseño
  5. Opcionalmente, agregue subproyectos al proyecto de diseño.
  6. 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 de 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 anterior del proyecto de diseño del sistema operativo 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 "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".

Selección del BSP del contenedor de aplicaciones de CE

Después de hacerlo, tendrá la capacidad de configurar las opciones y los 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.

Creació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, Windows 10 IoT Core desacopla 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 personas de su organización.

Los pasos básicos para crear una imagen son:

  1. Creación de un área de trabajo

  2. Importación del paquete de compatibilidad adecuado de la placa ioT Core (BSP)

  3. Importación del contenedor de aplicaciones de CE que creó anteriormente

  4. Creación de la definición del producto

  5. Adición de características y aplicaciones al producto

  6. Compilación de la actualización flash completa (FFU)

  7. Implementación de FFU en el dispositivo y prueba

  8. Finalización y firma de la FFU comercial

Hay guías detalladas para cada uno de estos pasos como parte de la guía de fabricación de Windows 10 IoT Core. 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 aprender a crear un área de trabajo.

Paso 2: Importación del paquete de compatibilidad adecuado de la placa 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 compatibilidad con la placa.

Paso 3: Importar el Contenedor de aplicación de Windows CE

El Contenedor de aplicación de Windows CE se crea mediante PB como se ha descrito anteriormente y se importa 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 (test y retail).

El siguiente paso consiste en usar el comando Add-IoTProductFeature para agregar la característica de IOT_CEPAL al OEMInput.xml. Esto agrega la compatibilidad de Windows Host con el Contenedor de aplicación de Windows CE (Windows CE aplicación para UWP de front-end + controladores de soporte técnico) 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 compilada 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

Las 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 de prueba y firmadas por retail. Nunca debe implementar públicamente una imagen firmada de prueba. Las imágenes firmadas de prueba solo se deben usar con fines de depuración y debe corregir los errores o los cambios de configuración antes de crear la imagen firmada por el comercio minorista final.

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 tiene una o varias aplicaciones personalizadas que desea incluir en la imagen comercial de Windows 10 IoT Core, debe comprobar que estas aplicaciones están firmadas correctamente al incluirlas en la 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 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 de actualización más pequeña, 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 bib 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), para que las actualizaciones del código personalizado puedan enviarse independientes de las actualizaciones al 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 (aproximadamente 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 se basa en 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:

  1. ROMIMAGEcreará un directorio denominado CEPAL\_PKG en el Directorio de versión plana (FRD) que almacena provisionalmente una estructura de directorios instalada para Windows CE para CEPAL.
  2. ROMIMAGE inventaria todos los archivos CE que se colocaron en CEPAL\_PKG basados en archivos CE BIB.
  3. 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.
  4. 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 ce es usar bucle invertido local. Puede leer más sobre Bucle invertido local en este documento.

Inicio automático de 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 tendrá que 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 el Contenedor de aplicación de Windows CE

Configuración basada en el Registro en CE

Pila que no es 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 16 bits de 565 para GWES

Si el Contenedor de aplicación de Windows CE está configurado con una pantalla de 32 bits, gwES realiza conversiones RGB de 16 bits a 32 bits 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 16 bits 565 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 Iniciar el contenedor de aplicaciones de CE con la interfaz de usuario (el valor predeterminado es true)
Ancho Ancho de la pantalla del contenedor de aplicaciones de CE (valor predeterminado 1024)
Alto Alto de la pantalla 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 del paquete 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 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 Usado por la aplicación de configuración para indicar al contenedor de aplicaciones de CE que volca 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 basada en el nombre del perfil.

Referencias