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.
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:
Microsoft Visual Studio 2013 Professional ou Visual Studio 2015 Professional. Essas versões são necessárias para as ferramentas Application Builder e Platform Builder.
Construtor de aplicativos para Windows Embedded Compact 2013
Platform Builder para Windows Compact 2013
Um BSP de núcleo de IoT em funcionamento
As ferramentas mencionadas no Guia de Fabricação do Windows IoT
Lembre-se de instalar os componentes atualizados no lugar dos mencionados neste guia (Windows 10 ADK e Windows 10 ADK PE Add-on, IoT Core ADK Add-ons, Windows 10 IoT Core Dashboard)
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 é:
Criar projeto de design de sistema operacional com o Platform Builder
Selecione o BSP (Platform Builder Board Support Package, pacote de suporte da placa do Platform Builder)
Escolha o modelo de design apropriado
Configurar as opções fornecidas pelo modelo de design
Opcionalmente, adicione subprojetos ao projeto de design
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".
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:
Importar o pacote de suporte da placa principal do IoT (BSP) apropriado
Importar o contêiner do aplicativo CE que você criou anteriormente
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 APPLYUPDATE
o . 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á:
ROMIMAGE
criará um diretório nomeadoCEPAL\_PKG
dentro do FRD (Flat Release Directory) que prepara uma estrutura de diretório instalada para o Windows CE para CEPAL.ROMIMAGE
inventaria todos os arquivos CE que foram colocados comCEPAL\_PKG
base em arquivos BIB CE.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.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. |