Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Herramienta de aprovisionamiento de fábrica de OpenWeave

jinja-placeholder-0 .md "> Ver código fuente en GitHub

La herramienta de aprovisionamiento de fábrica de OpenWeave 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 usarse como parte de un proceso de línea de fabricación que sella dispositivos individuales con identidad única e información de credenciales antes del envío a los clientes. Los desarrolladores también pueden usarlo 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 recogerlo y utilizarlo 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 configura, 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 ejecutarse en una máquina host que está conectada a un dispositivo de destino a través de alguna forma de interfaz de depuración o control, 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 le indica al dispositivo que se reinicie, en cuyo momento 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 en el 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 opera escaneando una región de RAM específica de la plataforma. En plataformas con montajes modestos de memoria (por ejemplo, <1M), 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, 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 se inyectan los datos de aprovisionamiento en función de la plataforma del dispositivo de destino. Esta elección se puede anular mediante un argumento para la herramienta. En general, no se requiere que el firmware del dispositivo reserve una ubicación RAM específicamente para recibir datos de aprovisionamiento. Más típicamente, los datos de aprovisionamiento se escriben en una ubicación RAM que se asigna para otros fines, pero generalmente no se utilizan al principio del proceso de arranque del dispositivo. Las opciones comunes son la parte superior de la pila inicial del sistema o el extremo más alejado de una arena de montón.

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 puede aprovisionar

OpenWeave Factory Provisioning Tool es capaz de aprovisionar los siguientes tipos de información:

  • Número de serie del dispositivo
  • Id. De dispositivo de tejido 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 aprovisionamiento de diferentes tipos de información puede ocurrir en puntos distintos 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 suministrar a Factory Provisioning Tool de las siguientes maneras:

  • Una línea de comando argumentos
  • Usar un archivo CSV de aprovisionamiento
  • Al buscar valores de un servidor de suministro de Nest

Línea de comando

En la forma más simple, la información de aprovisionamiento del dispositivo se especifica directamente en la línea de comando a la herramienta de aprovisionamiento de fábrica de OpenWeave. 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 los nombres de archivos que contienen los datos deseados en forma sin formato (binario).

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

Archivo CSV de aprovisionamiento

Para acomodar el 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 en el archivo proporcionan valores individuales para dispositivos específicos, indexados por la identificación del dispositivo Weave ( Device_Id ). La identificación del dispositivo específico que se debe 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 Tejer identificación del dispositivo. Debe estar presente.
Serial_Num cuerda Número de serie del dispositivo.
Certificate cadena base-64 Certificado de dispositivo de tejido asignado por el fabricante.
Private_Key cadena base-64 Clave privada de Weave asignada por el fabricante.
Pairing_Code cuerda Tejer código de emparejamiento.
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 . Los valores 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 tiene prioridad sobre los del archivo.

El soporte de formato de archivo CSV de 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 utilizando 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 Weave del servidor de aprovisionamiento.

La ubicación de red del servidor de aprovisionamiento se especifica al proporcionar una URL base en la línea de comando de la herramienta de aprovisionamiento. La información de aprovisionamiento deseada se selecciona especificando la identificación 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

La opción de configuración en tiempo de compilación WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING el soporte para el aprovisionamiento de fábrica de OpenWeave en el firmware del dispositivo. Esta opción está habilitada por defecto. La característica 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é desactivada adecuadamente en los dispositivos de producción. Esto se puede lograr a través de medios de hardware (por ejemplo, quemando 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

OpenWeave Factory Provisioning Tool admite las siguientes opciones de línea de comandos:

Opción Descripción
--target <cadena> Tipo de dispositivo de destino. Las opciones son: nrf52840 , esp32
--load-addr <hex-digits> 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. Use múltiples argumentos para aumentar la verbosidad.
--serial-num <cadena> Establezca el número de serie del dispositivo.
--device-id <hex-digits> Establezca la identificación del dispositivo asignado por el fabricante.
--device-cert <base-64> | <nombre de archivo> Establezca el certificado del dispositivo Weave asignado por el fabricante.
--device-key <base-64> | <nombre de archivo> Establezca la clave privada del dispositivo Weave asignado por el fabricante.
--pairing-code <cadena> Establece el código de emparejamiento del dispositivo.
--product-rev <integer> Establezca la revisión del producto para el dispositivo.
--mfg-date <AAAA / MM / DD> | hoy | ahora Establezca la fecha de fabricación del dispositivo.
--jlink-cmd <nombre de ruta> Ruta al comando JLink. El valor predeterminado es 'JLinkExe'.
--jlink-if SWD | JTAG Tipo de interfaz J-Link. El valor predeterminado es SWD.
--jlink-speed <integer> | adaptativo | auto Velocidad de interfaz J-Link.
--jlink-sn <cadena> Número de serie de la sonda J-Link.
--esptool-cmd <nombre de ruta> Camino al comando esptool. El valor predeterminado es 'esptool.py'.
--port <path-name> Nombre del dispositivo del puerto COM para ESP32. El valor predeterminado es / tty / USB0.
--velocidad <integer> Velocidad de transmisión para el puerto COM. El valor predeterminado es 115200.
--prov-csv-file <nombre de archivo> Lea los datos de aprovisionamiento del dispositivo de un archivo CSV de aprovisionamiento.
--prov-server <url> Lea los datos de aprovisionamiento del dispositivo desde un servidor de aprovisionamiento.
- deshabilitar-servidor-validación Cuando use 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 están configurados para probar valores dados en un archivo CSV suministrado con el repositorio de código fuente 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