Google se compromete a avanzar en la equidad racial para las comunidades negras. Ver cómo.
Esta página se ha traducido con Cloud Translation API.
Switch to English

Herramienta de aprovisionamiento de fábrica OpenWeave

Jinja-marcador de posición-0 .md "> Ver código fuente en GitHub

La herramienta de Provisioning OpenWeave Factory proporciona un medio conveniente para el aprovisionamiento de información persistente, por dispositivo de configuración en los dispositivos habilitados para la armadura. La herramienta de aprovisionamiento de fábrica está destinado a ser utilizado como parte de un proceso de fabricación que la línea sellos dispositivos individuales con identidad única y la información de credenciales antes de su envío a los clientes. También puede ser utilizado por los desarrolladores para personalizar hardware en la pre-producción utilizado durante el proceso de desarrollo.

Teoría de operación

El objetivo de la herramienta de aprovisionamiento OpenWeave fábrica es inyectar seleccionar la información de configuración en un almacén de configuración persistente de un dispositivo, donde puede ser recogido y utilizado en tiempo de ejecución por el firmware del dispositivo. configuración del dispositivo persistente se almacena típicamente dentro de flash interna del dispositivo, aunque los detalles de exactamente cómo se almacenan los datos y en qué formato, varían de una plataforma a otra. La herramienta de aprovisionamiento de fábrica en sí es independiente del formato de almacenamiento final, y se basa en el código en el firmware del dispositivo para escribir los datos en la forma correcta. interfaz de usuario de la herramienta también es en gran medida independiente del tipo de hardware estando configurado, lo que significa que los procesos de fabricación similares pueden emplearse a través de líneas de productos que se basan en diferentes plataformas de hardware.

La herramienta de aprovisionamiento de fábrica está diseñado recorrido de trabajo en una máquina host que está conectado a un dispositivo de destino a través de alguna forma de depuración o de control de interfaz - por ejemplo, un puerto JTAG o SWD. La herramienta funciona mediante la inyección de información de aprovisionamiento en la RAM del dispositivo en un formulario especialmente codificada. El dispositivo está entonces instrucciones para reiniciar, en el que el punto de código incorporado para el firmware del dispositivo localiza los datos codificados, valida su integridad, y escribe los valores contenidos en el almacenamiento persistente en un formato apropiado para la plataforma.

El código en el dispositivo que detecta y procesa los datos de aprovisionamiento inyectados está incorporado a la capa de dispositivos OpenWeave, y se pueden habilitar en cualquier plataforma soportada. Una vez habilitado, el código se ejecuta automáticamente cada vez que se inicia el dispositivo, en un punto temprano en el proceso de inicialización del dispositivo. El código funciona mediante el escaneo de una región específica de la plataforma de RAM. En plataformas con modestos montes de la memoria (por ejemplo, <1 M), las engloba todas escaneo de memoria RAM disponible.

Cuando se coloca en la memoria RAM, los datos de aprovisionamiento está codificado con un prefijo fácilmente identificable, lo que le permite encontrar rápidamente durante el proceso de exploración. Un valor de comprobación de integridad basada en un hash criptográfico se utiliza para confirmar la validez de los datos antes de procesar.

Por defecto, los selecciona herramienta de aprovisionamiento la posición de la RAM en la que para inyectar la facilitación de datos basados ​​en la plataforma dispositivo de destino. Esta elección puede ser anulado a través de un argumento a la herramienta. En general, no se requiere que el firmware del dispositivo se reserva un lugar de memoria RAM, específicamente para recibir los datos de aprovisionamiento. Más típicamente, los datos de aprovisionamiento se escribe en una ubicación de memoria RAM que se asigna para otros fines, pero en general no utilizada al principio del proceso de arranque del dispositivo. opciones comunes son la parte superior de la pila inicial del sistema, o el extremo de una arena montón.

La herramienta de aprovisionamiento de fábrica se basa en un conjunto de herramientas de desarrollo externos para conectar al dispositivo de destino. Las herramientas particulares empleadas dependen del tipo de dispositivo de destino. Dos interfaces del dispositivo están soportadas actualmente:

  • una sonda de depuración SEGGER J-Link conectado al puerto JTAG o SWD de un dispositivo
  • un puerto serie USB conectada a una Espressif ESP32

La interfaz de J-Link se basa en la herramienta SEGGER J-Link Commander (JLinkExe), que se debe instalar por separado en la máquina host.

La interfaz ESP32 se basa en el comando Espressif esptool.py, que se proporciona como parte del ESP-IDF SDK de Espressif.

Tipos de información que se pueden aprovisionar

La herramienta de aprovisionamiento OpenWeave fábrica, que puede suministrar los siguientes tipos de información:

  • número de serie del dispositivo
  • asignado por el fabricante de la armadura Identificación del dispositivo
  • certificado de la armadura asignado por el fabricante y la clave privada
  • código de emparejamiento de la armadura
  • número de revisión de producto
  • Fecha de fabricación

Aunque por lo general un dispositivo necesitará toda la información anterior para funcionar correctamente, no es necesario para el suministro de toda la información al mismo tiempo. Por lo tanto, el aprovisionamiento de diferentes tipos de información puede ocurrir en puntos distintos en el proceso de fabricación. Además, es posible sustituir los valores previamente provisionados con nuevos valores en un paso posterior aprovisionamiento.

Las fuentes de información de aprovisionamiento

Dispositivo de información de aprovisionamiento puede ser suministrada a la herramienta de aprovisionamiento de fábrica en las maneras del siguiente:

  • A los argumentos de línea de comandos
  • El uso de un archivo CSV de aprovisionamiento
  • Por ir a buscar los valores de un servidor de aprovisionamiento Nido

Línea de comando

En la forma más simple, la información del dispositivo de aprovisionamiento se especifica directamente en la línea de comandos para la herramienta de aprovisionamiento OpenWeave fábrica. Por ejemplo:

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

valores de datos binarios, como el certificado de la armadura y la clave privada, se pueden especificar ya sea como base-64 cuerdas, o como los nombres de los archivos que contienen los datos deseados en forma cruda (binario).

Vea a continuación una lista completa de los argumentos de línea de comandos disponibles.

archivo de aprovisionamiento CSV

Para dar cabida a mayor aprovisionamiento de dispositivos, la herramienta de aprovisionamiento de fábrica también puede leer el aprovisionamiento de datos de un archivo de datos con formato CSV aprovisionamiento. Las columnas de este archivo se espera que corresponden a los tipos de datos de aprovisionamiento específicos - es decir, Serial_Num , Certificate , Private_Key , etc. filas en el archivo dan valores individuales para dispositivos específicos, indexadas por la armadura de ID de dispositivo ( Device_Id ). El id del dispositivo específico que sea el aprovisionamiento se debe especificar en la línea de comandos. Por ejemplo:

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

Las siguientes columnas CSV son compatibles:

Nombre Formato Descripción
Device_Id 16 dígitos hexadecimales Identificación del dispositivo de la armadura. Debe estar presente.
Serial_Num cuerda número de serie de dispositivos.
Certificate base-64 string Fabricante-asignado certificado de dispositivo de la armadura.
Private_Key base-64 string Fabricante-asignado armadura de clave privada.
Pairing_Code cuerda código de emparejamiento de la armadura.
Product_Rev entero Número de revisión del producto.
Mfg_Date AAAA / MM / DD Dispositivo fecha de fabricación.

Las columnas pueden aparecer en el archivo CSV en cualquier orden. Todas las columnas son opcionales, con la excepción de Device_Id . Cualquier valor que no están presentes en el archivo CSV simplemente no se aprovisionan en el dispositivo.

El usuario puede especificar los valores de aprovisionamiento individuales en la línea de comandos, además del archivo CSV, en cuyo caso el valor de línea de comandos pueden tener prioridad sobre las del archivo.

El formato de archivo CSV apoyo por la herramienta de aprovisionamiento de fábrica es compatible con la salida de la weave de herramienta de gen-provisioning-data de comandos.

servidor de aprovisionamiento nido

La herramienta de aprovisionamiento de fábrica compatible con ir a buscar información de selección de aprovisionamiento desde un servidor de la jerarquía de aprovisionamiento por medio de un protocolo HTTPS basada. El protocolo de servidor de aprovisionamiento se puede utilizar para obtener el certificado asignado por el fabricante del dispositivo de la armadura, la clave privada correspondiente, y el código de emparejamiento de la armadura del servidor de aprovisionamiento.

La ubicación de red del servidor de suministro se especifica mediante el suministro de una URL base en la línea de comandos herramienta de aprovisionamiento. La información de aprovisionamiento deseado se selecciona especificar el ID del dispositivo de la armadura en la línea de comandos. Por ejemplo:

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

El usuario puede especificar los valores de aprovisionamiento individuales en la línea de comandos, además de la dirección URL del servidor de aprovisionamiento. En este caso, los valores dados en la línea de comandos pueden tener prioridad sobre los valores devueltos por el servidor.

Habilitar / deshabilitar el soporte de aprovisionamiento de fábrica

El apoyo a la fábrica OpenWeave aprovisionamiento en el firmware del dispositivo es controlado por el WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING opción de configuración en tiempo de compilación. Esta opción está activada por defecto. La función puede desactivarse anulando la opción en la aplicación de WeaveProjectConfig.h archivo. Por ejemplo:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

En general, es segura para permitir el aprovisionamiento de fábrica en el dispositivo de producción proporciona el firmware que la interfaz de depuración dispositivo está desactivado correctamente en dispositivos de producción. Esto se puede lograr ya sea a través de medios de hardware (por ejemplo, mediante soplado fusibles en el SoC), o en software (por ejemplo, a través de un cargador de arranque seguro que bloquea el acceso de depuración como parte del proceso de arranque).

Ejecutar la herramienta de aprovisionamiento de fábrica

La herramienta de aprovisionamiento OpenWeave fábrica admite las siguientes opciones de línea de comandos:

Opción Descripción
--target <string> Target tipo de dispositivo. Las opciones son: nrf52840, esp32
--load-addr <hex-dígitos> Dirección en la memoria del dispositivo en el que se escribirán los datos de aprovisionamiento.
--verbose, -v Ajuste el nivel de verbosidad de salida. El uso de múltiples argumentos para ofrecer más información.
--serial-num <string> Establecer el número de serie del dispositivo.
--device-id <hex-dígitos> Ajuste el fabricante asignado Identificación del dispositivo.
--device-cert <base-64> | <file-name> Establecer el certificado del dispositivo de la armadura de fabricante asignado.
--device tecla <base-64> | <file-name> Establecer la clave privada dispositivo de la armadura del fabricante asignado.
--pairing de código <string> Ajuste el código de emparejamiento de dispositivos.
--product-rev <entero> Establecer la revisión del producto para el dispositivo.
--mfg actualizados <AAAA / MM / DD> | hoy | ahora Establecer la fecha de fabricación del dispositivo.
--jlink-cmd <nombre-ruta> Ruta al comando JLINK. Por defecto es 'JLinkExe'.
--jlink -si SWD | JTAG J-Link tipo de interfaz. Por defecto es SWD.
--jlink velocidad <entero> | adaptativo | auto J-Link velocidad de la interfaz.
--jlink-sn <string> J-Link sonda número de serie.
--esptool-cmd <nombre-ruta> Ruta al comando esptool. Por defecto es 'esptool.py'.
--port <nombre-ruta> Nombre del dispositivo de puerto COM para ESP32. Por defecto es / TTY / USB0.
--speed <entero> velocidad de transmisión para el puerto COM. Por defecto es 115200.
--prov-CSV-archivo <nombre de archivo> Leer dispositivo de aprovisionamiento de datos de un archivo CSV de aprovisionamiento.
--prov-servidor <url> Leer dispositivo de aprovisionamiento de datos de un servidor de aprovisionamiento.
--disable-servidor de validación Cuando se utiliza HTTPS, deshabilitar la validación del certificado presentado por el servidor de aprovisionamiento.

Ejemplos

El siguiente comando establece el ID de dispositivo, número de serie, la revisión del producto, y el código de emparejamiento a valores específicos. La fecha de fabricación se ajusta a la fecha actual. Y el certificado de dispositivo y la clave privada se establecen en valores de ensayo que figuran en un archivo CSV se suministra con el openweave-core repositorio de código fuente.

 ./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