Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Outil de provisionnement OpenWeave Factory

jinja-placeholder-0 .md "> Afficher la source sur GitHub

L'outil de provisionnement OpenWeave Factory fournit un moyen pratique de provisionner des informations de configuration persistantes par appareil sur les appareils compatibles Weave. L'outil d'approvisionnement en usine est destiné à être utilisé dans le cadre d'un processus de ligne de fabrication qui tamponne les appareils individuels avec une identité et des informations d'identification uniques avant l'expédition aux clients. Il peut également être utilisé par les développeurs pour personnaliser le matériel de pré-production utilisé pendant le processus de développement.

Théorie de fonctionnement

L'objectif de l'OpenWeave Factory Provisioning Tool est d'injecter des informations de configuration sélectionnées dans le magasin de configuration persistant d'un appareil, où elles peuvent être récupérées et utilisées au moment de l'exécution par le micrologiciel de l'appareil. La configuration persistante de l'appareil est généralement stockée dans la mémoire flash interne de l'appareil, bien que les détails sur la manière exacte dont les données sont stockées et dans quel format varient d'une plateforme à l'autre. L'outil de provisioning d'usine lui-même est indépendant du format de stockage final et s'appuie sur le code du micrologiciel de l'appareil pour écrire les données de la bonne manière. L'interface utilisateur de l'outil est également largement indépendante du type de matériel configuré, ce qui signifie que des processus de fabrication similaires peuvent être utilisés dans des gammes de produits basées sur différentes plates-formes matérielles.

L'outil de provisioning d'usine est conçu pour fonctionner sur une machine hôte qui est connectée à un périphérique cible via une forme d'interface de débogage ou de contrôle - par exemple, un port JTAG ou SWD. L'outil fonctionne en injectant des informations de provisionnement dans la RAM de l'appareil sous une forme spécialement codée. L'appareil est ensuite invité à redémarrer, à quel point le code intégré au micrologiciel de l'appareil localise les données codées, valide leur intégrité et écrit les valeurs contenues dans le stockage persistant dans un format approprié pour la plate-forme.

Le code sur l'appareil qui détecte et traite les données d'approvisionnement injectées est intégré à OpenWeave Device Layer et peut être activé sur n'importe quelle plateforme prise en charge. Une fois activé, le code s'exécute automatiquement à chaque démarrage de l'appareil, à un stade précoce du processus d'initialisation de l'appareil. Le code fonctionne en analysant une région de RAM spécifique à la plate-forme. Sur les plates-formes avec des montages de mémoire modestes (par exemple, <1 Mo), l'analyse englobe toute la RAM disponible.

Lorsqu'elles sont placées dans la RAM, les données de provisionnement sont codées avec un préfixe facilement identifiable, ce qui permet de les retrouver rapidement pendant le processus d'analyse. Une valeur de contrôle d'intégrité basée sur un hachage cryptographique est utilisée pour confirmer la validité des données avant le traitement.

Par défaut, l'outil d'approvisionnement sélectionne l'emplacement de RAM auquel injecter les données d'approvisionnement en fonction de la plate-forme de l'appareil cible. Ce choix peut être remplacé via un argument à l'outil. En général, il n'est pas nécessaire que le micrologiciel de l'appareil réserve un emplacement RAM spécifiquement pour recevoir les données d'approvisionnement. Plus généralement, les données de provisionnement sont écrites dans un emplacement de RAM alloué à d'autres fins, mais qui est généralement inutilisé au début du processus de démarrage de l'appareil. Les choix courants sont le haut de la pile système initiale ou l'extrémité distante d'une arène de tas.

L'outil de provisioning d'usine s'appuie sur un ensemble d'outils de développement externes pour s'interfacer avec le périphérique cible. Les outils particuliers employés dépendent du type de périphérique cible. Deux interfaces d'appareil sont actuellement prises en charge:

  • une sonde de débogage SEGGER J-Link connectée au port JTAG ou SWD d'un appareil
  • un port série USB connecté à un Espressif ESP32

L'interface J-Link repose sur l'outil SEGGER J-Link Commander (JLinkExe), qui doit être installé séparément sur la machine hôte.

L'interface ESP32 repose sur la commande Espressif esptool.py, fournie dans le cadre du SDK ESP-IDF d'Espressif.

Types d'informations pouvant être fournies

OpenWeave Factory Provisioning Tool est capable de provisionner les types d'informations suivants:

  • Numéro de série de l'appareil
  • Identifiant de l'appareil Weave attribué par le fabricant
  • Certificat Weave et clé privée attribués par le fabricant
  • Code d'appariement de tissage
  • Numéro de révision du produit
  • Date de fabrication

Bien que généralement un appareil ait besoin de toutes les informations ci-dessus pour fonctionner correctement, il n'est pas nécessaire de fournir toutes les informations en même temps. Ainsi, la fourniture de différents types d'informations peut avoir lieu à des moments distincts du processus de fabrication. De plus, il est possible de remplacer les valeurs précédemment provisionnées par de nouvelles valeurs lors d'une étape de provisionnement ultérieure.

Sources d'informations d'approvisionnement

Les informations de provisionnement de l'appareil peuvent être fournies à Factory Provisioning Tool de la manière suivante:

  • Un argument de ligne de commande
  • Utilisation d'un fichier CSV d'approvisionnement
  • En récupérant les valeurs d'un serveur d'approvisionnement Nest

Ligne de commande

Dans la forme la plus simple, les informations de provisionnement des appareils sont spécifiées directement sur la ligne de commande de l'OpenWeave Factory Provisioning Tool. Par exemple:

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

Les valeurs de données binaires, telles que le certificat Weave et la clé privée, peuvent être spécifiées sous forme de chaînes de base 64 ou de noms de fichiers contenant les données souhaitées sous forme brute (binaire).

Voir ci-dessous pour une liste complète des arguments de ligne de commande disponibles.

Provisionnement du fichier CSV

Pour prendre en charge l'approvisionnement en masse des appareils, Factory Provisioning Tool peut également lire les données d'approvisionnement à partir d'un fichier de données d'approvisionnement au format CSV. Les colonnes de ce fichier doivent correspondre à des types de données d'approvisionnement spécifiques - c'est-à-dire Serial_Num , Certificate , Private_Key , etc. Les lignes du fichier donnent des valeurs individuelles pour des périphériques spécifiques, indexées par l'ID de périphérique Weave ( Device_Id ). L'ID du périphérique spécifique à provisionner doit être spécifié sur la ligne de commande. Par exemple:

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

Les colonnes CSV suivantes sont prises en charge:

Nom Format La description
Device_Id 16 chiffres hexadécimaux Identifiant de l'appareil Weave. Presence obligatoire.
Serial_Num chaîne Numéro de série de l'appareil.
Certificate chaîne de base 64 Certificat d'appareil Weave attribué par le fabricant.
Private_Key chaîne de base 64 Clé privée Weave attribuée par le fabricant.
Pairing_Code chaîne Code de jumelage Weave.
Product_Rev entier Numéro de révision du produit.
Mfg_Date AAAA / MM / JJ Date de fabrication de l'appareil.

Les colonnes peuvent apparaître dans le fichier CSV dans n'importe quel ordre. Toutes les colonnes sont facultatives, à l'exception de Device_Id . Les valeurs non présentes dans le fichier CSV ne sont tout simplement pas provisionnées sur l'appareil.

L'utilisateur peut spécifier des valeurs d'approvisionnement individuelles sur la ligne de commande en plus du fichier CSV, auquel cas la valeur de la ligne de commande prévaut sur celles du fichier.

La prise en charge du format de fichier CSV par Factory Provisioning Tool est compatible avec la sortie de la commande gen-provisioning-data de l'outil de weave .

Serveur de provisionnement Nest

L'outil de provisionnement d'usine prend en charge la récupération de certaines informations de provisionnement à partir d'un serveur de provisionnement Nest à l'aide d'un protocole basé sur HTTPS. Le protocole du serveur d'approvisionnement peut être utilisé pour récupérer le certificat d'appareil Weave attribué par le fabricant, la clé privée correspondante et le code d'appariement Weave à partir du serveur d'approvisionnement.

L'emplacement réseau du serveur d'approvisionnement est spécifié en fournissant une URL de base sur la ligne de commande de l'outil d'approvisionnement. Les informations d'approvisionnement souhaitées sont sélectionnées en spécifiant l'ID du périphérique Weave sur la ligne de commande. Par exemple:

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

L'utilisateur peut spécifier des valeurs d'approvisionnement individuelles sur la ligne de commande en plus de l'URL du serveur d'approvisionnement. Dans ce cas, les valeurs données sur la ligne de commande ont priorité sur les valeurs renvoyées par le serveur.

Activation / désactivation de la prise en charge du provisionnement d'usine

La prise en charge du provisionnement d'usine OpenWeave dans le micrologiciel de l'appareil est contrôlée par l'option de configuration de compilation WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING . Cette option est activée par défaut. La fonctionnalité peut être désactivée en remplaçant l'option dans le fichier WeaveProjectConfig.h l'application. Par exemple:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

En général, il est sûr d'activer l'approvisionnement en usine dans le micrologiciel du périphérique de production à condition que l'interface de débogage du périphérique soit désactivée de manière appropriée sur les périphériques de production. Cela peut être réalisé soit par des moyens matériels (par exemple, en faisant sauter des fusibles dans le SoC), soit par des logiciels (par exemple, via un chargeur de démarrage sécurisé qui bloque l'accès au débogage dans le cadre du processus de démarrage).

Exécution de l'outil de provisionnement d'usine

L'Outil de provisioning OpenWeave Factory prend en charge les options de ligne de commande suivantes:

Option La description
--target <chaîne> Type d'appareil cible. Les choix sont: nrf52840 , esp32
--load-addr <hex-digits> Adresse dans la mémoire de l'appareil à laquelle les données d'approvisionnement seront écrites.
--verbose, -v Ajustez le niveau de verbosité de sortie. Utilisez plusieurs arguments pour augmenter la verbosité.
--serial-num <chaîne> Définissez le numéro de série de l'appareil.
--device-id <hex-digits> Définissez l'ID d'appareil attribué par le fabricant.
--device-cert <base-64> | <nom-fichier> Définissez le certificat de périphérique Weave attribué par le fabricant.
--device-key <base-64> | <nom-fichier> Définissez la clé privée de l'appareil Weave attribuée par le fabricant.
--pairing-code <chaîne> Définissez le code de couplage de l'appareil.
--product-rev <integer> Définissez la révision du produit pour l'appareil.
--mfg-date <AAAA / MM / JJ> | aujourd'hui | maintenant Réglez la date de fabrication de l'appareil.
--jlink-cmd <nom-chemin> Chemin de la commande JLink. La valeur par défaut est «JLinkExe».
--jlink-if SWD | JTAG Type d'interface J-Link. La valeur par défaut est SWD.
--jlink-speed <integer> | adaptatif | auto Vitesse de l'interface J-Link.
--jlink-sn <chaîne> Numéro de série de la sonde J-Link.
--esptool-cmd <nom-chemin> Chemin d'accès à la commande esptool. La valeur par défaut est «esptool.py».
--port <nom-chemin> Nom de périphérique du port COM pour ESP32. La valeur par défaut est / tty / USB0.
--speed <entier> Vitesse de transmission pour le port COM. La valeur par défaut est 115200.
--prov-csv-file <nom-fichier> Lisez les données de provisionnement de l'appareil à partir d'un fichier CSV de provisionnement.
--prov-server <url> Lire les données de provisionnement de l'appareil à partir d'un serveur de provisionnement.
--disable-server-validation Lorsque vous utilisez HTTPS, désactivez la validation du certificat présenté par le serveur d'approvisionnement.

Exemples

La commande suivante définit l'ID de l'appareil, le numéro de série, la révision du produit et le code de couplage sur des valeurs spécifiques. La date de fabrication est définie sur la date du jour. Et le certificat de périphérique et la clé privée sont définis pour tester les valeurs données dans un fichier CSV fourni avec le référentiel source 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