Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

OpenWeave工廠配置工具

jinja-placeholder-0 .md“> 在GitHub上查看源代碼

OpenWeave工廠預配工具提供了一種方便的方法,可將持久的按設備配置信息預配到支持Weave的設備上。 Factory Provisioning Tool旨在用作生產線流程的一部分,該流程在向客戶發貨之前,用唯一的身份和憑證信息標記單個設備。開發人員還可以使用它來個性化開發過程中使用的預生產硬件。

操作原理

OpenWeave Factory Provisioning Tool的目標是將選擇的配置信息注入設備的持久性配置存儲中,設備固件可以在運行時選擇存儲該配置信息並在運行時使用。持久性設備配置通常存儲在設備的內部閃存中,儘管具體如何存儲數據以及以何種格式存儲的詳細信息因平台而異。 Factory Provisioning Tool本身與最終的存儲格式無關,並且依靠設備固件中的代碼以正確的方式寫入數據。該工具的用戶界面在很大程度上也與所配置的硬件類型無關,這意味著可以在基於不同硬件平台的產品線中採用類似的製造過程。

Factory Provisioning Tool設計為在主機上運行的工作,該主機通過某種形式的調試或控制接口(例如JTAG或SWD端口)連接到目標設備。該工具通過以特殊編碼形式將配置信息注入設備的RAM中來工作。然後指示設備重啟,這時設備固件內置的代碼將找到編碼數據,驗證其完整性,並將包含的值以適合平台的格式寫入持久性存儲中。

檢測和處理注入的置備數據的設備上代碼內置在OpenWeave設備層中,並且可以在任何受支持的平台上啟用。啟用後,代碼會在設備每次啟動時在設備初始化過程的早期自動運行。該代碼通過掃描特定於平台的RAM區域進行操作。在內存安裝適度(例如,<1M)的平台上,掃描將涵蓋所有可用的RAM。

當置入RAM中時,預配置數據將使用易於識別的前綴進行編碼,從而可以在掃描過程中快速找到它們。基於加密哈希的完整性檢查值用於在處理之前確認數據的有效性。

默認情況下,配置工具會根據目標設備平台選擇要在其中註入配置數據的RAM位置。可以通過該工具的參數來覆蓋此選擇。通常,不需要設備固件保留專門用於接收預配置數據的RAM位置。更典型地,將預配置數據寫入分配給其他目的的RAM位置,但通常在設備啟動過程的早期未使用。常見的選擇是初始系統堆棧的頂部,或堆區域的遠端。

Factory Provisioning Tool依賴於一組外部開發工具來連接到目標設備。所使用的特定工具取決於目標設備的類型。當前支持兩個設備接口:

  • 連接到設備的JTAG或SWD端口的SEGGER J-Link調試探針
  • USB串行端口連接到Espressif ESP32

J-Link界面依賴SEGGER J-Link Commander工具(JLinkExe),該工具必須單獨安裝在主機上。

ESP32界面依賴於Espressif esptool.py命令,該命令作為Espressif的ESP-IDF SDK的一部分提供。

可以提供的信息類型

OpenWeave工廠配置工具能夠配置以下類型的信息:

  • 設備序列號
  • 製造商分配的Weave設備ID
  • 製造商分配的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文件

為了適應設備的大量供應,工廠供應工具還可以從CSV格式的供應數據文件中讀取供應數據。該文件的列應與特定的供應數據類型相對應-即Serial_NumCertificatePrivate_Key等。文件中的行給出了特定設備的各個值,這些值由Weave設備ID( Device_Id )索引。必須在命令行上指定要配置的特定設備的ID。例如:

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

支持以下CSV列:

名稱格式描述
Device_Id 16位十六進制數字編織設備ID。 必須存在。
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文件之外的命令行上指定各個配置值,在這種情況下,命令行值優先於文件中的值。

Factory Provisioning Tool支持的CSV文件格式與weave工具的gen-provisioning-data命令的輸出兼容。

巢狀佈建伺服器

Factory Provisioning Tool支持使用基於HTTPS的協議從Nest設置服務器獲取選擇的設置信息。供應服務器協議可用於從供應服務器獲取製造商分配的Weave設備證書,相應的私鑰和Weave配對代碼。

設置服務器的網絡位置是通過在設置工具命令行上提供基本URL來指定的。通過在命令行上指定Weave設備ID,可以選擇所需的配置信息。例如:

 ./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中的保險絲熔斷)或軟件(例如,通過安全的引導加載程序來阻止調試訪問,作為引導過程的一部分)來實現此目的。

運行工廠配置工具

OpenWeave工廠配置工具支持以下命令行選項:

選項描述
--target <字符串> 目標設備類型。選項包括: nrf52840esp32
--load-addr <十六進制數字> 設備存儲器中將寫入預配置數據的地址。
--verbose,-v 調整輸出詳細程度。使用多個參數來增加詳細程度。
--serial-num <字符串> 設置設備序列號。
--device-id <十六進制數字> 設置製造商分配的設備ID。
--device-cert <base-64> | <文件名> 設置製造商分配的Weave設備證書。
--device-key <基本64> <文件名> 設置製造商分配的Weave設備私鑰。
--pairing-code <字符串> 設置設備配對代碼。
--product-rev <整數> 設置設備的產品版本。
--mfg-date <YYYY / MM / DD> | 今天 現在 設置設備的生產日期。
--jlink-cmd <路徑名> JLink命令的路徑。默認為“ JLinkExe”。
--jlink-if SWD | JTAG J-Link接口類型。默認為SWD。
--jlink-speed <整數> | 適應性 | 汽車 J-Link接口速度。
--jlink-sn <字串> J-Link探針序列號。
--esptool-cmd <路徑名> esptool命令的路徑。默認為'esptool.py'。
--port <路徑名> ESP32的COM端口設備名稱。默認為/ tty / USB0。
--speed <整數> COM端口的波特率。默認為115200
--prov-csv-file <文件名> 從配置CSV文件中讀取設備配置數據。
--prov-server <網址> 從配置服務器讀取設備配置數據。
--disable-server-validation 使用HTTPS時,請禁用對供應服務器提供的證書的驗證。

例子

以下命令將設備ID,序列號,產品版本和配對代碼設置為特定值。製造日期設置為當前日期。並將設備證書和私鑰設置為測試openweave-core源存儲庫隨附的CSV文件中給定的值。

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