En Google, luchamos por la equidad racial de la comunidad negra. Más información
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

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 marca 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ñada 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 puede habilitarse 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 escaneo abarca toda la RAM disponible.

Cuando se colocan en la RAM, los datos de aprovisionamiento se codifican con un prefijo fácilmente identificable, lo 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 RAM en la que inyectar los datos de aprovisionamiento en función de 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 utilizan 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 SDK ESP-IDF 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 valores nuevos 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 comando 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.

Aprovisionamiento de archivo CSV

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. Se espera que las columnas de este archivo correspondan a tipos de datos de aprovisionamiento específicos, es decir, Serial_Num , Certificate , Private_Key , etc. Las filas del archivo dan valores individuales para dispositivos específicos, indexados por el ID de dispositivo Weave ( 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 de 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é presente en el archivo CSV simplemente no se proporciona 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 compatible con Factory Provisioning Tool es compatible con la salida del comando gen-provisioning-data de la herramienta de weave .

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 soporte para el aprovisionamiento de fábrica de OpenWeave en el firmware del dispositivo está controlado por la opción de configuración en tiempo de compilación WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING . Esta opción está habilitada de forma predeterminada. La función se puede desactivar anulando la opción en el archivo WeaveProjectConfig.h la aplicación. Por ejemplo:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

En general, es seguro habilitar el aprovisionamiento de fábrica en el firmware del dispositivo de producción siempre que la interfaz de depuración del dispositivo esté adecuadamente deshabilitada en los 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, a través de 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 <cadena> Tipo de dispositivo de destino. Las opciones son: nrf52840 , esp32
--load-addr <dígitos-hexagonales> 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 <cadena> Configure el número de serie del dispositivo.
--device-id <dígitos-hexagonales> 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-key <base-64> | <nombre-archivo> Configure la clave privada del dispositivo Weave asignada por el fabricante.
--pairing-code <cadena> Configure el código de emparejamiento del dispositivo.
--product-rev <integer> Configure la revisión del producto para el dispositivo.
--mfg-date <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-if SWD | JTAG Tipo de interfaz J-Link. Por defecto es SWD.
--jlink-speed <integer> | adaptativo | auto Velocidad de la interfaz J-Link.
--jlink-sn <cadena> 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 <integer> Tasa de baudios para el puerto COM. El valor predeterminado es 115200.
--prov-csv-file <nombre de archivo> Leer datos de aprovisionamiento de dispositivos desde un archivo CSV de aprovisionamiento.
--prov-server <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

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 del dispositivo y la clave privada se configuran para probar los valores proporcionados en un archivo CSV suministrado con el repositorio de origen de 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