Compartilhar via


Introdução ao Contêiner de Aplicativo do Windows CE

O Windows CE App Container é uma tecnologia que permite que a maioria dos aplicativos CE sejam executados sobre o Windows 10 IoT Core.

A solução é construída em duas etapas. O primeiro estágio cria uma imagem do Windows CE 2013 usando um BSP para arquitetura x86 ou ARM32. Em seguida, no segundo estágio, essa imagem é incluída em uma imagem do Windows 10 IoT Core que utiliza o BSP x64 ou ARM32 para o hardware de dispositivo específico onde a solução será instalada.

Arquitetura de contêiner do aplicativo CE

Para obter mais informações sobre essa arquitetura, consulte este vídeo: Modernizando dispositivos Windows CE.

Pré-requisitos

O software Windows CE App Container requer uma versão atualizada do Windows Compact 2013 (número de compilação 6294 de junho de 2020 ou posterior) juntamente com pacotes atualizados do Windows 10 IoT Core para x64 e ARM32 (atualização de agosto de 2020 ou posterior). Para obter os pacotes mais recentes para o Windows 10 IoT Core, entre em contato com seu distribuidor da Microsoft.

Observação

Você deve ter uma assinatura válida do IoT Core Services para distribuir um dispositivo que emprega a tecnologia CE App Container.

Além disso, você precisará do seguinte:

Configurando, criando e empacotando o CE para o contêiner de aplicativo do Windows CE

O processo para criar uma imagem do Windows Embedded Compact 2013 não foi atualizado significativamente. O processo geral para construir uma imagem é:

  1. Criar projeto de design de sistema operacional com o Platform Builder

  2. Selecione o BSP (Platform Builder Board Support Package, pacote de suporte da placa do Platform Builder)

  3. Escolha o modelo de design apropriado

  4. Configurar as opções fornecidas pelo modelo de design

  5. Opcionalmente, adicione subprojetos ao projeto de design

  6. Criar a imagem

A principal alteração está na seleção do BSP correto e considerações adicionais para a imagem CE. Este guia pressupõe que você já esteja familiarizado com o processo para criar uma imagem de sistema do Windows CE, mas vale a pena examinar mais profundamente a seção alterada.

A etapa 2 é a única parte do processo de projeto de design do sistema operacional anterior que é alterada ao usar o contêiner do aplicativo CE, consulte abaixo para obter detalhes adicionais.

Etapa 2 - Seleção BSP do Platform Builder

Para oferecer suporte ao contêiner de aplicativos do Windows CE, um novo BSP destinado a arquiteturas x86 e ARM foi adicionado ao Platform Builder.

Ao criar um design de sistema operacional para o contêiner de aplicativo CE, selecione o "Windows CE App Container: x86" ou "Windows CE App Container: ARMv7" (ARMv7), dependendo do hardware subjacente para seu dispositivo baseado em IoT Core.

Por exemplo, se o dispositivo IoT Core de destino usar hardware Intel, você selecionará a opção "Windows CE App Container: x86". Como alternativa, se o hardware do IoT Core usar NXP i.MX6, você selecionará a opção "Windows CE App Container: ARMv7".

Selecione o contêiner do aplicativo CE BSP

Depois de fazer isso, você terá a capacidade de configurar as opções e subprojetos exatamente como faria normalmente para uma imagem do Windows Embedded Compact. Essas configurações serão incorporadas ao contêiner CE que você implantará em sua imagem do Windows 10 IoT Core.

Criando a imagem do Windows 10 IoT Core

Observação

Esse processo é abordado com mais detalhes nos laboratórios que fazem parte do Guia de Fabricação do Windows 10 IoT Core. A seção abaixo fornece apenas ações adicionais a serem executadas em determinados estágios do processo de criação de imagens do IoT Core. É altamente recomendável familiarizar-se com o Guia de Fabricação do Windows 10 IoT Core antes de prosseguir.

Visão geral do processo

Ao contrário do processo de criação de uma imagem do Windows Embedded Compact, o Windows 10 IoT Core desacopla ainda integra a criação de firmware, pacotes de suporte de placa, definição de imagem e inclusão de aplicativos. Ao utilizar diferentes tecnologias para essas peças, você pode separar o trabalho que precisa fazer entre diferentes equipes ou indivíduos em sua organização.

As etapas básicas na criação de uma imagem são:

  1. Criar um workspace

  2. Importar o pacote de suporte da placa principal do IoT (BSP) apropriado

  3. Importar o contêiner do aplicativo CE que você criou anteriormente

  4. Crie sua definição de produto

  5. Adicionar recursos e aplicativos ao seu produto

  6. Crie sua atualização Full Flash (FFU)

  7. Implantar o FFU no dispositivo e testar

  8. Finalize e assine sua FFU de varejo

Há guias detalhados para cada uma dessas etapas como parte do Guia de Fabricação do Windows 10 IoT Core. Embora algumas dessas etapas sejam como o processo de usar o Platform Builder (PB) para criar uma imagem de dispositivo, vale a pena explorar algumas áreas mais profundamente.

Etapa 1 - Criar um espaço de trabalho

Consulte a documentação Criar uma imagem básica no Guia de Manufatura do IoT Core para saber como criar um espaço de trabalho.

Etapa 2 - Importar o pacote de suporte da placa principal do IoT (BSP) apropriado

Consulte a documentação, Criar uma imagem básica, no Guia de fabricação do IoT Core para obter suporte para sua placa.

Etapa 3 - Importando o contêiner de aplicativo do Windows CE

O contêiner de aplicativo do Windows CE é criado usando PB conforme discutido acima e importado para seu espaço de trabalho do IoT Core usando o comando Import-IoTCEPAL . Esse comando copiará o conteúdo necessário do diretório de versão simples do CE para o espaço de trabalho do IoT ADK. Se for invocado várias vezes, o backup do estado anterior será feito no Source-\$Arch\CEPAL.OLD diretório no espaço de trabalho.

Etapa 4 - Crie sua definição de produto

Revise a documentação, Criar uma imagem básica, no Guia de fabricação do IoT Core para criar sua definição de produto.

Etapa 5 - Adicionando o contêiner do aplicativo CE a um produto

Depois de importar sua definição de contêiner de aplicativo CE para seu espaço de trabalho, você precisará garantir que execute o comando Add-IoTCEPAL , que adicionará uma referência aos pacotes de contêiner de aplicativo CE para os arquivos de OEMInput.xml de produto relevantes (teste e varejo).

A próxima etapa é usar o comando Add-IoTProductFeature para adicionar o recurso IOT_CEPAL ao OEMInput.xml. Isso adiciona o suporte de host do Windows para o contêiner de aplicativo do Windows CE (aplicativo UWP front-end do Windows CE + drivers de suporte) à nossa definição de produto e inclui o contêiner de aplicativo CE no grupo de aplicativos padrão. Discutiremos a configuração de inicialização em uma seção posterior.

Passo 6 - Crie seus arquivos CAB

Este é um passo importante durante a criação do seu FFU e deve ser feito sempre que você alterar uma configuração, adicionar/alterar um aplicativo ou drivers. Você usará o New-IoTCabPackage com a opção "All". Você também pode criar recursos únicos conforme necessário, mas em geral você deve reconstruir todos os pacotes antes da etapa de criação de sua FFU como prática recomendada.

Passo 7 - Implantando sua FFU em seu dispositivo

Depois que a imagem for criada, você poderá implantá-la em um dispositivo. Isso pode ser feito a partir da linha de comando usando o DISM, por meio do processo de implantação específico do dispositivo ou usando o Painel do Windows 10 IoT Core. Mais detalhes estão disponíveis como parte do Guia de Fabricação do Windows 10 IoT Core.

Implantando o contêiner de aplicativo do Windows CE em um dispositivo ao usar uma FFU existente

Os CABs CE são pacotes implantáveis no IoT Core. Se houver uma imagem do IoT Core existente, esses CABs poderão ser implantados no dispositivo usando o APPLYUPDATE comando. Primeiro, copie os CABs para o dispositivo, depois prepare e confirme os CABs com APPLYUPDATEo . Observe que a atualização dessa maneira respeita o controle de versão de pacotes, portanto, se versões atualizadas de pacotes forem implantadas no dispositivo, elas devem ter um número de versão maior. (Consulte o comando Set-IoTCabVersion no ambiente IoT ADK). Mais informações sobre isso podem ser encontradas em Criar e instalar pacotes

Etapa 8 - Construindo uma imagem de varejo

Ter uma imagem assinada corretamente é uma parte importante da proteção e atualização de um dispositivo. Para o Windows 10 IoT Core, isso aparece como a diferença entre as compilações assinadas de teste e de varejo. Você nunca deve implantar publicamente uma imagem assinada de teste. As imagens assinadas de teste só devem ser usadas para fins de depuração e você deve corrigir quaisquer erros ou alterações de configuração antes de criar sua imagem assinada final de varejo.

Observação

Além das ferramentas de desenvolvimento e implantação instaladas em sua máquina, você também precisará do seguinte para habilitar a assinatura de varejo:

  • Um certificado de assinatura de código de varejo
  • Um certificado de assinatura cruzada

Assinando corretamente e incluindo seus aplicativos

Se você tiver um ou mais aplicativos personalizados que deseja incluir em sua imagem de varejo do Windows 10 IoT Core, será necessário verificar se esses aplicativos estão assinados corretamente ao incluí-los em sua imagem de varejo.

Informações Adicionais

Adicionando novos aplicativos a uma imagem existente

Para adicionar um novo aplicativo a um Design de SO existente, você pode adicionar o projeto como um subprojeto ao Projeto de Design de SO ou pode criar pacotes CAB de implantação normal para implantá-los no dispositivo como parte da configuração inicial do dispositivo.

Práticas recomendadas de empacotamento

Você deve sempre procurar garantir que os pacotes sejam o mais granulares possível para reduzir o tempo de atualização.

Como um pacote é a menor unidade de atualização, certifique-se de que cada pacote seja o menor possível. Ao construir no Platform Builder, os pacotes gerados são separados de acordo com a seção de memória e o tipo de módulo/arquivo de acordo com o arquivo bib automaticamente.

  • Para ativos personalizados criados no Platform Builder e empacotados por meio do OSDesign.bib, considere adicionar ativos personalizados em uma seção de memória separada no BIB (não em NK), para que as atualizações de código personalizado possam ser enviadas separadamente das atualizações para o CE OS.

  • Para ativos personalizados adicionados por meio dos comandos de empacotamento do IoT ADK: verifique se os pacotes criados são os menores possíveis.

Adicionando outras coisas ao pacote do Platform Builder

Em geral, a recomendação é não modificar o pacote resultante produzido pelo Platform Builder para incluir componentes adicionais na imagem do sistema. Em vez disso, siga o guia de fabricação do Windows 10 IoT Core. No entanto, se os arquivos precisarem ser adicionados ao pacote criado pelo Platform Builder, siga o processo existente. Ao adicionar conteúdo ao pacote gerado pelo PB, considere o seguinte:

  • Existe um tamanho máximo para pacotes (cerca de 400 MB) e exceder esse tamanho impedirá a atualização.

  • As atualizações ocorrem na granularidade do pacote. Se um único ativo no pacote precisar ser atualizado, todos os ativos desse pacote serão atualizados ao mesmo tempo. Para reduzir o tamanho das atualizações, isole o conteúdo em pacotes separados para minimizar o tamanho geral da atualização.

Adicionando arquivos adicionais por meio do Platform Builder

O processo de empacotamento detalhado acima é conduzido pelas mesmas entradas que entram na construção de um arquivo CE BIN. Portanto, se os arquivos são referenciados em OSDesign.bib e entradas do Registro são adicionadas a OSDesign.reg, o MAKEIMG processo incluirá esses arquivos no arquivo CAB resultante. Durante este processo MAKEIMG irá:

  1. ROMIMAGE criará um diretório nomeado CEPAL\_PKG dentro do FRD (Flat Release Directory) que prepara uma estrutura de diretório instalada para o Windows CE para CEPAL.

  2. ROMIMAGE inventaria todos os arquivos CE que foram colocados com CEPAL\_PKG base em arquivos BIB CE.

  3. ROMIMAGE criará vários arquivos WM.XML para cada seção de memória. Isso é feito para que as atualizações possam ser enviadas de forma mais granular, já que a unidade mínima de atualização é um pacote.

  4. ROMIMAGE criará que faz referência a todos os pacotes criados.

Todos os pacotes criados serão nomeados com um prefixo fixo de , onde %OEM\_NAME% é preenchido durante o processo de “%OEM\_NAME%.WindowsCE.\*”criação do IoT Core ao chamar New-IoTCabPackage. O Nome do pacote dentro do espaço de nome é derivado da seção de memória no arquivo BIB (por exemplo, NK) seguido por módulos / arquivos (também determinado pelo arquivo BIB).

Comunicação entre aplicativos Windows Embedded Compact 2013 e Windows 10 IoT Core

A abordagem recomendada para se comunicar entre aplicativos em execução no contêiner CE é usar loopback local. Você pode ler mais sobre Local Loopback neste documento.

Iniciando automaticamente o aplicativo CE App Container

Para iniciar automaticamente o aplicativo CE Container, você pode criar um pacote de provisionamento que define o aplicativo de inicialização como "Microsoft.Windows.IoT.CEPAL.DkMonUWP_cw5n1h2txyewy! App", e incluiu esse pacote de provisionamento na imagem. Você também precisará remover o aplicativo de inicialização padrão usando o comando Remove-IoTProductFeature e removendo a ID do recurso IOT_BERTHA da definição do produto IoT Core.

Definições de configuração disponíveis para o contêiner de aplicativo do Windows CE

Configuração baseada no registro no CE

Pilha não executável por padrão

O contêiner de aplicativos do Windows CE desabilitou páginas de pilha executáveis por padrão para melhorar a segurança. No entanto, alguns aplicativos herdados podem depender desse comportamento para executar corretamente. Para habilitar uma pilha executável, defina o seguinte valor do Registro na imagem CE (É recomendável que isso entre em OSDesign.reg no Platform Builder)

KeyPath = HKEY\_LOCAL\_MACHINE\CEPAL
ValueName = MemoryOptions Type = REG\_DWORD
Value = 1
Substituição de 565 de 16 bits para GWES

Se o contêiner de aplicativo do Windows CE estiver configurado com uma exibição de 32 bits, as conversões RGB de 16 bits para 32 bits serão feitas pelo GWES com a suposição de que os dados de pixel RGB de 16 bits estão no formato RGB555. Se os recursos de bitmap estiverem em 565 de 16 bits e a conversão para um RGB555 desses recursos não for possível, o comportamento de conversão padrão do GWES poderá ser alterado por meio de uma chave do Registro. Crie a seguinte chave do Registro:

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

Configuração baseada no Registro no Host (IoT Core)

Configurando portas seriais para o contêiner de aplicativo do Windows CE

As portas seriais do host precisam ser mapeadas para o ambiente CE. Esse mapeamento existe no registro no IoT Core e precisa ser configurado pelo criador da imagem.

Em HKEY\_CURRENT\_USER\Software\Microsoft\Windows NT\CurrentVersion\CEPAL\Devices\Serial, existem entradas de configuração para mapear portas COM convidadas para portas COM do Host usando o esquema a seguir.

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 o caminho do Registro acima não existir quando o CE for inicializado, uma configuração padrão será gravada com base nos dispositivos seriais descobertos no sistema.

Configuração baseada em arquivo no Host

O contêiner CE pode ser configurado usando um arquivo local no host C:\WindowsCE\CEEnvConfig.json. Aqui está um exemplo deste arquivo de configuração:

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

OEMOpções

Chave Descrição
GUI Inicie o contêiner do aplicativo CE com a interface do usuário (true padrão)
Width Largura da exibição do contêiner do aplicativo CE (padrão 1024)
Altura Altura da exibição do contêiner do aplicativo CE (padrão 768)
Tela de preenchimento
ColorDepth Define bits padrão por pixel (padrão 32)
RefreshRate Quantas vezes a tela é redesenhada por segundo
noAslrSupport Desabilita a randomização do layout do espaço de endereço no contêiner do aplicativo CE (true padrão)
OEMConfigApp Nome da família do pacote de um aplicativo fornecido pelo OEM que deve ser iniciado para configuração.
OEMConfigFile Caminho para um arquivo que contém opções de configuração adicionais compartilhadas entre o OEMConfigApp e o contêiner do aplicativo CE

O contêiner do aplicativo CE disponibiliza apenas uma interface de rede para uso. Se várias NICs estiverem presentes no Sistema Host, uma interface deverá ser selecionada no Registro do Host para garantir que a NIC selecionada seja determinística.

OEMConfigFile

O OEMConfigFile é especificado em C:\WindowsCE\CEEnvConfig.json. Verifique se esse arquivo pode ser lido por um aplicativo UWP. Veja o exemplo a seguir:

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

Opções:

Chave Descrição
FactoryReset Usado pelo aplicativo de configuração para sinalizar o contêiner do aplicativo CE para despejar o estado persistente.
PlatformBuilderDebugMode Usado para inicializar o CE App Container com suporte KITL para depuração com o Platform Builder.
Interface de rede Selecione uma interface de rede para CE com base no nome do perfil.

Referências