Visão geral dos aplicativos do Azure Sphere

Os dispositivos do Azure Sphere podem executar dois tipos de aplicativos:

  • Aplicativos de alto nível são executados em contêineres no sistema operacional do Azure Sphere
  • Os RTApps (aplicativos com capacidade em tempo real) são executados em bare metal ou com um RTOS (sistema operacional em tempo real) nos núcleos em tempo real

Um aplicativo de alto nível é necessário para cada dispositivo do Azure Sphere; RTApps são opcionais.

Aplicativos de alto nível

Cada dispositivo do Azure Sphere tem um aplicativo de alto nível, que é executado no sistema operacional do Azure Sphere e pode usar as bibliotecas de aplicativos. Um aplicativo de alto nível pode:

  • Configurar e interagir com periféricos do Azure Sphere, como os pinos gpio (entrada/saída) de uso geral, receptor/transmissores assíncronos universais (UARTs) e outras interfaces

  • Comunicar-se com RTApps

  • Comunicar-se com os serviços baseados em internet e nuvem

  • Intermediar relações de confiança com outros dispositivos e serviços por meio de autenticação baseada em certificado

Um aplicativo de alto nível é executado em um contêiner no modo de usuário normal do Mundo, conforme descrito em O que é o Azure Sphere?. O contêiner de aplicativo dá suporte a um subconjunto do ambiente POSIX e um conjunto de applibs (bibliotecas de aplicativos) específicos para o sistema operacional do Azure Sphere. As bibliotecas e funções que estão disponíveis para aplicativos de alto nível são restritas para garantir que a plataforma permaneça segura e possa ser facilmente atualizada. Os aplicativos podem acessar apenas as bibliotecas e os serviços de tempo de execução que a Microsoft fornece; nem a E/S do arquivo direto nem o acesso ao shell estão disponíveis, entre outras restrições. O ambiente de desenvolvimento descreve o conjunto de API base e apresenta as bibliotecas de aplicativos do Azure Sphere que dão suporte a recursos específicos do dispositivo.

Espera-se que aplicativos de alto nível sejam executados continuamente e sejam reiniciados automaticamente se pararem ou falharem.

Criar um aplicativo de alto nível fornece mais informações sobre recursos.

Aplicativos com capacidade em tempo real

Um dispositivo do Azure Sphere também pode ter um ou mais aplicativos capazes em tempo real, além de seu aplicativo de alto nível. Um RTApp pode:

  • Configurar e interagir com periféricos integrados ao MCU do Azure Sphere, como os pinos de GPIO e UARTs
  • Comunicar-se com aplicativos de alto nível

Os RTApps podem ser executados no bare metal ou com um RTOS (sistema operacional em tempo real). O repositório de exemplos do Azure Sphere no GitHub inclui um exemplo de HelloWorld bare-metal, bem como um exemplo que demonstra a comunicação entre o alto nível e o RTApps. O repositório Exemplos do Azure no GitHub contém um exemplo que mostra como usar o Azure Sphere com o Azure RTOS.

Drivers e exemplos adicionais para RTApps que visam os núcleos M4 em tempo real no chip MT3620 estão disponíveis no GitHub dos parceiros do Azure Sphere MediaTek e Codethink.

Cada RTApp é executado isolado em um núcleo de E/S específico e só pode se comunicar com um aplicativo de alto nível; ele não pode usar a Internet, os applibs do Azure Sphere ou outros recursos do sistema operacional do Azure Sphere.

Criar um aplicativo com capacidade em tempo real fornece mais informações sobre os recursos e o processo de desenvolvimento para RTApps.

Recursos comuns a todos os aplicativos

Apesar das diferenças significativas entre aplicativos de alto nível e RTApps, todos os aplicativos do Azure Sphere têm algumas coisas em comum. Você pode desenvolver, compilar e depurar ambos os tipos de aplicativos usando o Visual Studio ou Visual Studio Code ou invocando CMake e Ninja usando a CLI.

Além disso, os seguintes recursos de segurança se aplicam a RTApps e de alto nível:

Funcionalidades do aplicativo

Independentemente de onde ele é executado, todos os aplicativos do Azure Sphere devem especificar os serviços e interfaces externos necessários, por exemplo, seus requisitos de E/S e rede, para impedir qualquer uso não autorizado ou inesperado.

Os recursos do aplicativo são os recursos necessários para um aplicativo. Os recursos do aplicativo incluem os periféricos que o aplicativo usa, os hosts de Internet aos quais um aplicativo de alto nível se conecta e a permissão para alterar a configuração de rede, entre outros. Cada aplicativo deve ter um manifesto de aplicativo que identifique esses recursos.

Recursos do dispositivo

Um recurso de dispositivo habilita uma atividade específica do dispositivo. Os recursos do dispositivo são concedidos pelo Serviço de Segurança do Azure Sphere. Por padrão, os chips do Azure Sphere não têm recursos de dispositivo. Há dois tipos main de recursos de dispositivo: a funcionalidade do dispositivo appDevelopment e a funcionalidade do dispositivo fieldServicing.

A funcionalidade do dispositivo appDevelopment altera o tipo de assinatura em que o dispositivo confia. Por padrão, os dispositivos do Azure Sphere confiam em pacotes de imagem assinados pela produção, mas não confiam em pacotes de imagem assinados pelo SDK. Como resultado, você não pode carregar um pacote de imagem assinado pelo SDK em um dispositivo do Azure Sphere que não tenha essa funcionalidade. No entanto, quando o recurso appDevelopment está presente, o dispositivo confia em pacotes de imagem assinados pelo SDK. Além disso, ele permite que você inicie, pare, depure ou remova um aplicativo do dispositivo. Em resumo, o recurso de desenvolvimento de aplicativos deve estar presente no dispositivo antes que você possa:

  • Carregar um pacote de imagem que foi criado pelo Visual Studio ou pelo comando azsphere image-package .
  • Inicie, pare, depure ou remova um pacote de imagem do dispositivo do Azure Sphere, independentemente de como o pacote de imagem é assinado.

O comando az sphere device enable-development cria e aplica o recurso appDevelopment e impede que o dispositivo receba atualizações de aplicativo de nuvem.

A funcionalidade fieldServicing permite comunicações de dispositivo para computador em dispositivos que estão no estado de fabricação deviceComplete. Com esse recurso, você pode carregar imagens assinadas pela produção, mas não excluí-las. Você pode iniciar e parar aplicativos, mas não depurá-los. Você também pode executar tarefas de manutenção de rotina, como configurar o Wi-Fi. Destina-se ao uso de curto prazo durante uma sessão de manutenção, um período limitado durante o qual o acesso ao dispositivo é concedido por operação.

Requisitos de assinatura e implantação

Todos os pacotes de imagem implantados em um dispositivo do Azure Sphere devem ser assinados. O SDK do Azure Sphere e os pacotes de imagem do pacote de imagens do az sphere assinam pacotes de imagem para teste usando uma chave de assinatura do SDK. Os dispositivos do Azure Sphere confiam nessa chave somente se a funcionalidade do dispositivo appDevelopment também estiver presente.

O Serviço de Segurança do Azure Sphere assina pacotes de imagem quando você os carrega na nuvem. Pacotes de imagem assinados pela produção podem ser carregados de lado ou carregados da nuvem.

Para impedir a instalação de software desonesto, os aplicativos podem ser carregados em um dispositivo do Azure Sphere de apenas duas maneiras:

  • Sideloading, que pode ser usado para desenvolvimento e teste de software e para manutenção de campo de dispositivos. O sideload para desenvolvimento e teste de software requer a funcionalidade do dispositivo appDevelopment. O sideload para manutenção de campo requer a capacidade do dispositivo fieldServicing e pacotes de imagem assinados pela produção. Tanto o Visual Studio quanto Visual Studio Code aplicativos de sideload durante o desenvolvimento e a depuração; você também pode carregar manualmente usando a CLI do Azure.

  • Atualização de nuvem, que só pode ser executada pelo Serviço de Segurança do Azure Sphere. Use a CLI do Azure para criar e gerenciar implantações de nuvem.

Aplicativos parceiros

Os aplicativos que funcionam juntos podem ser considerados aplicativos parceiros e, em seguida, podem ser carregados separadamente. Quando você carrega um aplicativo que tem um parceiro, o aplicativo parceiro permanecerá no dispositivo do Azure Sphere se ele já tiver sido implantado. Cada aplicativo declara uma lista de seus parceiros em sua configuração de projeto.

Para adicionar parceiros à configuração do projeto CMake, especifique a ID do componente do aplicativo parceiro no campo partnerComponents da seção configurações do arquivo launch.vs.json ou .vscode/launch.json:

"partnerComponents": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]

Aplicativos de alto nível e RTApps que se comunicam entre si devem ser identificados como parceiros. O Azure Sphere não dá suporte à comunicação entre pares de aplicativos de alto nível ou pares de RTApps.