Google 致力于为黑人社区推动种族平等。查看具体举措
此页面由 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 Factory设置工具可以设置以下类型的信息:

  • 设备序列号
  • 制造商分配的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