Narzędzie do obsługi fabryk OpenWeave

Wyświetl źródło na GitHubie

Narzędzie do obsługi fabryki OpenWeave zapewnia wygodny sposób udostępniania trwałych informacji konfiguracyjnych na poszczególne urządzenia na urządzeniach obsługujących Weave. Narzędzie do obsługi fabryki powinno być wykorzystywane w ramach procesu produkcji, co pozwala oznaczyć poszczególne urządzenia unikalnymi danymi identyfikacyjnymi i danymi logowania przed wysłaniem do klientów. Mogą też być używane przez deweloperów do personalizowania sprzętu do preprodukcji używanego podczas programowania.

Teoria działania

Celem narzędzia OpenWeave Factory Hosting Tool jest wstawienie wybranych informacji konfiguracyjnych do magazynu trwałej konfiguracji urządzenia, gdzie urządzenie może je pobierać i używać w czasie działania. Trwała konfiguracja urządzenia jest zwykle przechowywana w pamięci wewnętrznej urządzenia. Szczegółowe informacje o tym, jak te dane są przechowywane i w jakim formacie, różnią się w zależności od platformy. Sama fabryka narzędzia do obsługi administracyjnej jest niezależna od ostatecznego formatu pamięci i używa kodu z oprogramowania układowego urządzenia do zapisywania danych w prawidłowy sposób. Interfejs użytkownika narzędzia jest w większości niezależny od typu konfigurowanego sprzętu, co oznacza, że podobne procesy produkcyjne można zastosować w różnych liniach produktów opartych na różnych platformach sprzętowych.

Narzędzie do obsługi fabryki jest zaprojektowane do pracy na hoście podłączonym do urządzenia docelowego przez interfejs debugowania lub kontroli – na przykład przez port JTAG lub SWD. Narzędzie działa przez wprowadzenie specjalnych danych do pamięci RAM urządzenia w specjalnie zakodowanej postaci. Następnie urządzenie zostaje poproszone o ponowne uruchomienie, po którym kod wbudowany w oprogramowanie układowe lokalizuje zakodowane dane, weryfikuje ich integralność i zapisuje zapisane wartości w pamięci trwałej w formacie odpowiednim dla platformy.

Kod w urządzeniu, który wykrywa i przetwarza wstrzykiwane dane obsługi administracyjnej, jest wbudowany w warstwę OpenWeave Device Policy i można go włączyć na dowolnej platformie. Po włączeniu ten kod jest uruchamiany automatycznie przy każdym uruchomieniu urządzenia, czyli w początkowej części procesu inicjowania urządzenia. Kod działa, skanując obszar pamięci RAM na danej platformie. Na platformach ze skromnymi uchwytami pamięci (np. <1M) skanowanie obejmuje całą dostępną pamięć RAM.

Dane dotyczące obsługi administracyjnej są umieszczane w pamięci RAM z łatwym do zidentyfikowania prefiksem, co umożliwia szybkie wyszukiwanie. Wartość kontroli integralności oparta na hasze kryptograficznym służy do potwierdzenia poprawności danych przed ich przetworzeniem.

Domyślnie narzędzie do obsługi administracyjnej wybiera lokalizację pamięci RAM, w której będzie wstrzykiwać dane obsługi administracyjnej na podstawie docelowej platformy urządzenia. Wybraną opcję można zastąpić za pomocą argumentu narzędzia. Zwykle nie jest wymagane, aby oprogramowanie układowe urządzenia rezerwowało lokalizację pamięci RAM specjalnie na potrzeby odbierania danych obsługi administracyjnej. Dane udostępniania są zwykle zapisywane w pamięci RAM, która jest przydzielana do innych celów, ale zwykle nie są one używane na wczesnym etapie uruchamiania urządzenia. Najczęściej wybierane są wierzchołki stosu początkowego lub skraj hali.

Narzędzie do obsługi fabrycznej do integracji z urządzeniem docelowym wykorzystuje zestaw zewnętrznych narzędzi programistycznych. Dostępne narzędzia zależą od typu urządzenia docelowego. Obecnie obsługiwane są 2 interfejsy urządzenia:

  • Sonda SEGGER J-Link jest połączona z portem JTAG lub SWD urządzenia
  • port szeregowy USB podłączony do Espressif ESP32

Interfejs J-Link korzysta z narzędzia SEGGER J-Link Commander (JLinkExe), które należy zainstalować osobno na hoście.

Interfejs ESP32 korzysta z polecenia Espressif esptool.py, które jest dostępne w pakiecie SDK ESP-IDF pakietu Espressif.

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

Narzędzie OpenWeave Factory do obsługi administracyjnej może udostępniać te typy informacji:

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

Mimo że urządzenie zwykle wymaga wszystkich tych informacji do prawidłowego działania, nie jest wymagane jednoczesne dostarczanie wszystkich tych informacji. W związku z tym różne rodzaje informacji mogą być dostępne na różnych etapach procesu produkcji. Dodatkowo w kolejnym kroku obsługi administracyjnej możesz zastąpić wcześniej udostępnione wartości nowymi.

Źródła informacji o obsłudze administracyjnej

Informacje o obsłudze administracyjnej urządzenia można dostarczyć do narzędzia do obsługi fabryki w następujący sposób:

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

Wiersz poleceń

W najprostszej postaci informacje o obsłudze administracyjnej urządzeń są określone bezpośrednio w wierszu poleceń narzędzia OpenWeave Factory podany do obsługi administracyjnej. Przykład:

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

Wartości binarne, takie jak certyfikat Weave i klucz prywatny, możesz określić w postaci ciągów Base-64 albo nazw plików zawierających wymagane dane w postaci nieprzetworzonej (binarnej).

Poniżej znajdziesz pełną listę dostępnych argumentów wiersza poleceń.

Plik CSV obsługi administracyjnej

Aby obsłużyć zbiorczą obsługę administracyjną urządzeń, narzędzie do obsługi fabrycznej może też odczytać dane obsługi administracyjnej z pliku danych o obsłudze administracyjnej w formacie CSV. Kolumny w tym pliku odpowiadają określonym typom danych obsługi administracyjnej – czyli Serial_Num, Certificate, Private_Key itd. Wiersze w pliku odpowiadają poszczególnym wartościom dotyczącym określonych urządzeń, indeksowanych według identyfikatora urządzenia Weave (Device_Id). Identyfikator konkretnego urządzenia do obsługi administracyjnej należy podać w wierszu poleceń. Przykład:

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

Obsługiwane są te kolumny CSV:

Nazwa Formatuj Opis
Device_Id 16 cyfr szesnastkowych Identyfikator urządzenia do tkania. Musisz być obecny
Serial_Num tekst Numer seryjny urządzenia.
Certificate ciąg Base-64 Certyfikat przypisany przez producenta urządzenia Weave.
Private_Key ciąg Base-64 Klucz prywatny przypisany przez producenta.
Pairing_Code tekst Wyplatanie kodu parowania.
Product_Rev liczba całkowita Numer wersji usługi.
Mfg_Date RRRR/MM/DD Data produkcji urządzenia.

Kolumny w pliku CSV mogą być wyświetlane w dowolnej kolejności. Wszystkie kolumny są opcjonalne (oprócz Device_Id). Wartości nieobecne w pliku CSV nie są udostępniane na urządzeniu.

Użytkownik może określić w wierszu polecenia poszczególne wartości udostępniania oprócz pliku CSV. W takim przypadku wartość wiersza poleceń jest nadrzędna w stosunku do wartości w pliku.

Narzędzie do obsługi fabryki obsługuje format pliku CSV zgodny z wynikami polecenia gen-provisioning-data narzędzia weave.

Serwer obsługi administracyjnej Nest

Narzędzie do obsługi fabryki obsługuje pobieranie wybranych informacji o obsłudze z serwera obsługi Nest za pomocą protokołu HTTPS. Protokół serwera obsługi administracyjnej możesz pobrać certyfikat urządzenia Weave przypisany przez producenta, odpowiadający mu klucz prywatny i kod parowania Weave z serwera obsługi administracyjnej.

Lokalizacja sieciowa serwera obsługi administracyjnej określa się, podając podstawowy adres URL w wierszu poleceń narzędzia do obsługi administracyjnej. Wybrane informacje o obsłudze administracyjnej są wybierane przez określenie identyfikatora urządzenia Weave w wierszu poleceń. 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ć poszczególne wartości obsługi administracyjnej w wierszu poleceń. W tym przypadku wartości podane w wierszu poleceń mają pierwszeństwo przed wartościami zwracanymi przez serwer.

Włączanie i wyłączanie obsługi administracyjnej na urządzeniach fabrycznych

Obsługą obsługi fabrycznej oprogramowania OpenWeave w oprogramowaniu układowym urządzenia steruje opcja konfiguracji czasu kompilacji WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING. Ta opcja jest domyślnie włączona. Tę funkcję można wyłączyć, zastępując opcję w pliku WeaveProjectConfig.h aplikacji. Przykład:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Zasadniczo można włączyć obsługę administracyjną fabryk w oprogramowaniu układowym urządzenia produkcyjnego , pod warunkiem, że interfejs debugowania urządzenia jest prawidłowo wyłączony na urządzeniach produkcyjnych. Można to zrobić za pomocą sprzętu (na przykład przedmuchując Bezpieczniki w SoC) lub w oprogramowaniu (np. używając bezpiecznego programu rozruchowego, który blokuje dostęp podczas debugowania w ramach procesu rozruchu).

Uruchamianie narzędzia do fabryki

Narzędzie do obsługi fabryki OpenWeave obsługuje następujące opcje wiersza poleceń:

Opcja Opis
--target <ciąg> Typ urządzenia docelowego. Dostępne opcje: nrf52840, esp32
--load-addr <hex-cyfry> Adres w pamięci urządzenia, na którym będą zapisywane dane o obsłudze.
--verbose, -v Dostosuj poziom szczegółowości danych wyjściowych. Użyj wielu argumentów, aby zwiększyć szczegółowość.
--serial-num <string> Ustaw numer seryjny urządzenia.
--device-id <hex-cyfry> Ustaw identyfikator urządzenia przypisany przez producenta.
--device-cert <base-64> | <nazwa-pliku> Ustaw certyfikat urządzenia przypisany przez producenta Weave.
--device-key <base-64> | <nazwa-pliku> Ustaw przypisany przez producenta klucz prywatny urządzenia Weave.
--pairing-code <ciąg> Ustaw kod parowania urządzenia.
--product-rev <integer> Ustaw wersję usługi 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. Wartość domyślna to 'JLinkExe'.
--jlink-if SWD | JTAG Typ interfejsu J-link. Wartość domyślna to SWD.
--jlink-speed <integer> | adaptacyjny | auto Szybkość interfejsu J-link.
--jlink-sn <ciąg> Numer seryjny sondy J-Link.
--esptool-cmd <ścieżka-nazwy> Ścieżka do polecenia esptool. Wartość domyślna to 'esptool.py'.
--port <ścieżka-nazwy> Nazwa urządzenia portowego COM dla ESP32. Wartość domyślna to /tty/USB0.
--speed <integer> Szybkość transmisji portu COM. Domyślna wartość to 115200.
--prov-csv-file <nazwa-pliku> Odczyt danych o obsłudze administracyjnej urządzeń z pliku CSV obsługi administracyjnej.
--prov-server <url> Odczytywanie danych obsługi administracyjnej urządzeń z serwera obsługi administracyjnej.
--disable-server-validation W przypadku używania protokołu HTTPS wyłącz weryfikację certyfikatu przedstawianego przez serwer obsługi administracyjnej.

Przykłady

To polecenie powoduje ustawienie określonych wartości identyfikatora urządzenia, numeru seryjnego, wersji i kodu parowania. Data produkcji jest ustawiona na bieżącą. Certyfikat urządzenia i klucz prywatny są ustawione na potrzeby testowania wartości podanych w pliku CSV udostępnionym 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