Google is committed to advancing racial equity for Black communities. See how.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Narzędzie OpenWeave Factory Provisioning

jinja-placeholder-0 .md "> Wyświetl źródło na GitHub

Narzędzie OpenWeave Factory Provisioning Tool zapewnia wygodny sposób udostępniania trwałych informacji o konfiguracji poszczególnych urządzeń na urządzeniach obsługujących Weave. Narzędzie Factory Provisioning jest przeznaczone do użycia jako część procesu linii produkcyjnej, który oznacza poszczególne urządzenia unikalną tożsamością i danymi uwierzytelniającymi przed wysyłką do klientów. Może być również używany przez programistów do personalizacji sprzętu przedprodukcyjnego używanego podczas procesu tworzenia.

Teoria operacji

Celem narzędzia OpenWeave Factory Provisioning Tool jest wstrzyknięcie wybranych informacji konfiguracyjnych do trwałego magazynu konfiguracji urządzenia, skąd można je pobrać i wykorzystać w czasie wykonywania przez oprogramowanie układowe urządzenia. Trwała konfiguracja urządzenia jest zwykle przechowywana w wewnętrznej pamięci flash urządzenia, chociaż szczegóły dotyczące dokładnego sposobu przechowywania danych i formatu różnią się w zależności od platformy. Samo narzędzie Factory Provisioning Tool jest niezależne od ostatecznego formatu przechowywania i opiera się na kodzie w oprogramowaniu sprzętowym urządzenia, aby zapisać dane w prawidłowy sposób. Interfejs użytkownika narzędzia jest również w dużej mierze niezależny od rodzaju konfigurowanego sprzętu, co oznacza, że ​​podobne procesy produkcyjne mogą być stosowane w liniach produktów opartych na różnych platformach sprzętowych.

Narzędzie Factory Provisioning Tool jest zaprojektowane do pracy na maszynie hosta, która jest podłączona do urządzenia docelowego za pośrednictwem jakiejś formy interfejsu debugowania lub sterowania - na przykład portu JTAG lub SWD. Narzędzie działa poprzez wstrzykiwanie informacji o udostępnianiu do pamięci RAM urządzenia w specjalnie zakodowanej formie. Następnie urządzenie otrzymuje polecenie ponownego uruchomienia, w którym to momencie kod wbudowany w oprogramowanie układowe urządzenia lokalizuje zakodowane dane, weryfikuje ich integralność i zapisuje zawarte wartości w trwałej pamięci w formacie odpowiednim dla platformy.

Kod na urządzeniu, który wykrywa i przetwarza wstrzyknięte dane aprowizacji, jest wbudowany w warstwę urządzeń OpenWeave i można go włączyć na dowolnej obsługiwanej platformie. Po włączeniu kod jest uruchamiany automatycznie przy każdym uruchomieniu urządzenia na wczesnym etapie procesu inicjalizacji urządzenia. Kod działa poprzez skanowanie regionu pamięci RAM specyficznej dla platformy. Na platformach ze skromną ilością pamięci (na przykład <1 MB) skanowanie obejmuje całą dostępną pamięć RAM.

Po umieszczeniu w pamięci RAM dane udostępniania są kodowane za pomocą łatwego do zidentyfikowania prefiksu, który umożliwia szybkie ich odnalezienie podczas procesu skanowania. Wartość kontroli integralności oparta na kryptograficznym skrócie służy do potwierdzenia poprawności danych przed przetwarzaniem.

Domyślnie narzędzie do obsługi administracyjnej wybiera lokalizację pamięci RAM, w której zostaną wprowadzone dane obsługi administracyjnej na podstawie platformy urządzenia docelowego. Ten wybór można zmienić za pomocą argumentu narzędzia. Ogólnie nie jest wymagane, aby oprogramowanie układowe urządzenia rezerwowało lokalizację pamięci RAM specjalnie do odbierania danych obsługi. Częściej dane dotyczące obsługi administracyjnej są zapisywane w lokalizacji pamięci RAM, która jest przydzielana do innych celów, ale zazwyczaj nie jest używana na początku procesu uruchamiania urządzenia. Typowe opcje to górna część początkowego stosu systemowego lub drugi koniec areny sterty.

Narzędzie Factory Provisioning Tool opiera się na zestawie zewnętrznych narzędzi programistycznych do połączenia z urządzeniem docelowym. Poszczególne stosowane narzędzia zależą od typu urządzenia docelowego. Obecnie obsługiwane są dwa interfejsy urządzeń:

  • sonda debugująca SEGGER J-Link podłączona do portu JTAG lub SWD urządzenia
  • port szeregowy USB podłączony do Espressif ESP32

Interfejs J-Link opiera się na narzędziu SEGGER J-Link Commander (JLinkExe), które musi być oddzielnie zainstalowane na komputerze głównym.

Interfejs ESP32 opiera się na poleceniu Espressif esptool.py, które jest dostarczane jako część ESP-IDF SDK Espressif.

Rodzaje informacji, które można udostępniać

Narzędzie OpenWeave Factory Provisioning umożliwia udostępnianie następujących typów informacji:

  • Numer seryjny urządzenia
  • Identyfikator urządzenia Weave przypisany przez producenta
  • Certyfikat Weave i klucz prywatny przypisany przez producenta
  • Kod parowania Weave
  • Numer wersji produktu
  • Data produkcji

Chociaż ogólnie urządzenie będzie potrzebowało wszystkich powyższych informacji do prawidłowego działania, nie jest wymagane dostarczanie wszystkich informacji w tym samym czasie. W ten sposób dostarczanie różnych rodzajów informacji może mieć miejsce w różnych punktach procesu produkcyjnego. Ponadto istnieje możliwość zastąpienia wcześniej zainicjowanych wartości nowymi wartościami w kolejnym kroku aprowizacji.

Źródła informacji o zaopatrzeniu

Informacje o udostępnianiu urządzeń można przekazać do narzędzia Factory Provisioning Tool w następujący sposób:

  • Argumenty wiersza poleceń
  • Korzystanie z pliku CSV obsługi administracyjnej
  • Pobierając wartości z serwera obsługi administracyjnej Nest

Wiersz poleceń

W najprostszej formie informacje o udostępnianiu urządzeń są określane bezpośrednio w wierszu poleceń narzędzia OpenWeave Factory Provisioning Tool. Na przykład:

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

Binarne wartości danych, takie jak certyfikat Weave i klucz prywatny, można określić jako ciągi base-64 lub jako nazwy plików zawierających żądane dane w postaci surowej (binarnej).

Poniżej znajduje się pełna lista dostępnych argumentów wiersza poleceń.

Plik CSV obsługi administracyjnej

Aby uwzględnić zbiorcze udostępnianie urządzeń, narzędzie Factory Provisioning Tool może również odczytywać dane udostępniania z pliku danych obsługi administracyjnej w formacie CSV. Oczekuje Kolumny tego pliku odpowiadają rezerw celowych typów danych - to znaczy, Serial_Num , Certificate , Private_Key itp Wiersze w pliku dają poszczególne wartości dla urządzeń konkretnych, indeksowane przez identyfikator urządzenia Weave ( Device_Id ). W wierszu komend należy podać identyfikator konkretnego urządzenia, które ma być obsługiwane. Na przykład:

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

Obsługiwane są następujące kolumny CSV:

Imię Format Opis
Device_Id 16 cyfr szesnastkowych Identyfikator urządzenia Weave. Musi być obecny.
Serial_Num strunowy Numer seryjny urządzenia.
Certificate ciąg base-64 Certyfikat urządzenia Weave przypisany przez producenta.
Private_Key ciąg base-64 Klucz prywatny Weave przypisany przez producenta.
Pairing_Code strunowy Kod parowania Weave.
Product_Rev liczba całkowita Numer wersji produktu.
Mfg_Date RRRR / MM / DD Data produkcji urządzenia.

Kolumny mogą pojawiać się w pliku CSV w dowolnej kolejności. Wszystkie kolumny są opcjonalne, z wyjątkiem Device_Id . Wszelkie wartości, których nie ma w pliku CSV, po prostu nie są udostępniane na urządzeniu.

Użytkownik może określić indywidualne wartości udostępniania w wierszu poleceń oprócz pliku CSV. W takim przypadku wartość wiersza poleceń ma pierwszeństwo przed wartościami w pliku.

Obsługa formatu pliku CSV przez narzędzie Factory Provisioning Tool jest zgodna z danymi wyjściowymi polecenia gen-provisioning-data narzędzia weave .

Serwer obsługujący Nest

Narzędzie Factory Provisioning Tool obsługuje pobieranie wybranych informacji o udostępnianiu z serwera Nest Provisioning przy użyciu protokołu HTTPS. Protokół serwera obsługi administracyjnej może służyć do pobierania certyfikatu urządzenia Weave przypisanego przez producenta, odpowiedniego klucza prywatnego i kodu parowania Weave z serwera obsługi administracyjnej.

Lokalizację sieciową serwera obsługi administracyjnej określa się, podając podstawowy adres URL w wierszu poleceń narzędzia obsługi administracyjnej. Żądane informacje dotyczące obsługi administracyjnej są wybierane przez określenie identyfikatora urządzenia Weave w wierszu polecenia. Na przykład:

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

Oprócz adresu URL serwera obsługi administracyjnej użytkownik może określić w wierszu komend indywidualne wartości obsługi administracyjnej. W tym przypadku wartości podane w wierszu poleceń mają pierwszeństwo przed wartościami zwracanymi przez serwer.

Włączanie / wyłączanie obsługi fabrycznej obsługi administracyjnej

Obsługa fabrycznego udostępniania OpenWeave w oprogramowaniu sprzętowym urządzenia jest kontrolowana przez opcję konfiguracyjną WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING w WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING kompilacji. Ta opcja jest domyślnie włączona. Funkcję można wyłączyć, zastępując opcję w pliku WeaveProjectConfig.h aplikacji. Na przykład:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Ogólnie rzecz biorąc, można bezpiecznie włączyć fabryczne udostępnianie oprogramowania sprzętowego urządzeń produkcyjnych, pod warunkiem, że interfejs debugowania urządzenia jest odpowiednio wyłączony na urządzeniach produkcyjnych. Można to osiągnąć za pomocą środków sprzętowych (na przykład przez przepalenie bezpieczników w SoC) lub oprogramowania (na przykład za pomocą bezpiecznego programu ładującego, który blokuje dostęp do debugowania w ramach procesu rozruchu).

Uruchamianie narzędzia Factory Provisioning Tool

Narzędzie OpenWeave Factory Provisioning Tool obsługuje następujące opcje wiersza poleceń:

Opcja Opis
--target <string> Docelowy typ urządzenia. Do wyboru są: nrf52840 , esp32
--load-addr <cyfry szesnastkowe> Adres w pamięci urządzenia, pod którym będą zapisywane dane obsługi administracyjnej.
--verbose, -v Dostosuj poziom szczegółowości wyjścia. Użyj wielu argumentów, aby zwiększyć szczegółowość.
--serial-num <string> Ustaw numer seryjny urządzenia.
--device-id <cyfry szesnastkowe> Ustaw identyfikator urządzenia przypisany przez producenta.
--device-cert <base-64> | <nazwa-pliku> Ustaw certyfikat urządzenia Weave przypisany przez producenta.
--device-key <base-64> | <nazwa-pliku> Ustaw klucz prywatny urządzenia Weave przypisany przez producenta.
--pairing-code <string> Ustaw kod parowania urządzenia.
--product-rev <integer> Ustaw wersję produktu dla urządzenia.
--mfg-date <RRRR / MM / DD> | dzisiaj | teraz Ustaw datę produkcji urządzenia.
--jlink-cmd <nazwa ścieżki> Ścieżka do polecenia JLink. Domyślnie „JLinkExe”.
--jlink-if SWD | JTAG Typ interfejsu J-Link. Domyślnie SWD.
--jlink-speed <liczba całkowita> | adaptacyjny | automatyczny Szybkość interfejsu J-Link.
--jlink-sn <ciąg> Numer seryjny sondy J-Link.
--esptool-cmd <nazwa ścieżki> Ścieżka do polecenia esptool. Domyślnie „esptool.py”.
--port <nazwa ścieżki> Nazwa urządzenia portu COM dla ESP32. Domyślnie / tty / USB0.
--speed <integer> Szybkość transmisji dla portu COM. Domyślnie 115200.
--prov-csv-file <nazwa-pliku> Odczytaj dane o udostępnianiu urządzeń z pliku CSV obsługującego obsługę administracyjną.
--prov-server <url> Odczytaj dane obsługi administracyjnej urządzenia z serwera obsługi administracyjnej.
--disable-server-validation Korzystając z protokołu HTTPS, wyłącz weryfikację certyfikatu przedstawionego przez serwer obsługi administracyjnej.

Przykłady

Następujące polecenie ustawia identyfikator urządzenia, numer seryjny, wersję produktu i kod parowania na określone wartości. Data produkcji jest ustawiona na aktualną datę. Certyfikat urządzenia i klucz prywatny są ustawione tak, aby testować wartości podane w pliku CSV dostarczonym z repozytorium źródłowym 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