O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Ferramenta de provisionamento de fábrica OpenWeave

jinja-placeholder-0 .md "> Ver fonte no GitHub

A OpenWeave Factory Provisioning Tool fornece um meio conveniente de provisionar informações persistentes de configuração por dispositivo em dispositivos habilitados para Weave. A Ferramenta de Aprovisionamento de Fábrica destina-se a ser usada como parte de um processo da linha de fabricação que carimba dispositivos individuais com informações exclusivas de identidade e credencial antes do envio aos clientes. Também pode ser usado pelos desenvolvedores para personalizar o hardware de pré-produção usado durante o processo de desenvolvimento.

Teoria de Operação

O objetivo da Ferramenta de Aprovisionamento de Fábrica do OpenWeave é injetar informações de configuração selecionadas no armazenamento de configuração persistente de um dispositivo, onde elas podem ser coletadas e usadas em tempo de execução pelo firmware do dispositivo. A configuração persistente do dispositivo geralmente é 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 final de armazenamento 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 Factory Provisioning Tool é um trabalho projetado executado em uma máquina host conectada a um dispositivo de destino por meio de alguma forma de interface de depuração ou controle - por exemplo, uma porta JTAG ou SWD. A ferramenta funciona injetando informações de provisionamento na RAM do dispositivo em um formato especialmente codificado. O dispositivo é instruído a reiniciar, quando o código embutido no 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 injetado é incorporado à camada de dispositivo OpenWeave e pode ser ativado em qualquer plataforma suportada. 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 varrendo uma região específica da plataforma da RAM. 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, o que permite que sejam encontrados rapidamente durante o processo de verificação. 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 da RAM no qual injetar os dados de provisionamento com base na plataforma do dispositivo de destino. Esta opção pode ser substituída através 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. Mais tipicamente, os dados de provisionamento são gravados em um local de RAM alocado para outros fins, mas geralmente não são utilizados no início do processo de inicialização do dispositivo. As opções comuns são a parte superior da pilha inicial do sistema ou a extremidade mais distante de uma arena de heap.

A Factory Provisioning Tool conta com um conjunto de ferramentas de desenvolvimento externas para fazer interface com o dispositivo de destino. As ferramentas específicas empregadas dependem do tipo do dispositivo de destino. Atualmente, há duas interfaces de dispositivo:

  • 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 conta com a 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, 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 tecido
  • 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 ocorrer em pontos distintos do processo de fabricação. Além disso, é possível substituir valores provisionados anteriormente por novos valores em uma etapa subsequente de provisionamento.

Fontes de informações de provisionamento

As informações de provisionamento de dispositivos podem ser fornecidas à Factory Provisioning Tool das seguintes maneiras:

  • Argumentos de uma 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 aprovisionamento de dispositivo são especificadas diretamente na linha de comando da Ferramenta de Aprovisionamento de Fábrica do OpenWeave. Por exemplo:

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

Valores de dados binários, como o certificado Weave e a chave privada, podem ser especificados como cadeias de base 64 ou como os nomes de arquivos que contêm os dados desejados no formato bruto (binário).

Veja abaixo uma lista completa dos 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. As colunas deste arquivo devem corresponder 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 comandos. Por exemplo:

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

As seguintes colunas CSV são suportadas:

Nome Formato Descrição
Device_Id 16 dígitos hexadecimais ID do dispositivo de tecer. Deve estar presente.
Serial_Num corda Número de série do dispositivo.
Certificate string base-64 Certificado de dispositivo Weave atribuído pelo fabricante.
Private_Key string base-64 Chave privada do Weave atribuída pelo fabricante.
Pairing_Code corda Tecer código de emparelhamento.
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; nesse caso, o valor da linha de comando tem precedência sobre os do arquivo.

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

Servidor de provisionamento de ninho

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 no servidor de provisionamento.

O local da 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 ao provisionamento de fábrica do OpenWeave no firmware do dispositivo é controlado pela opção de configuração em tempo de compilação WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING . Esta opção está ativada por padrão. O recurso pode ser desativado, 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 esteja adequadamente desabilitada nos dispositivos de produção. Isso pode ser alcançado por meios de hardware (por exemplo, fundindo fusíveis no SoC) ou por software (por exemplo, por um carregador de inicialização seguro que bloqueia o acesso à depuração como parte do processo de inicialização).

Executando a ferramenta de provisionamento de fábrica

A OpenWeave Factory Provisioning Tool suporta as 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 detalhamento da saída. Use vários argumentos para aumentar a verbosidade.
--serial-num <string> Defina o número de série do dispositivo.
--dispositivo-ID <hex-digits> Defina a identificação do dispositivo atribuído pelo fabricante.
--device-cert <base-64> | <nome do arquivo> Defina o certificado do dispositivo Weave atribuído pelo fabricante.
--dispositivo-chave <base-64> | <nome do arquivo> Defina a chave privada do dispositivo Weave atribuída pelo fabricante.
--pairpair-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 <nome do caminho> Caminho para o comando JLink. O padrão é 'JLinkExe'.
--jlink-se SWD | JTAG Tipo de interface J-Link. O padrão é SWD.
--jlink-speed <integer> | 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 <nome do caminho> Nome do dispositivo da porta COM para ESP32. O padrão é / tty / USB0.
--speed <integer> Taxa de transmissão para porta COM. O padrão é 115200.
--prov-csv-file <nome do arquivo> Leia os dados de provisionamento de dispositivo de um arquivo CSV de provisionamento.
--prov-server <url> Leia os dados de provisionamento de dispositivo de um servidor de provisionamento.
- validação de servidor desativável 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 como 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 do 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