Google setzt sich dafür ein, die Rassengerechtigkeit für schwarze Gemeinschaften zu fördern. Siehe wie.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

OpenWeave Factory Provisioning Tool

jinja-placeholder-0 .md "> Quelle auf GitHub anzeigen

Das OpenWeave Factory Provisioning Tool bietet eine bequeme Möglichkeit, dauerhafte Konfigurationsinformationen pro Gerät auf Weave-fähigen Geräten bereitzustellen. Das Factory Provisioning Tool soll als Teil eines Fertigungslinienprozesses verwendet werden, bei dem einzelne Geräte vor dem Versand an Kunden mit eindeutigen Identitäts- und Anmeldeinformationen versehen werden. Es kann auch von Entwicklern verwendet werden, um die während des Entwicklungsprozesses verwendete Vorproduktionshardware zu personalisieren.

Theorie der Arbeitsweise

Das Ziel des OpenWeave Factory Provisioning Tools besteht darin, ausgewählte Konfigurationsinformationen in den persistenten Konfigurationsspeicher eines Geräts einzufügen, wo sie zur Laufzeit von der Gerätefirmware abgerufen und verwendet werden können. Die permanente Gerätekonfiguration wird normalerweise im internen Flash des Geräts gespeichert, obwohl die Details darüber, wie die Daten genau gespeichert werden und in welchem ​​Format, von Plattform zu Plattform variieren. Das Factory Provisioning Tool selbst ist unabhängig vom endgültigen Speicherformat und verwendet Code in der Firmware des Geräts, um die Daten korrekt zu schreiben. Die Benutzeroberfläche des Tools ist auch weitgehend unabhängig von der Art der zu konfigurierenden Hardware. Dies bedeutet, dass ähnliche Herstellungsprozesse für Produktlinien angewendet werden können, die auf unterschiedlichen Hardwareplattformen basieren.

Das Factory Provisioning Tool wurde für die Arbeit auf einem Host-Computer entwickelt, der über eine Debug- oder Steuerschnittstelle mit einem Zielgerät verbunden ist - beispielsweise über einen JTAG- oder SWD-Port. Das Tool fügt Bereitstellungsinformationen in einer speziell codierten Form in den RAM des Geräts ein. Das Gerät wird dann zum Neustart angewiesen. Zu diesem Zeitpunkt lokalisiert der in die Firmware des Geräts integrierte Code die codierten Daten, überprüft deren Integrität und schreibt die enthaltenen Werte in einem für die Plattform geeigneten Format in den dauerhaften Speicher.

Der Code auf dem Gerät, der die injizierten Bereitstellungsdaten erkennt und verarbeitet, ist in die OpenWeave-Geräteebene integriert und kann auf jeder unterstützten Plattform aktiviert werden. Nach der Aktivierung wird der Code bei jedem Start des Geräts zu einem frühen Zeitpunkt des Geräteinitialisierungsprozesses automatisch ausgeführt. Der Code scannt einen plattformspezifischen RAM-Bereich. Auf Plattformen mit bescheidenen Speichermengen (z. B. <1 MB) umfasst der Scan den gesamten verfügbaren Arbeitsspeicher.

Im RAM werden die Bereitstellungsdaten mit einem leicht identifizierbaren Präfix codiert, sodass sie während des Scanvorgangs schnell gefunden werden können. Ein auf einem kryptografischen Hash basierender Integritätsprüfwert wird verwendet, um die Gültigkeit der Daten vor der Verarbeitung zu bestätigen.

Standardmäßig wählt das Bereitstellungstool den RAM-Speicherort aus, an dem die Bereitstellungsdaten basierend auf der Zielgeräteplattform eingefügt werden sollen. Diese Auswahl kann über ein Argument für das Tool überschrieben werden. Im Allgemeinen ist es nicht erforderlich, dass die Gerätefirmware einen RAM-Speicherort speziell für den Empfang von Bereitstellungsdaten reserviert. Typischerweise werden Bereitstellungsdaten in einen RAM-Speicherort geschrieben, der für andere Zwecke zugewiesen ist, aber im Allgemeinen zu Beginn des Gerätestartprozesses nicht verwendet wird. Häufige Optionen sind die Spitze des anfänglichen Systemstapels oder das Ende einer Heap-Arena.

Das Factory Provisioning Tool basiert auf einer Reihe externer Entwicklungstools für die Schnittstelle zum Zielgerät. Die speziellen verwendeten Werkzeuge hängen vom Typ des Zielgeräts ab. Derzeit werden zwei Geräteschnittstellen unterstützt:

  • Ein SEGGER J-Link-Debug-Test, der an den JTAG- oder SWD-Port eines Geräts angeschlossen ist
  • Ein serieller USB-Anschluss, der an einen Espressif ESP32 angeschlossen ist

Die J-Link-Schnittstelle basiert auf dem SEGGER J-Link Commander-Tool (JLinkExe), das separat auf dem Host-Computer installiert werden muss.

Die ESP32-Schnittstelle basiert auf dem Befehl Espressif esptool.py, der als Teil des ESP-IDF-SDK von Espressif bereitgestellt wird.

Arten von Informationen, die bereitgestellt werden können

Das OpenWeave Factory Provisioning Tool kann die folgenden Arten von Informationen bereitstellen:

  • Seriennummer des Geräts
  • Vom Hersteller zugewiesene Webgerät-ID
  • Vom Hersteller zugewiesenes Webzertifikat und privater Schlüssel
  • Pairing-Code weben
  • Produktversionsnummer
  • Herstellungsdatum

Obwohl ein Gerät im Allgemeinen alle oben genannten Informationen benötigt, um ordnungsgemäß zu funktionieren, ist es nicht erforderlich, alle Informationen gleichzeitig bereitzustellen. Daher kann die Bereitstellung verschiedener Arten von Informationen an verschiedenen Punkten im Herstellungsprozess erfolgen. Darüber hinaus ist es möglich, zuvor bereitgestellte Werte in einem nachfolgenden Bereitstellungsschritt durch neue Werte zu ersetzen.

Quellen für die Bereitstellung von Informationen

Informationen zur Gerätebereitstellung können auf folgende Weise an das Factory Provisioning Tool übermittelt werden:

  • Ein Befehlszeilenargument
  • Verwenden einer CSV-Bereitstellungsdatei
  • Durch Abrufen von Werten von einem Nest-Bereitstellungsserver

Befehlszeile

In der einfachsten Form werden Gerätebereitstellungsinformationen direkt in der Befehlszeile des OpenWeave Factory Provisioning Tools angegeben. Beispielsweise:

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

Binärdatenwerte wie das Weave-Zertifikat und der private Schlüssel können entweder als Base-64-Zeichenfolgen oder als Namen von Dateien angegeben werden, die die gewünschten Daten in Rohform (binär) enthalten.

Unten finden Sie eine vollständige Liste der verfügbaren Befehlszeilenargumente.

Bereitstellung einer CSV-Datei

Um die Massenbereitstellung von Geräten zu ermöglichen, kann das Factory Provisioning Tool auch Bereitstellungsdaten aus einer CSV-formatierten Bereitstellungsdatendatei lesen. Es wird erwartet, dass die Spalten dieser Datei bestimmten Bereitstellungsdatentypen entsprechen, Serial_Num , Certificate , Private_Key usw. Zeilen in der Datei geben individuelle Werte für bestimmte Geräte an, die durch die Weave-Geräte-ID ( Device_Id ) indiziert sind. Die ID des spezifischen Geräts, das bereitgestellt werden soll, muss in der Befehlszeile angegeben werden. Beispielsweise:

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

Die folgenden CSV-Spalten werden unterstützt:

Name Format Beschreibung
Device_Id 16 hexadezimale Ziffern Geräte-ID weben. Muss anwesend sein.
Serial_Num Zeichenfolge Seriennummer des Geräts.
Certificate Basis-64-Zeichenfolge Vom Hersteller zugewiesenes Weave-Gerätezertifikat.
Private_Key Basis-64-Zeichenfolge Vom Hersteller zugewiesener privater Weave-Schlüssel.
Pairing_Code Zeichenfolge Pairing-Code weben.
Product_Rev ganze Zahl Produktversionsnummer.
Mfg_Date JJJJ / MM / TT Herstellungsdatum des Geräts.

Spalten können in beliebiger Reihenfolge in der CSV-Datei angezeigt werden. Alle Spalten mit Ausnahme von Device_Id sind optional. Alle Werte, die nicht in der CSV-Datei vorhanden sind, werden einfach nicht auf dem Gerät bereitgestellt.

Der Benutzer kann zusätzlich zur CSV-Datei einzelne Bereitstellungswerte in der Befehlszeile angeben. In diesem Fall hat der Befehlszeilenwert Vorrang vor denen in der Datei.

Die Unterstützung des CSV-Dateiformats durch das Factory Provisioning Tool ist mit der Ausgabe des Befehls gen-provisioning-data des weave Tools kompatibel.

Nest-Bereitstellungsserver

Das Factory Provisioning Tool unterstützt das Abrufen ausgewählter Bereitstellungsinformationen von einem Nest-Bereitstellungsserver mithilfe eines HTTPS-basierten Protokolls. Das Bereitstellungsserverprotokoll kann verwendet werden, um das vom Hersteller zugewiesene Weave-Gerätezertifikat, den entsprechenden privaten Schlüssel und den Weave-Pairing-Code vom Bereitstellungsserver abzurufen.

Der Netzwerkspeicherort des Bereitstellungsservers wird durch Angabe einer Basis-URL in der Befehlszeile des Bereitstellungstools angegeben. Die gewünschten Bereitstellungsinformationen werden ausgewählt, indem die Weave-Geräte-ID in der Befehlszeile angegeben wird. Beispielsweise:

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

Der Benutzer kann zusätzlich zur URL des Bereitstellungsservers einzelne Bereitstellungswerte in der Befehlszeile angeben. In diesem Fall haben die in der Befehlszeile angegebenen Werte Vorrang vor den vom Server zurückgegebenen Werten.

Aktivieren / Deaktivieren der Unterstützung für die Werksbereitstellung

Die Unterstützung für die werkseitige Bereitstellung von WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING in der Gerätefirmware wird durch die WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING Kompilierungszeit WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING gesteuert. Diese Option ist standardmäßig aktiviert. Die Funktion kann deaktiviert werden, indem die Option in der WeaveProjectConfig.h Datei der Anwendung WeaveProjectConfig.h wird. Beispielsweise:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Im Allgemeinen ist es sicher, die werkseitige Bereitstellung in der Firmware des Produktionsgeräts zu aktivieren, vorausgesetzt, die Geräte-Debug-Schnittstelle ist auf Produktionsgeräten entsprechend deaktiviert. Dies kann entweder über Hardware (z. B. durch Durchbrennen von Sicherungen im SoC) oder über Software (z. B. über einen sicheren Bootloader, der den Debug-Zugriff als Teil des Boot-Prozesses blockiert) erreicht werden.

Ausführen des Factory Provisioning Tools

Das OpenWeave Factory Provisioning Tool unterstützt die folgenden Befehlszeilenoptionen:

Möglichkeit Beschreibung
--target <string> Zielgerätetyp. Zur Auswahl stehen: nrf52840 , esp32
--load-addr <hex-digits> Adresse im Gerätespeicher, an die Bereitstellungsdaten geschrieben werden.
--verbose, -v Passen Sie die Ausführlichkeitsstufe an. Verwenden Sie mehrere Argumente, um die Ausführlichkeit zu erhöhen.
--serial-num <string> Stellen Sie die Seriennummer des Geräts ein.
--device-id <hex-digits> Stellen Sie die vom Hersteller zugewiesene Geräte-ID ein.
--device-cert <base-64> | <Dateiname> Legen Sie das vom Hersteller zugewiesene Weave-Gerätezertifikat fest.
--device-key <base-64> | <Dateiname> Legen Sie den vom Hersteller zugewiesenen privaten Schlüssel für das Weave-Gerät fest.
--pairing-code <string> Stellen Sie den Gerätekopplungscode ein.
--product-rev <Ganzzahl> Stellen Sie die Produktversion für das Gerät ein.
--mfg-Datum <JJJJ / MM / TT> | heute | jetzt Stellen Sie das Herstellungsdatum des Geräts ein.
--jlink-cmd <Pfadname> Pfad zum JLink-Befehl. Der Standardwert ist 'JLinkExe'.
--jlink-if SWD | JTAG J-Link-Schnittstellentyp. Der Standardwert ist SWD.
--jlink-speed <Ganzzahl> | adaptiv | Auto Geschwindigkeit der J-Link-Schnittstelle.
--jlink-sn <string> Seriennummer der J-Link-Sonde.
--esptool-cmd <Pfadname> Pfad zum Befehl esptool. Der Standardwert ist 'esptool.py'.
--port <Pfadname> COM-Port Gerätename für ESP32. Der Standardwert ist / tty / USB0.
--speed <Ganzzahl> Baudrate für COM-Port. Der Standardwert ist 115200.
--prov-csv-file <Dateiname> Lesen Sie Gerätebereitstellungsdaten aus einer Bereitstellungs-CSV-Datei.
--prov-server <url> Lesen Sie Gerätebereitstellungsdaten von einem Bereitstellungsserver.
--disable-server-validation Deaktivieren Sie bei Verwendung von HTTPS die Validierung des vom Bereitstellungsserver vorgelegten Zertifikats.

Beispiele

Mit dem folgenden Befehl werden die Geräte-ID, die Seriennummer, die Produktversion und der Pairing-Code auf bestimmte Werte festgelegt. Das Herstellungsdatum wird auf das aktuelle Datum eingestellt. Das openweave-core und der private Schlüssel sind auf Testwerte festgelegt, die in einer CSV-Datei angegeben sind, die mit dem openweave-core geliefert wird.

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