Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

OpenWeave Factory Provisioning Tool

jinja-placeholder-0 .md "> Посмотреть источник на GitHub

Средство OpenWeave Factory Provisioning Tool предоставляет удобные средства для предоставления постоянной информации о конфигурации каждого устройства на устройства с поддержкой Weave. Factory Provisioning Tool предназначен для использования в рамках производственной линии, которая маркирует отдельные устройства с уникальной идентификационной информацией и учетными данными перед отправкой клиентам. Он также может быть использован разработчиками для персонализации опытного оборудования, используемого в процессе разработки.

Теория Операции

Целью OpenWeave Factory Provisioning Tool является внедрение выбранной информации о конфигурации в постоянное хранилище конфигурации устройства, где она может быть собрана и использована во время выполнения встроенным программным обеспечением устройства. Постоянная конфигурация устройства обычно хранится во внутренней флэш-памяти устройства, хотя детали того, как именно хранятся данные и в каком формате, варьируются от платформы к платформе. Сам инструмент Factory Provisioning Tool не зависит от окончательного формата хранения и использует код в прошивке устройства для правильной записи данных. Пользовательский интерфейс инструмента также в значительной степени не зависит от типа настраиваемого оборудования, а это означает, что аналогичные производственные процессы могут быть использованы в линейках продуктов, основанных на разных аппаратных платформах.

Factory Provisioning Tool предназначен для работы на хост-компьютере, который подключен к целевому устройству через интерфейс отладки или управления, например, через порт JTAG или SWD. Инструмент работает, вводя информацию о предоставлении в ОЗУ устройства в специально закодированной форме. Затем устройство получает команду на перезапуск, после чего встроенный в прошивку устройства код определяет местонахождение закодированных данных, проверяет их целостность и записывает содержащиеся в них значения в постоянное хранилище в формате, подходящем для платформы.

Код на устройстве, который обнаруживает и обрабатывает введенные данные обеспечения, встроен в уровень устройств OpenWeave и может быть включен на любой поддерживаемой платформе. После включения код запускается автоматически каждый раз при загрузке устройства, на ранней стадии процесса инициализации устройства. Код работает путем сканирования области ОЗУ для конкретной платформы. На платформах со скромным объемом памяти (например, <1M) сканирование охватывает всю доступную оперативную память.

При помещении в оперативную память данные инициализации кодируются с легко идентифицируемым префиксом, который позволяет быстро найти их в процессе сканирования. Значение проверки целостности, основанное на криптографическом хэше, используется для подтверждения достоверности данных перед обработкой.

По умолчанию инструмент обеспечения выбирает место в ОЗУ, в которое необходимо ввести данные предоставления, на основе платформы целевого устройства. Этот выбор может быть отменен через аргумент инструмента. В общем случае не требуется, чтобы прошивка устройства резервировала место в ОЗУ специально для приема данных обеспечения. Более типично, данные инициализации записываются в место ОЗУ, которое выделено для других целей, но обычно не используется на ранних этапах процесса загрузки устройства. Обычный выбор - вершина начального системного стека или дальний конец области кучи.

Factory Provisioning Tool использует интерфейс внешних инструментов разработки для взаимодействия с целевым устройством. Конкретные используемые инструменты зависят от типа целевого устройства. В настоящее время поддерживаются два интерфейса устройства:

  • датчик отладки SEGGER J-Link, подключенный к порту JTAG или SWD устройства
  • последовательный порт USB, подключенный к Espressif ESP32

Интерфейс J-Link основан на инструменте SEGGER J-Link Commander (JLinkExe), который должен быть отдельно установлен на хост-компьютере.

Интерфейс ESP32 опирается на команду Espressif esptool.py, которая предоставляется как часть ESP-IDF SDK Espressif.

Типы информации, которые могут быть предоставлены

Средство OpenWeave Factory Provisioning Tool может предоставлять следующие типы информации:

  • Серийный номер устройства
  • Назначенный производителем идентификатор устройства Weave
  • Присвоенный производителем сертификат Weave и закрытый ключ
  • Ткать код сопряжения
  • Номер версии продукта
  • Дата производства

Хотя, как правило, устройству потребуется вся вышеуказанная информация для правильной работы, не требуется предоставлять всю информацию одновременно. Таким образом, предоставление различных типов информации может происходить в разные моменты производственного процесса. Кроме того, возможно заменить ранее предоставленные значения новыми значениями на следующем этапе предоставления.

Источники предоставления информации

Информация о подготовке устройства может быть передана в Factory Provisioning Tool следующими способами:

  • Аргументы командной строки
  • Использование подготовительного CSV-файла
  • Получая значения с сервера предоставления Nest

Командная строка

В простейшей форме информация о настройке устройства указывается непосредственно в командной строке OpenWeave Factory Provisioning Tool. Например:

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

Значения двоичных данных, такие как сертификат Weave и закрытый ключ, могут быть указаны либо в виде строк base-64, либо в виде имен файлов, содержащих требуемые данные в необработанном (двоичном) виде.

Смотрите ниже полный список доступных аргументов командной строки.

Предоставление файла CSV

Чтобы обеспечить массовую инициализацию устройств, Factory Provisioning Tool также может считывать данные инициализации из файла данных инициализации в формате CSV. Предполагается, что столбцы этого файла соответствуют конкретным типам данных обеспечения, т. Serial_Num , Certificate , Private_Key и т. Д. Строки в файле дают отдельные значения для конкретных устройств, проиндексированные с помощью идентификатора устройства Weave ( Device_Id ). Идентификатор конкретного устройства для инициализации должен быть указан в командной строке. Например:

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

Поддерживаются следующие столбцы CSV:

название Формат Описание
Device_Id 16 шестнадцатеричных цифр Переплетите идентификатор устройства. Должен присутствовать.
Serial_Num строка Серийный номер устройства.
Certificate Строка Base-64 Сертификат устройства Weave, присвоенный производителем.
Private_Key Строка Base-64 Присвоенный производителем личный ключ Weave.
Pairing_Code строка Сплетите код сопряжения.
Product_Rev целое число Номер версии продукта.
Mfg_Date YYYY / MM / DD Дата изготовления устройства.

Столбцы могут появляться в файле CSV в любом порядке. Все столбцы являются необязательными, за исключением Device_Id . Любые значения, отсутствующие в файле CSV, просто не предоставляются на устройстве.

Пользователь может указать отдельные значения обеспечения в командной строке в дополнение к CSV-файлу, и в этом случае значение командной строки имеет приоритет над значениями в файле.

Поддержка формата файлов CSV с помощью Factory Provisioning Tool совместима с выводом команды gen-provisioning-data инструмента weave .

Сервер предоставления гнезд

Factory Provisioning Tool поддерживает выборку информации о выделении ресурсов с сервера предоставления Nest с использованием протокола на основе HTTPS. Протокол сервера обеспечения может использоваться для получения назначенного производителем сертификата устройства Weave, соответствующего закрытого ключа и кода сопряжения Weave с сервера обеспечения.

Сетевое расположение сервера предоставления указывается путем предоставления базового URL-адреса в командной строке средства обеспечения. Желаемая информация о выделении ресурсов выбирается путем указания идентификатора устройства Weave в командной строке. Например:

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

Пользователь может указать отдельные значения обеспечения в командной строке в дополнение к URL-адресу сервера обеспечения. В этом случае значения, указанные в командной строке, имеют приоритет над значениями, возвращаемыми сервером.

Включение / отключение поддержки фабричной инициализации

Поддержка заводской инициализации OpenWeave в прошивке устройства контролируется параметром конфигурации во время компиляции WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING . Эта опция включена по умолчанию. Эту функцию можно отключить, переопределив параметр в файле приложения WeaveProjectConfig.h . Например:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

В общем случае безопасное включение заводской инициализации в программно-аппаратном обеспечении производственных устройств при условии, что интерфейс отладки устройства соответствующим образом отключен на производственных устройствах. Это может быть достигнуто либо с помощью аппаратных средств (например, с помощью предохранителей в SoC), либо с помощью программного обеспечения (например, с помощью безопасного загрузчика, который блокирует отладочный доступ как часть процесса загрузки).

Запуск Factory Provisioning Tool

Средство OpenWeave Factory Provisioning Tool поддерживает следующие параметры командной строки:

вариант Описание
--target <строка> Тип целевого устройства. Варианты выбора: nrf52840 , esp32
--load-addr <шестнадцатеричные цифры> Адрес в памяти устройства, по которому будут записываться данные инициализации.
--verbose, -v Отрегулируйте выходной уровень детализации. Используйте несколько аргументов для увеличения многословия.
--serial-num <строка> Установите серийный номер устройства.
--device-id <шестнадцатеричные цифры> Установите назначенный производителем идентификатор устройства.
--device-cert <base-64> | <имя файла> Установите назначенный производителем сертификат устройства Weave.
--device-key <base-64> | <имя файла> Установите назначенный изготовителем закрытый ключ устройства Weave.
--pairing-code <string> Установите код подключения устройства.
--product-rev <целое число> Установите версию продукта для устройства.
--mfg-date <ГГГГ / ММ / ДД> | сегодня | сейчас Установите дату изготовления устройства.
--jlink-cmd <путь-имя> Путь к команде JLink. По умолчанию используется JLinkExe.
--jlink-if SWD | JTAG Тип интерфейса J-Link. По умолчанию SWD.
--jlink-speed <целое число> | адаптивный | авто Скорость интерфейса J-Link.
--jlink-sn <string> Серийный номер зонда J-Link.
--esptool-cmd <путь-имя> Путь к команде esptool. По умолчанию используется «esptool.py».
--port <путь-имя> Имя устройства COM-порта для ESP32. По умолчанию / tty / USB0.
--speed <целое число> Скорость передачи для COM-порта. По умолчанию 115200.
--prov-csv-file <имя-файла> Чтение данных о подготовке устройства из файла CSV.
--prov-server <url> Чтение данных о подготовке устройства с сервера подготовки.
--disable-сервер проверка При использовании HTTPS отключите проверку сертификата, предоставленного сервером обеспечения.

Примеры

Следующая команда устанавливает для идентификатора устройства, серийного номера, версии продукта и кода сопряжения определенные значения. Дата изготовления установлена ​​на текущую дату. А сертификат устройства и закрытый ключ настроены на тестовые значения, указанные в CSV-файле, поставляемом с 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