En Google, luchamos por la equidad racial de la comunidad negra. Más información

Herramienta de aprovisionamiento de fábrica OpenWeave

Ver fuente en GitHub

La herramienta de aprovisionamiento de OpenWeave Factory proporciona un medio conveniente para aprovisionar información de configuración persistente por dispositivo en dispositivos habilitados para Weave. La herramienta de aprovisionamiento de fábrica está destinada a ser utilizada como parte de un proceso de línea de fabricación que estampa los dispositivos individuales con una identidad única y una información de credenciales antes del envío a los clientes. Los desarrolladores también pueden utilizarlo para personalizar el hardware de preproducción utilizado durante el proceso de desarrollo.

Teoría de operación

El objetivo de OpenWeave Factory Provisioning Tool es inyectar información de configuración seleccionada en el almacén de configuración persistente de un dispositivo, donde el firmware del dispositivo puede recogerla y usarla en tiempo de ejecución. La configuración persistente del dispositivo generalmente se almacena dentro de la memoria flash interna del dispositivo, aunque los detalles de cómo se almacenan exactamente 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 del firmware del dispositivo para escribir los datos de la manera correcta. La interfaz de usuario de la herramienta también es en gran medida independiente del tipo de hardware que se está configurando, lo que significa que se pueden emplear procesos de fabricación similares en todas las líneas de productos que se basan en diferentes plataformas de hardware.

Factory Provisioning Tool está diseñado para funcionar en una máquina host que está conectada a un dispositivo de destino a través de algún tipo de interfaz de control o depuración, por ejemplo, un puerto JTAG o SWD. La herramienta funciona inyectando información de aprovisionamiento en la RAM del dispositivo en una forma especialmente codificada. Luego, se indica al dispositivo que se reinicie, momento en el que el código integrado en el firmware del dispositivo ubica 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 del dispositivo que detecta y procesa los datos de aprovisionamiento inyectados está integrado en la capa de dispositivo OpenWeave y se puede habilitar en cualquier plataforma compatible. 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 escaneando una región de RAM específica de la plataforma. En plataformas con cantidades modestas de memoria (por ejemplo, <1 M), el análisis abarca toda la RAM disponible.

Cuando se colocan en la RAM, los datos de aprovisionamiento se codifican con un prefijo fácilmente identificable, que permite encontrarlos rápidamente durante el proceso de escaneo. Se utiliza un valor de verificación de integridad basado en un hash criptográfico para confirmar la validez de los datos antes del procesamiento.

De forma predeterminada, la herramienta de aprovisionamiento selecciona la ubicación de la RAM en la que inyectar los datos de aprovisionamiento según la plataforma del dispositivo de destino. Esta elección se puede anular mediante un argumento a la herramienta. En general, no es necesario que el firmware del dispositivo reserve una ubicación de RAM específicamente para recibir datos de aprovisionamiento. Más típicamente, los datos de aprovisionamiento se escriben en una ubicación de RAM que se asigna para otros fines, pero generalmente no se usa al principio del proceso de inicio del dispositivo. Las opciones comunes son la parte superior de la pila del sistema inicial o el extremo más alejado de una arena de pila.

Factory Provisioning Tool se basa en un conjunto de herramientas de desarrollo externas para interactuar con el dispositivo de destino. Las herramientas particulares empleadas dependen del tipo de dispositivo de destino. Actualmente se admiten dos interfaces de dispositivo:

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

La interfaz J-Link se basa en la herramienta SEGGER J-Link Commander (JLinkExe), que debe instalarse 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 suministrar

La herramienta de aprovisionamiento de OpenWeave Factory es capaz de aprovisionar los siguientes tipos de información:

  • Número de serie del dispositivo
  • ID de dispositivo Weave asignado por el fabricante
  • Certificado de tejido asignado por el fabricante y clave privada
  • Código de emparejamiento de tejido
  • Número de revisión del producto
  • Fecha de fabricación

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

Fuentes de información de aprovisionamiento

La información de aprovisionamiento de dispositivos se puede proporcionar a Factory Provisioning Tool de las siguientes maneras:

  • Argumentos de una línea de comando
  • Usar un archivo CSV de aprovisionamiento
  • Obteniendo valores de un servidor de aprovisionamiento de Nest

Línea de comando

En la forma más simple, la información de aprovisionamiento de dispositivos se especifica directamente en la línea de comandos de la herramienta de aprovisionamiento de OpenWeave Factory. Por ejemplo:

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

Los valores de datos binarios, como el certificado Weave y la clave privada, se pueden especificar como cadenas de base 64 o como nombres de archivos que contienen los datos deseados en forma cruda (binaria).

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

Archivo CSV de aprovisionamiento

Para adaptarse al aprovisionamiento masivo de dispositivos, Factory Provisioning Tool también puede leer datos de aprovisionamiento de un archivo de datos de aprovisionamiento con formato CSV. 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 ). La identificación del dispositivo específico que se va a aprovisionar debe especificarse en la línea de comando. Por ejemplo:

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

Se admiten las siguientes columnas CSV:

Nombre Formato Descripción
Device_Id 16 dígitos hexadecimales ID del dispositivo de tejido. Debe estar presente.
Serial_Num cuerda Número de serie del dispositivo.
Certificate cuerda base 64 Certificado de dispositivo Weave asignado por el fabricante.
Private_Key cuerda base 64 Clave privada Weave asignada por el fabricante.
Pairing_Code cuerda Código de emparejamiento de tejido.
Product_Rev entero Número de revisión del producto.
Mfg_Date AAAA / MM / DD Fecha de fabricación del dispositivo.

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 valores de aprovisionamiento individuales en la línea de comando además del archivo CSV, en cuyo caso el valor de la línea de comando prevalece sobre los 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 de Nest

La herramienta de aprovisionamiento de fábrica admite la obtención de información de aprovisionamiento seleccionada de un servidor de aprovisionamiento de Nest mediante un protocolo basado en HTTPS. El protocolo del servidor de aprovisionamiento se puede utilizar para obtener el certificado del dispositivo Weave asignado por el fabricante, la clave privada correspondiente y el código de emparejamiento de Weave del servidor de aprovisionamiento.

La ubicación de red del servidor de aprovisionamiento se especifica proporcionando una URL base en la línea de comandos de la herramienta de aprovisionamiento. La información de aprovisionamiento deseada se selecciona especificando el ID del dispositivo Weave en la línea de comando. Por ejemplo:

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

El usuario puede especificar valores de aprovisionamiento individuales en la línea de comando además de la URL del servidor de aprovisionamiento. En este caso, los valores dados en la línea de comando tienen 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 a través de medios de hardware (por ejemplo, soplando fusibles en el SoC) o en software (por ejemplo, mediante un cargador de arranque seguro que bloquea el acceso de depuración como parte del proceso de arranque).

Ejecución de la herramienta de aprovisionamiento de fábrica

La herramienta de aprovisionamiento de OpenWeave Factory admite las siguientes opciones de línea de comando:

Opción Descripción
--target <string> Tipo de dispositivo de destino. Las opciones son: nrf52840, esp32
--load-addr <hex-dígitos> Dirección en la memoria del dispositivo en la que se escribirán los datos de aprovisionamiento.
--verbose, -v Ajuste el nivel de verbosidad de salida. Utilice varios argumentos para aumentar la verbosidad.
--serial-num <string> Configure el número de serie del dispositivo.
--device-id <hex-dígitos> Establezca la identificación del dispositivo asignada por el fabricante.
--device-cert <base-64> | <nombre-archivo> Configure el certificado de dispositivo Weave asignado por el fabricante.
--device tecla <base-64> | <nombre-archivo> Configure la clave privada del dispositivo Weave asignada por el fabricante.
--pairing de código <string> Configure el código de emparejamiento del dispositivo.
--product-rev <entero> Configure la revisión del producto para el dispositivo.
--mfg actualizados <AAAA / MM / DD> | hoy | ahora Configure la fecha de fabricación del dispositivo.
--jlink-cmd <nombre-ruta> Ruta al comando JLink. El valor predeterminado es 'JLinkExe'.
--jlink -si SWD | JTAG Tipo de interfaz J-Link. Por defecto es SWD.
--jlink velocidad <entero> | adaptativo | auto Velocidad de la interfaz J-Link.
--jlink-sn <string> Número de serie de la sonda J-Link.
--esptool-cmd <nombre-ruta> Ruta al comando esptool. El valor predeterminado es 'esptool.py'.
--port <nombre-ruta> Nombre del dispositivo del puerto COM para ESP32. El valor predeterminado es / tty / USB0.
--speed <entero> Tasa de baudios para el puerto COM. El valor predeterminado es 115200.
--prov-CSV-archivo <nombre de archivo> Leer datos de aprovisionamiento de dispositivos desde un archivo CSV de aprovisionamiento.
--prov-servidor <url> Leer datos de aprovisionamiento de dispositivos desde un servidor de aprovisionamiento.
--disable-server-validation Cuando utilice HTTPS, desactive la validación del certificado presentado por el servidor de aprovisionamiento.

Ejemplos de

El siguiente comando establece la identificación del dispositivo, el número de serie, la revisión del producto y el código de emparejamiento en valores específicos. La fecha de fabricación se establece en 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