O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Ferramenta de provisionamento de fábrica OpenWeave

Ver fonte no GitHub

A OpenWeave Factory Provisioning Tool oferece um meio conveniente de provisionar informações de configuração persistentes por dispositivo em dispositivos habilitados para Weave. A ferramenta de provisionamento de fábrica deve ser usada como parte de um processo de linha de manufatura que marca dispositivos individuais com identidade exclusiva e informações de credencial antes do envio aos clientes. Também pode ser usado por desenvolvedores para personalizar o hardware de pré-produção usado durante o processo de desenvolvimento.

Teoria de Operação

O objetivo da OpenWeave Factory Provisioning Tool é injetar informações de configuração selecionadas no armazenamento de configuração persistente de um dispositivo, onde podem ser selecionadas e usadas em tempo de execução pelo firmware do dispositivo. A configuração persistente do dispositivo é normalmente armazenada no flash interno do dispositivo, embora os detalhes de exatamente como os dados são armazenados e em que formato variem de plataforma para plataforma. A própria Factory Provisioning Tool é independente do formato de armazenamento final e depende do código no firmware do dispositivo para gravar os dados da maneira correta. A interface do usuário da ferramenta também é amplamente independente do tipo de hardware que está sendo configurado, o que significa que processos de fabricação semelhantes podem ser empregados em linhas de produtos baseadas em diferentes plataformas de hardware.

A ferramenta de provisionamento de fábrica é projetada para funcionar em uma máquina host que está conectada a um dispositivo de destino por meio de alguma forma de depuração ou interface de controle - por exemplo, uma porta JTAG ou SWD. A ferramenta funciona injetando informações de provisionamento na RAM do dispositivo de uma forma especialmente codificada. O dispositivo é então instruído a reiniciar, momento em que o código integrado ao firmware do dispositivo localiza os dados codificados, valida sua integridade e grava os valores contidos no armazenamento persistente em um formato apropriado para a plataforma.

O código no dispositivo que detecta e processa os dados de provisionamento injetados é integrado ao OpenWeave Device Layer e pode ser ativado em qualquer plataforma compatível. Uma vez ativado, o código é executado automaticamente sempre que o dispositivo é inicializado, em um ponto no início do processo de inicialização do dispositivo. O código opera verificando uma região de RAM específica da plataforma. Em plataformas com montagens modestas de memória (por exemplo, <1M), a varredura abrange toda a RAM disponível.

Quando colocados na RAM, os dados de provisionamento são codificados com um prefixo facilmente identificável, que permite que sejam encontrados rapidamente durante o processo de varredura. Um valor de verificação de integridade com base em um hash criptográfico é usado para confirmar a validade dos dados antes do processamento.

Por padrão, a ferramenta de provisionamento seleciona o local de RAM no qual injetar os dados de provisionamento com base na plataforma do dispositivo de destino. Essa escolha pode ser substituída por meio de um argumento para a ferramenta. Em geral, não é necessário que o firmware do dispositivo reserve um local de RAM especificamente para receber dados de provisionamento. Normalmente, os dados de provisionamento são gravados em um local de RAM alocado para outros fins, mas geralmente não são usados ​​no início do processo de inicialização do dispositivo. As escolhas comuns são o topo da pilha inicial do sistema ou a extremidade de uma arena de heap.

A ferramenta de provisionamento de fábrica depende de um conjunto de ferramentas de desenvolvimento externas para fazer a interface com o dispositivo de destino. As ferramentas específicas empregadas dependem do tipo de dispositivo alvo. Duas interfaces de dispositivo são atualmente suportadas:

  • uma sonda de depuração SEGGER J-Link conectada à porta JTAG ou SWD de um dispositivo
  • uma porta serial USB conectada a um Espressif ESP32

A interface J-Link depende da ferramenta SEGGER J-Link Commander (JLinkExe), que deve ser instalada separadamente na máquina host.

A interface do ESP32 depende do comando Espressif esptool.py, que é fornecido como parte do ESP-IDF SDK do Espressif.

Tipos de informações que podem ser provisionadas

A OpenWeave Factory Provisioning Tool é capaz de provisionar os seguintes tipos de informações:

  • Número de série do dispositivo
  • ID do dispositivo Weave atribuído pelo fabricante
  • Certificado Weave atribuído pelo fabricante e chave privada
  • Código de emparelhamento de trama
  • Número de revisão do produto
  • Data de fabricação

Embora geralmente um dispositivo precise de todas as informações acima para funcionar corretamente, não é necessário fornecer todas as informações ao mesmo tempo. Assim, o provisionamento de diferentes tipos de informações pode acontecer em pontos distintos do processo de fabricação. Além disso, é possível substituir os valores provisionados anteriormente por novos valores em uma etapa de provisionamento subsequente.

Fontes de informações de provisionamento

As informações de provisionamento de dispositivo podem ser fornecidas à Ferramenta de Provisionamento de Fábrica das seguintes maneiras:

  • Argumentos de linha de comando
  • Usando um arquivo CSV de provisionamento
  • Buscando valores de um servidor de provisionamento Nest

Linha de comando

Na forma mais simples, as informações de provisionamento do dispositivo são especificadas diretamente na linha de comando para a OpenWeave Factory Provisioning Tool. Por exemplo:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --pairing-code NESTUS --mfg-date 2019/04/01

Os valores de dados binários, como o certificado Weave e a chave privada, podem ser especificados como strings de base 64 ou como nomes de arquivos contendo os dados desejados em formato bruto (binário).

Veja abaixo uma lista completa de argumentos de linha de comando disponíveis.

Arquivo CSV de provisionamento

Para acomodar o provisionamento em massa de dispositivos, a Factory Provisioning Tool também pode ler dados de provisionamento de um arquivo de dados de provisionamento formatado em CSV. Espera-se que as colunas desse arquivo correspondam a tipos de dados de provisionamento específicos - ou seja, Serial_Num , Certificate , Private_Key , etc. As linhas no arquivo fornecem valores individuais para dispositivos específicos, indexados pelo id do dispositivo Weave ( Device_Id ). O id do dispositivo específico a ser provisionado deve ser especificado na linha de comando. Por exemplo:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-csv-file ./dev-provisioning-data.csv

As seguintes colunas CSV são compatíveis:

Nome Formato Descrição
Device_Id 16 dígitos hexadecimais ID do dispositivo Weave. Deve estar presente.
Serial_Num corda Número de série do dispositivo.
Certificate string de base 64 Certificado de dispositivo Weave atribuído pelo fabricante.
Private_Key string de base 64 Chave privada Weave atribuída pelo fabricante.
Pairing_Code corda Código de emparelhamento do Weave.
Product_Rev inteiro Número de revisão do produto.
Mfg_Date AAAA / MM / DD Data de fabricação do dispositivo.

As colunas podem aparecer no arquivo CSV em qualquer ordem. Todas as colunas são opcionais, com exceção de Device_Id . Quaisquer valores não presentes no arquivo CSV simplesmente não são provisionados no dispositivo.

O usuário pode especificar valores de provisionamento individuais na linha de comando, além do arquivo CSV, caso em que o valor da linha de comando tem precedência sobre os do arquivo.

O suporte ao formato de arquivo CSV pela Factory Provisioning Tool é compatível com a saída do comando gen-provisioning-data da ferramenta de weave .

Servidor de provisionamento Nest

A Factory Provisioning Tool suporta a busca de informações de provisionamento selecionadas de um servidor de provisionamento Nest usando um protocolo baseado em HTTPS. O protocolo do servidor de provisionamento pode ser usado para buscar o certificado do dispositivo Weave atribuído pelo fabricante, a chave privada correspondente e o código de emparelhamento do Weave do servidor de provisionamento.

O local de rede do servidor de provisionamento é especificado fornecendo um URL base na linha de comando da ferramenta de provisionamento. As informações de provisionamento desejadas são selecionadas especificando o ID do dispositivo Weave na linha de comando. Por exemplo:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-server https://192.168.172.2:8000/

O usuário pode especificar valores de provisionamento individuais na linha de comando, além da URL do servidor de provisionamento. Nesse caso, os valores fornecidos na linha de comando têm precedência sobre os valores retornados pelo servidor.

Ativando / desativando o suporte de provisionamento de fábrica

O suporte para o provisionamento de fábrica do OpenWeave no firmware do dispositivo é controlado pela opção de configuração de tempo de compilação WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING . Esta opção está habilitada por padrão. O recurso pode ser desabilitado substituindo a opção no arquivo WeaveProjectConfig.h do aplicativo. Por exemplo:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Em geral, é seguro habilitar o provisionamento de fábrica no firmware do dispositivo de produção, desde que a interface de depuração do dispositivo seja desabilitada apropriadamente nos dispositivos de produção. Isso pode ser obtido por meio de hardware (por exemplo, queimando fusíveis no SoC) ou por software (por exemplo, por meio de um carregador de boot seguro que bloqueia o acesso de depuração como parte do processo de boot).

Executando a Ferramenta de Provisionamento de Fábrica

A OpenWeave Factory Provisioning Tool oferece suporte às seguintes opções de linha de comando:

Opção Descrição
--target <string> Tipo de dispositivo de destino. As opções são: nrf52840 , esp32
--load-addr <hex-digits> Endereço na memória do dispositivo no qual os dados de provisionamento serão gravados.
--verbose, -v Ajuste o nível de verbosidade da saída. Use vários argumentos para aumentar a verbosidade.
--serial-num <string> Defina o número de série do dispositivo.
--device-id <hex-digits> Defina o ID do dispositivo atribuído pelo fabricante.
--device-cert <base-64> | <file-name> Defina o certificado do dispositivo Weave atribuído pelo fabricante.
--device-key <base-64> | <file-name> Defina a chave privada do dispositivo Weave atribuída pelo fabricante.
--pairing-code <string> Defina o código de emparelhamento do dispositivo.
--product-rev <integer> Defina a revisão do produto para o dispositivo.
--mfg-date <AAAA / MM / DD> | hoje | agora Defina a data de fabricação do dispositivo.
--jlink-cmd <path-name> Caminho para o comando JLink. O padrão é 'JLinkExe'.
--jlink-if SWD | JTAG Tipo de interface J-Link. O padrão é SWD.
--jlink-speed <inteiro> | adaptativo | auto Velocidade da interface J-Link.
--jlink-sn <string> Número de série da sonda J-Link.
--esptool-cmd <path-name> Caminho para o comando esptool. O padrão é 'esptool.py'.
--port <path-name> Nome do dispositivo da porta COM para ESP32. O padrão é / tty / USB0.
--speed <inteiro> Taxa de transmissão para porta COM. O padrão é 115200.
--prov-csv-file <file-name> Leia os dados de provisionamento do dispositivo de um arquivo CSV de provisionamento.
--prov-server <url> Leia os dados de provisionamento do dispositivo de um servidor de provisionamento.
--disable-server-validation Ao usar HTTPS, desative a validação do certificado apresentado pelo servidor de provisionamento.

Exemplos

O comando a seguir define a id do dispositivo, número de série, revisão do produto e código de emparelhamento para valores específicos. A data de fabricação é definida para a data atual. E o certificado do dispositivo e a chave privada são definidos para testar os valores fornecidos em um arquivo CSV fornecido com o repositório de código openweave-core fonte openweave-core .

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000042 \
    --serial-num JAYS_DEVICE_42 --product-rev 1 --pairing-code NESTUS --mfg-date today \
    --prov-csv-file ~/projects/openweave-core/certs/development/device/test-dev-provisioning-data.csv