Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Strumento di provisioning di fabbrica OpenWeave

jinja-placeholder-0 .md "> Visualizza sorgente su GitHub

Lo strumento di provisioning in fabbrica di OpenWeave offre un comodo mezzo per eseguire il provisioning di informazioni di configurazione persistenti per dispositivo su dispositivi abilitati a Weave. Lo strumento di provisioning di fabbrica deve essere utilizzato come parte di un processo di linea di produzione che timbra i singoli dispositivi con informazioni univoche di identità e credenziali prima della spedizione ai clienti. Può anche essere utilizzato dagli sviluppatori per personalizzare l'hardware di pre-produzione utilizzato durante il processo di sviluppo.

Teoria dell'operazione

L'obiettivo di OpenWeave Factory Provisioning Tool è quello di inserire informazioni di configurazione selezionate nell'archivio di configurazione persistente di un dispositivo, dove possono essere raccolte e utilizzate in fase di esecuzione dal firmware del dispositivo. La configurazione persistente del dispositivo viene in genere archiviata nella memoria flash interna del dispositivo, sebbene i dettagli di come sono archiviati esattamente i dati e in quale formato variano da piattaforma a piattaforma. Lo strumento di provisioning di fabbrica stesso è indipendente dal formato di archiviazione finale e si basa sul codice nel firmware del dispositivo per scrivere i dati nel modo corretto. L'interfaccia utente dello strumento è inoltre ampiamente indipendente dal tipo di hardware configurato, il che significa che processi di produzione simili possono essere impiegati su linee di prodotti basate su piattaforme hardware diverse.

Factory Provisioning Tool è progettato per essere eseguito su una macchina host connessa a un dispositivo di destinazione tramite una qualche forma di interfaccia di debug o di controllo, ad esempio una porta JTAG o SWD. Lo strumento funziona iniettando le informazioni di provisioning nella RAM del dispositivo in una forma codificata appositamente. Al dispositivo viene quindi richiesto di riavviare, a quel punto il codice incorporato nel firmware del dispositivo individua i dati codificati, convalida la sua integrità e scrive i valori contenuti nella memoria persistente in un formato appropriato per la piattaforma.

Il codice sul dispositivo che rileva ed elabora i dati di provisioning iniettati è integrato in OpenWeave Device Layer e può essere abilitato su qualsiasi piattaforma supportata. Una volta abilitato, il codice viene eseguito automaticamente ogni volta che il dispositivo si avvia, a un certo punto del processo di inizializzazione del dispositivo. Il codice funziona eseguendo la scansione di un'area della RAM specifica della piattaforma. Su piattaforme con supporti di memoria modesti (ad esempio, <1 M), la scansione comprende tutta la RAM disponibile.

Se inseriti nella RAM, i dati di provisioning sono codificati con un prefisso facilmente identificabile, che consente di trovarli rapidamente durante il processo di scansione. Un valore di controllo dell'integrità basato su un hash crittografico viene utilizzato per confermare la validità dei dati prima dell'elaborazione.

Per impostazione predefinita, lo strumento di provisioning seleziona la posizione della RAM in cui iniettare i dati di provisioning in base alla piattaforma del dispositivo di destinazione. Questa scelta può essere ignorata tramite un argomento sullo strumento. In generale, non è necessario che il firmware del dispositivo riservi una posizione RAM specificamente per la ricezione dei dati di provisioning. Più in genere, i dati di provisioning vengono scritti in una posizione RAM allocata per altri scopi, ma generalmente non utilizzati all'inizio del processo di avvio del dispositivo. Le scelte comuni sono la parte superiore dello stack di sistema iniziale o l'estremità remota di un'arena heap.

Lo strumento di provisioning di fabbrica si basa su una serie di strumenti di sviluppo esterni per l'interfaccia con il dispositivo di destinazione. Gli strumenti specifici impiegati dipendono dal tipo di dispositivo target. Sono attualmente supportate due interfacce dispositivo:

  • una sonda di debug SEGGER J-Link collegata alla porta JTAG o SWD di un dispositivo
  • una porta seriale USB collegata a un ESP32 Espressif

L'interfaccia J-Link si basa sullo strumento SEGGER J-Link Commander (JLinkExe), che deve essere installato separatamente sul computer host.

L'interfaccia ESP32 si basa sul comando Espressif esptool.py, fornito come parte dell'SDK ESP-IDF di Espressif.

Tipi di informazioni che possono essere fornite

OpenWeave Factory Provisioning Tool è in grado di fornire i seguenti tipi di informazioni:

  • Numero di serie del dispositivo
  • ID dispositivo Weave assegnato dal produttore
  • Certificato di tessitura assegnato dal produttore e chiave privata
  • Codice di associazione del tessuto
  • Numero di revisione del prodotto
  • Data di produzione

Sebbene in genere un dispositivo abbia bisogno di tutte le informazioni di cui sopra per funzionare correttamente, non è necessario fornire tutte le informazioni contemporaneamente. Pertanto, il provisioning di diversi tipi di informazioni può avvenire in punti distinti del processo di fabbricazione. Inoltre, è possibile sostituire i valori precedentemente forniti con nuovi valori in una fase di provisioning successiva.

Fonti di informazioni sul provisioning

Le informazioni sul provisioning dei dispositivi possono essere fornite allo strumento di provisioning di fabbrica nei modi seguenti:

  • Argomenti della riga di comando
  • Utilizzo di un file CSV di provisioning
  • Recuperando i valori da un server di provisioning Nest

Riga di comando

Nella forma più semplice, le informazioni di provisioning del dispositivo vengono specificate direttamente dalla riga di comando allo strumento di provisioning di fabbrica OpenWeave. Per esempio:

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

I valori dei dati binari, come il certificato Weave e la chiave privata, possono essere specificati come stringhe di base 64 o come nomi di file contenenti i dati desiderati in forma grezza (binaria).

Vedi sotto per un elenco completo degli argomenti disponibili della riga di comando.

Provisioning del file CSV

Per supportare il provisioning in blocco dei dispositivi, lo strumento di provisioning di fabbrica può anche leggere i dati di provisioning da un file di dati di provisioning formattato CSV. Le colonne di questo file dovrebbero corrispondere a tipi di dati di provisioning specifici, ovvero Serial_Num , Certificate , Private_Key , ecc. Le righe nel file forniscono valori individuali per dispositivi specifici, indicizzati Device_Id dispositivo Weave ( Device_Id ). L'ID del dispositivo specifico da sottoporre a provisioning deve essere specificato nella riga di comando. Per esempio:

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

Sono supportate le seguenti colonne CSV:

Nome Formato Descrizione
Device_Id 16 cifre esadecimali ID dispositivo Weave. Deve essere presente
Serial_Num corda Numero di serie del dispositivo.
Certificate stringa base-64 Certificato del dispositivo Weave assegnato dal produttore.
Private_Key stringa base-64 Chiave privata tessuta assegnata dal produttore.
Pairing_Code corda Codice di associazione del tessuto.
Product_Rev numero intero Numero di revisione del prodotto.
Mfg_Date AAAA / MM / GG Data di fabbricazione del dispositivo.

Le colonne possono apparire nel file CSV in qualsiasi ordine. Tutte le colonne sono facoltative, ad eccezione di Device_Id . Tutti i valori non presenti nel file CSV non vengono semplicemente forniti sul dispositivo.

L'utente può specificare singoli valori di provisioning sulla riga di comando oltre al file CSV, nel qual caso il valore della riga di comando ha la precedenza su quelli nel file.

Il supporto del formato di file CSV di Factory Provisioning Tool è compatibile con l'output del comando gen-provisioning-data dello strumento weave .

Server di provisioning Nest

Factory Provisioning Tool supporta il recupero delle informazioni di provisioning selezionate da un server di provisioning Nest mediante un protocollo basato su HTTPS. Il protocollo del server di provisioning può essere utilizzato per recuperare il certificato del dispositivo Weave assegnato dal produttore, la chiave privata corrispondente e il codice di accoppiamento Weave dal server di provisioning.

Il percorso di rete del server di provisioning viene specificato fornendo un URL di base sulla riga comandi dello strumento di provisioning. Le informazioni di provisioning desiderate vengono selezionate specificando l'id del dispositivo Weave sulla riga di comando. Per esempio:

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

L'utente può specificare singoli valori di provisioning sulla riga comandi oltre all'URL del server di provisioning. In questo caso, i valori forniti nella riga di comando hanno la precedenza sui valori restituiti dal server.

Abilitazione / disabilitazione del supporto di provisioning di fabbrica

Il supporto per il provisioning di fabbrica OpenWeave nel firmware del dispositivo è controllato WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING di configurazione del tempo di compilazione WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING . Questa opzione è abilitata per impostazione predefinita. La funzione può essere disabilitata sovrascrivendo l'opzione nel file WeaveProjectConfig.h dell'applicazione. Per esempio:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

In generale, è possibile abilitare il provisioning di fabbrica nel firmware del dispositivo di produzione, a condizione che l'interfaccia di debug del dispositivo sia disabilitata in modo appropriato sui dispositivi di produzione. Ciò può essere ottenuto tramite mezzi hardware (ad esempio, facendo saltare i fusibili nel SoC) o nel software (ad esempio, tramite un caricatore di avvio sicuro che blocca l'accesso di debug come parte del processo di avvio).

Esecuzione dello strumento di provisioning di fabbrica

OpenWeave Factory Provisioning Tool supporta le seguenti opzioni della riga di comando:

Opzione Descrizione
--target <stringa> Tipo di dispositivo di destinazione. Le scelte sono: nrf52840 , esp32
--load-addr <hex-digits> Indirizzo nella memoria del dispositivo in cui verranno scritti i dati di provisioning.
--verbose, -v Regola il livello di verbosità dell'output. Usa più argomenti per aumentare la verbosità.
--serial-num <stringa> Imposta il numero seriale del dispositivo.
--device-id <hex-digits> Imposta l'ID del dispositivo assegnato dal produttore.
--device-cert <base-64> | <file-name> Impostare il certificato del dispositivo Weave assegnato dal produttore.
--device-key <base-64> | <file-name> Imposta la chiave privata del dispositivo Weave assegnata dal produttore.
--pairing-code <stringa> Imposta il codice di accoppiamento del dispositivo.
--product-rev <integer> Imposta la revisione del prodotto per il dispositivo.
--mfg-date <AAAA / MM / GG> | oggi | adesso Imposta la data di fabbricazione del dispositivo.
--jlink-cmd <nome-percorso> Percorso del comando JLink. Il valore predefinito è "JLinkExe".
--jlink-if SWD | JTAG Tipo di interfaccia J-Link. Il valore predefinito è SWD.
--jlink-speed <intero> | adattivo | auto Velocità dell'interfaccia J-Link.
--jlink-sn <stringa> Numero di serie della sonda J-Link.
--esptool-cmd <nome-percorso> Percorso del comando esptool. Il valore predefinito è "esptool.py".
--port <nome-percorso> Nome dispositivo porta COM per ESP32. Il valore predefinito è / tty / USB0.
--speed <intero> Baud rate per porta COM. Il valore predefinito è 115200.
--prov-csv-file <nome-file> Leggere i dati di provisioning del dispositivo da un file CSV di provisioning.
--prov-server <url> Leggere i dati di provisioning del dispositivo da un server di provisioning.
--disable-server-convalida Quando si utilizza HTTPS, disabilitare la convalida del certificato presentato dal server di provisioning.

Esempi

Il seguente comando imposta l'id del dispositivo, il numero di serie, la revisione del prodotto e il codice di accoppiamento su valori specifici. La data di produzione è impostata sulla data corrente. E il certificato del dispositivo e la chiave privata sono impostati per testare i valori forniti in un file CSV fornito con il repository di origine 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