Fazer portabilidade da Network Transport Interface - FreeRTOS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Fazer portabilidade da Network Transport Interface

Integração da biblioteca TLS

Para autenticação Transport Layer Security (TLS), use a pilha TLS de sua preferência. Recomendamos usar o Mbed TLS porque ele é testado com bibliotecas FreeRTOS. Você pode descobrir um exemplo disso neste repositório do GitHub.

Independentemente da implementação de TLS usada pelo seu dispositivo, você deve implementar os hooks de transporte subjacentes para a pilha TLS com a pilha TCP/IP. Eles devem oferecer suporte aos pacotes de criptografia TLS que são compatíveis com o AWS IoT.

Fazer portabilidade da biblioteca Network Transport Interface

Você deve implementar uma interface de transporte de rede para usar coreMQTT e coreHTTP. A interface de transporte de rede contém ponteiros de função e dados de contexto necessários para enviar e receber dados em uma única conexão de rede. Consulte Interface de transporte para obter mais detalhes. O FreeRTOS fornece um conjunto de testes integrados de interface de transporte de rede para validar essas implementações. A seção a seguir orienta você sobre como configurar seu projeto para executar esses testes.

Pré-requisitos

Para fazer a portabilidade desse teste, é necessário:

  • Um projeto com um sistema de compilação que pode criar o FreeRTOS com uma porta validada do kernel do FreeRTOS.

  • Implementação funcional de drivers de rede.

Portabilidade

  • Adicione Freertos-Libraries-Integration-Tests como um submódulo em seu projeto. Não importa onde o submódulo será colocado no projeto, desde que ele possa ser compilado.

  • Copie config_template/test_execution_config_template.h e config_template/test_param_config_template.h para um local do projeto no caminho de compilação e renomeie-os para test_execution_config.h e test_param_config.h.

  • Inclua os arquivos relevantes no sistema de compilação. Se estiver usando CMake, qualification_test.cmake e src/transport_interface_tests.cmake são usados para incluir os arquivos relevantes.

  • Implemente as seguintes funções em um local apropriado do projeto:

    • Rnetwork connect function: a assinatura é definida por NetworkConnectFunc em src/common/network_connection.h. Essa função usa um ponteiro para o contexto da rede, um ponteiro para as informações do host e um ponteiro para as credenciais da rede. Ela estabelece uma conexão com o servidor especificado nas informações do host com as credenciais de rede fornecidas.

    • Rnetwork disconnect function: a assinatura é definida por NetworkDisconnectFunc em src/common/network_connection.h. Essa função usa um ponteiro para um contexto de rede. Ela desconecta uma conexão previamente estabelecida armazenada no contexto da rede.

    • setupTransportInterfaceTestParam(): esta API é definida em src/transport_interface/transport_interface_tests.h. A implementação deve ter exatamente o mesmo nome e assinatura definidos em transport_interface_tests.h. Essa função recebe um ponteiro para uma estrutura TransportInterfaceTestParam. Ela preencherá os campos na estrutura TransportInterfaceTestParam que é usada pelo teste da interface de transporte.

  • Implemente UNITY_OUTPUT_CHAR para que os logs de saída do teste não intercalem com os logs do dispositivo.

  • Chame runQualificationTest() do aplicativo. O hardware do dispositivo deve ser inicializado corretamente e a rede deve estar conectada antes da chamada.

Gerenciamento de credenciais (chave gerada no dispositivo)

Quando FORCE_GENERATE_NEW_KEY_PAIR em test_param_config.h é definido como 1, o aplicativo do dispositivo gera um novo par de chaves no dispositivo e gera a chave pública. O aplicativo do dispositivo usa ECHO_SERVER_ROOT_CA e TRANSPORT_CLIENT_CERTIFICATE como certificado da CA raiz do servidor echo e do cliente ao estabelecer uma conexão TLS com o servidor echo. O IDT define esses parâmetros durante a execução da qualificação.

Gerenciamento de credenciais (chave de importação)

O aplicativo do dispositivo usa ECHO_SERVER_ROOT_CA, TRANSPORT_CLIENT_CERTIFICATE e TRANSPORT_CLIENT_PRIVATE_KEY em test_param_config.h como certificado da CA raiz do servidor echo, certificado de cliente e chave privada de cliente ao estabelecer uma conexão TLS com o servidor echo. O IDT define esses parâmetros durante a execução da qualificação.

Testes

Esta seção descreve como você pode testar localmente a interface de transporte com os testes de qualificação. Detalhes adicionais podem ser encontrados no arquivo README.md fornecido na seção transport_interface do FreeRTOS-Libraries-Integration-Tests no GitHub.

Como alternativa, você também pode usar o IDT para automatizar a execução. Consulte o AWS IoT Device Tester para o FreeRTOS no Guia do usuário do FreeRTOS para obter detalhes.

Habilitação do teste

Abra test_execution_config.h e defina TRANSPORT_INTERFACE_TEST_ENABLED como 1.

Configuração do servidor echo para testes

É necessário ter um servidor echo acessível a partir do dispositivo que executa os testes para fazer testes locais. O servidor echo deve oferecer suporte ao TLS se a implementação da interface de transporte oferecer suporte ao TLS. Se você ainda não tem um, o repositório GitHub Freertos-libraries-integration-tests tem uma implementação de servidor echo.

Configuração do projeto para teste

Em test_param_config.h, atualize ECHO_SERVER_ENDPOINT e ECHO_SERVER_PORT para a configuração do endpoint e do servidor na etapa anterior.

Credenciais de configuração (chave gerada no dispositivo)

  • Defina ECHO_SERVER_ROOT_CA como o certificado do servidor echo.

  • Defina FORCE_GENERATE_NEW_KEY_PAIR como 1 para gerar um par de chaves e obter a chave pública.

  • Defina FORCE_GENERATE_NEW_KEY_PAIR como 0 novamente após a geração da chave.

  • Use a chave pública e do servidor e o certificado para gerar o certificado do cliente.

  • Defina TRANSPORT_CLIENT_CERTIFICATE como o certificado de cliente gerado.

Credenciais de configuração (chave de importação)

  • Defina ECHO_SERVER_ROOT_CA como o certificado do servidor echo.

  • Defina TRANSPORT_CLIENT_CERTIFICATE como o certificado de cliente pré-gerado.

  • Defina TRANSPORT_CLIENT_PRIVATE_KEY como a chave privada pré-gerada do cliente.

Compilação e instalação do aplicativo

Compile e instale o aplicativo usando a cadeia de ferramentas de sua escolha. Quando runQualificationTest() for invocado, os testes da interface de transporte serão executados. Os resultados do teste são emitidos para a porta serial.

nota

Para qualificar oficialmente um dispositivo para o FreeRTOS, você deve validar o código-fonte transferido do dispositivo nos grupos de teste OTA PAL e OTA E2E com o AWS IoT Device Tester. Siga as instruções em Usar o AWS IoT Device Tester Device Tester para o FreeRTOS no Guia do usuário do FreeRTOS para configurar o AWS IoT Device Tester para validação de portabilidade. Para testar a portabilidade de uma biblioteca específica, o grupo de testes correto deve ser habilitado no arquivo device.json na pasta do AWS IoT Device Tester configs.