准备首次测试微控制器主板 - FreeRTOS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

准备首次测试微控制器主板

移植 FreeRTOS 界面时,您可以使用适用于 FreeRTOS 的 IDT 进行测试。在移植了针对主板设备驱动程序的 FreeRTOS 界面之后,您可以使用 AWS IoT Device Tester 在微控制器主板上运行资格测试。

添加库移植层

要为您的设备移植 FreeRTOS,请按照 FreeRTOS 移植指南中的说明操作。

配置 AWS 凭证

您需要为 Device Tester 配置 AWS 凭证以便与 AWS 云通信。有关更多信息,请参阅设置用于开发的 AWS 凭证和区域。必须在 devicetester_extract_location/devicetester_afreertos_[win|mac|linux]/configs/config.json 配置文件中指定有效的 AWS 凭证。

在适用于 FreeRTOS 的 IDT 中创建设备池

要测试的设备排列在设备池中。每个设备池包含一个或多个相同的设备。您可以配置适用于 FreeRTOS 的 IDT 来测试某个池中的单个设备或多个设备。为了加快资格测试过程,适用于 FreeRTOS 的 IDT 可以并行测试具有相同规格的设备。它使用轮询方法,在设备池中的各个设备上执行不同的测试组。

您可以通过编辑 devices 文件夹中 device.json 模板的 configs 部分,将一个或多个设备添加到设备池中。

注意

同一个池中的所有设备必须具有相同的技术规格和 SKU。

要允许针对不同测试组并行生成源代码,适用于 FreeRTOS 的 IDT 需要将源代码复制到适用于 FreeRTOS 的 IDT 提取文件夹的结果文件夹中。必须使用 或 testdata.sourcePath sdkPath 变量引用构建或刷写命令中的源代码路径。适用于 FreeRTOS 的 IDT 使用所复制源代码的临时路径来替换此变量。有关更多信息,请参阅适用于 FreeRTOS 的 IDT 变量

以下 device.json 示例文件用于创建具有多个设备的设备池:

[ { "id": "pool-id", "sku": "sku", "features": [ { "name": "WIFI", "value": "Yes | No" }, { "name": "Cellular", "value": "Yes | No" }, { "name": "OTA", "value": "Yes | No", "configs": [ { "name": "OTADataPlaneProtocol", "value": "HTTP | MQTT | Both" } ] }, { "name": "BLE", "value": "Yes | No" }, { "name": "TCP/IP", "value": "On-chip | Offloaded | No" }, { "name": "TLS", "value": "Yes | No" }, { "name": "PKCS11", "value": "RSA | ECC | Both | No" }, { "name": "KeyProvisioning", "value": "Import | Onboard | No" } ], "devices": [ { "id": "device-id", "connectivity": { "protocol": "uart", "serialPort": "/dev/tty*" }, ***********Remove the section below if the device does not support onboard key generation*************** "secureElementConfig" : { "publicKeyAsciiHexFilePath": "absolute-path-to/public-key-txt-file: contains-the-hex-bytes-public-key-extracted-from-onboard-private-key", "secureElementSerialNumber": "secure-element-serialNo-value" }, ********************************************************************************************************** "identifiers": [ { "name": "serialNo", "value": "serialNo-value" } ] } ] } ]

device.json 文件中使用以下属性:

id

用户定义的字母数字 ID,用于唯一地标识设备池。属于同一个池的设备必须具有相同的类型。运行一组测试时,池中的设备将用于对工作负载进行并行化处理。

sku

唯一标识您正在测试的主板的字母数字值。该 SKU 用于跟踪符合条件的主板。

注意

如果您希望在 AWS 合作伙伴设备目录中列出您的主板,您在此处指定的 SKU 必须与在列出过程中使用的 SKU 相匹配。

features

包含设备支持的功能的数组。Device Tester 使用此信息来选择要运行的资格测试。

支持的值为:

TCP/IP

指示您的主板是否支持 TCP/IP 堆栈,以及是片上 (MCU) 支持还是分载到另一个模块。资格认证需要使用 TCP/IP。

WIFI

指示您的主板是否具有 Wi-Fi 功能。如果 设置为 No Cellular ,则必须设置为 Yes

Cellular

指示您的主板是否具有蜂窝功能。如果 设置为 No WIFI ,则必须设置为 Yes。当此功能设置为 时Yes,FFullSecureSockets 测试将使用 AWS t2 EC2 实例执行,这可能会给您的账户带来额外成本。有关更多信息,请参阅 Amazon EC2 定价

TLS

指示您的主板是否支持 TLS。资格认证需要使用 TLS。

PKCS11

指示主板支持的公有密钥加密算法。资格认证需要使用 PKCS11。支持的值为 ECCRSA BothNoBoth 表示主板支持 ECCRSA 算法。

KeyProvisioning

指示将受信任的 X.509 客户端证书写入主板的方法。有效值为 ImportOnboardNo。资格认证需要进行密钥预置。

  • 如果您的主板允许导入私有密钥,请使用 Import。IDT 将创建一个私有密钥并将其构建为 FreeRTOS 源代码。

  • 如果您的主板支持生成板载私有密钥(例如,如果您的设备具有安全元件,或者如果您希望生成自己的设备密钥对和证书),请使用 Onboard。确保您在每个设备部分中添加一个 secureElementConfig 元素,并将公有密钥文件的绝对路径放在 publicKeyAsciiHexFilePath 字段中。

  • 如果您的主板不支持密钥预置,请使用 No

OTA

指示您的主板是否支持无线 (OTA) 更新功能。OtaDataPlaneProtocol 属性指示设备支持哪个 OTA 数据平面协议。如果设备不支持 OTA 功能,则忽略此属性。在选择 "Both" 后,由于同时运行 MQTT、HTTP 和混合测试,因此 OTA 测试执行时间会延长。

BLE

指示您的主板是否支持低功耗蓝牙 (BLE) 功能。

devices.id

用户定义的测试的设备的唯一标识符。

devices.connectivity.protocol

用于与此设备通信的通信协议。支持的值:uart

devices.connectivity.serialPort

主机连接到所测试设备时使用的串行端口。

devices.secureElementConfig.PublicKeyAsciiHexFilePath

该文件的绝对路径,包含从板载私有密钥中提取的十六进制字节公有密钥。

示例格式:

3059 3013 0607 2a86 48ce 3d02 0106 082a 8648 ce3d 0301 0703 4200 04cd 6569 ceb8 1bb9 1e72 339f e8cf 60ef 0f9f b473 33ac 6f19 1813 6999 3fa0 c293 5fae 08f1 1ad0 41b7 345c e746 1046 228e 5a5f d787 d571 dcb2 4e8d 75b3 2586 e2cc 0c

如果您的公有密钥采用 .der 格式,您可以直接对公有密钥进行十六进制编码以生成十六进制文件。

.der 公有密钥生成十六进制文件的命令示例:

xxd -p pubkey.der > outFile

如果您的公有密钥采用 .pem 格式,则可以提取 base64 编码的部分,将其解码为二进制格式,然后十六进制编码它以生成十六进制文件。

例如,使用以下命令为 .pem 公有密钥生成十六进制文件:

  1. 去除键的 base64 编码部分(带有标头和脚注 ),将其存储在文件中,例如将其命名为 base64key,然后运行此命令以将其转换为 .der 格式:

    base64 —decode base64key > pubkey.der
  2. 运行 xxd 命令以将其转换为十六进制格式。

    xxd -p pubkey.der > outFile
devices.secureElementConfig.SecureElementSerialNumber

(可选)安全元件的序列号。如果序列号随设备公有密钥印出,在运行 FreeRTOS 演示/测试项目时,请填写此字段。

identifiers

(可选)任意名称/值对的数组。您可以在下一部分所述的生成和刷写命令中使用这些值。

配置构建、刷写和测试设置

要让适用于 FreeRTOS 的 IDT 自动生成并刷写主板,您必须配置 IDT 针对硬件运行生成和刷写命令。生成和刷写设置在位于 userdata.json 文件夹的 config 模板文件中配置。

为测试设备配置设置

生成、刷写和测试设置在 configs/userdata.json 文件中进行。我们通过在 中加载客户端和服务器证书及密钥来支持 Echo Server 配置customPath。有关更多信息,请参阅 https://docs.amazonaws.cn/freertos/latest/portingguide/afr-echo-server.html 移植指南 中的FreeRTOS设置 Echo 服务器。以下 JSON 示例说明如何配置适用于 的 IDT FreeRTOS 以测试多个设备:

{ "sourcePath": "/absolute-path-to/freertos", "vendorPath": "{{testData.sourcePath}}/vendors/vendor-name/boards/board-name", // ***********The sdkConfiguration block below is needed if you are not using the default, unmodified FreeRTOS repo. // In other words, if you are using the default, unmodified FreeRTOS repo then remove this block*************** "sdkConfiguration": { "name": "sdk-name", "version": "sdk-version", "path": "/absolute-path-to/sdk" }, "buildTool": { "name": "your-build-tool-name", "version": "your-build-tool-version", "command": [ "/absolute-path-to/build-parallel.sh {{testData.sourcePath}} {{enableTests}}" ] }, "flashTool": { "name": "your-flash-tool-name", "version": "your-flash-tool-version", "command": [ "/absolute-path-to/flash-parallel.sh {{testData.sourcePath}} {{device.connectivity.serialPort}} {{buildImageName}}" ], "buildImageInfo" : { "testsImageName": "tests-image-name", "demosImageName": "demos-image-name" } }, "clientWifiConfig": { "wifiSSID": "ssid", "wifiPassword": "password", "wifiSecurityType": "eWiFiSecurityOpen | eWiFiSecurityWEP | eWiFiSecurityWPA | eWiFiSecurityWPA2 | eWiFiSecurityWPA3" }, "testWifiConfig": { "wifiSSID": "ssid", "wifiPassword": "password", "wifiSecurityType": "eWiFiSecurityOpen | eWiFiSecurityWEP | eWiFiSecurityWPA | eWiFiSecurityWPA2 | eWiFiSecurityWPA3" }, //********** //This section is used to start echo server based on server certificate generation method, //When certificateGenerationMethod is set as Automatic specify the eccCurveFormat to generate certifcate and key based on curve format, //When certificateGenerationMethod is set as Custom specify the certificatePath and PrivateKeyPath to be used to start echo server //********** "echoServerCertificateConfiguration": { "certificateGenerationMethod": "Automatic | Custom", "customPath": { "clientCertificatePath":"/path/to/clientCertificate", "clientPrivateKeyPath": "/path/to/clientPrivateKey", "serverCertificatePath":"/path/to/serverCertificate", "serverPrivateKeyPath": "/path/to/serverPrivateKey" }, "eccCurveFormat": "P224 | P256 | P384 | P521" }, "echoServerConfiguration": { "securePortForSecureSocket": 33333, // Secure tcp port used by SecureSocket test. Default value is 33333. Ensure that the port configured isn't blocked by the firewall or your corporate network "insecurePortForSecureSocket": 33334, // Insecure tcp port used by SecureSocket test. Default value is 33334. Ensure that the port configured isn't blocked by the firewall or your corporate network "insecurePortForWiFi": 33335 // Insecure tcp port used by Wi-Fi test. Default value is 33335. Ensure that the port configured isn't blocked by the firewall or your corporate network }, "otaConfiguration": { "otaFirmwareFilePath": "{{testData.sourcePath}}/relative-path-to/ota-image-generated-in-build-process", "deviceFirmwareFileName": "ota-image-name-on-device", "otaDemoConfigFilePath": "{{testData.sourcePath}}/relative-path-to/ota-demo-config-header-file", "codeSigningConfiguration": { "signingMethod": "AWS | Custom", "signerHashingAlgorithm": "SHA1 | SHA256", "signerSigningAlgorithm": "RSA | ECDSA", "signerCertificate": "arn:partition:service:region:account-id:resource:qualifier | /absolute-path-to/signer-certificate-file", "signerCertificateFileName": "signerCertificate-file-name", "compileSignerCertificate": boolean, // ***********Use signerPlatform if you choose aws for signingMethod*************** "signerPlatform": "AmazonFreeRTOS-Default | AmazonFreeRTOS-TI-CC3220SF", "untrustedSignerCertificate": "arn:partition:service:region:account-id:resourcetype:resource:qualifier", // ***********Use signCommand if you choose custom for signingMethod*************** "signCommand": [ "/absolute-path-to/sign.sh {{inputImageFilePath}} {{outputSignatureFilePath}}" ] } }, // ***********Remove the section below if you're not configuring CMake*************** "cmakeConfiguration": { "boardName": "board-name", "vendorName": "vendor-name", "compilerName": "compiler-name", "frToolchainPath": "/path/to/freertos/toolchain", "cmakeToolchainPath": "/path/to/cmake/toolchain" }, "freertosFileConfiguration": { "required": [ { "configName": "pkcs11Config", "filePath": "{{testData.sourcePath}}/vendors/vendor-name/boards/board-path/aws_tests/config_files/core_pkcs11_config.h" }, { "configName": "pkcs11TestConfig", "filePath": "{{testData.sourcePath}}/vendors/vendor-name/boards/board-path/aws_tests/config_files/iot_test_pkcs11_config.h" } ], "optional": [ { "configName": "otaAgentTestsConfig", "filePath": "{{testData.sourcePath}}/vendors/vendor-name/boards/board-path/aws_tests/config_files/aws_ota_agent_config.h" }, { "configName": "otaAgentDemosConfig", "filePath": "{{testData.sourcePath}}/vendors/vendor-name/boards/board-path/aws_demos/config_files/aws_ota_agent_config.h" } ] } }

下面列出了在 userdata.json 中使用的属性:

sourcePath

移植的 FreeRTOS 源代码的根目录的路径。对于使用开发工具包的并行测试sourcePath,可以使用 {{userData.sdkConfiguration.path}} 占位符设置 。例如:

{ "sourcePath":"{{userData.sdkConfiguration.path}}/freertos" }
vendorPath

供应商特定 FreeRTOS 代码的路径。对于串行测试,vendorPath 可以设置为绝对路径。例如:

{ "vendorPath":"C:/path-to-freertos/vendors/espressif/boards/esp32" }

对于并行测试,vendorPath 可以使用 {{testData.sourcePath}} 占位符进行设置。例如:

{ "vendorPath":"{{testData.sourcePath}}/vendors/espressif/boards/esp32" }

仅当vendorPath在没有开发工具包的情况下运行时,变量才是必需的,否则可将其删除。

注意

在没有开发工具包的情况下并行运行测试时{{testData.sourcePath}},、、 字段中必须使用 vendorPath 占位符buildToolflashTool。使用单个设备运行测试时,vendorPathbuildToolflashTool 字段中必须使用绝对路径。在使用 开发工具包运行时,、 {{sdkPath}}sourcePath 命令中必须使用 buildTool flashTool 占位符。

sdkConfiguration

如果您对文件和文件夹结构FreeRTOS所做的任何修改超出了移植所需的条件,则需要在此数据块中配置开发工具包信息。如果您没有通过移植到 开发工具包FreeRTOS内的 进行资格认证,则应完全省略此数据块。

sdkConfiguration.name

与 一起使用的开发工具包的名称FreeRTOS。如果您没有使用开发工具包,则应该忽略整个sdkConfiguration块。

sdkConfiguration.version

与 一起使用的开发工具包的版本FreeRTOS。如果您没有使用开发工具包,则应该忽略整个sdkConfiguration块。

sdkConfiguration.path

包含FreeRTOS代码的开发工具包目录的绝对路径。如果您没有使用开发工具包,则应该忽略整个sdkConfiguration块。

buildTool

您的生成脚本(.bat 或 .sh)的完整路径,该脚本包含用于生成源代码的命令。对构建命令中的源代码路径的所有引用必须替换为 AWS IoT Device Tester 变量,对开发工具包路径的{{testdata.sourcePath}}引用应替换为 {{sdkPath}}

buildImageInfo
testsImageName

freertos-source/tests 文件夹中构建测试时由构建命令生成的文件的名称。

demosImageName

freertos-source/demos 文件夹中构建测试时由构建命令生成的文件的名称。

flashTool

您的刷写脚本(.sh 或 .bat)的完整路径,该脚本应该包含您设备的刷写命令。对刷写命令中的源代码路径的所有引用都必须替换为适用于 的 IDT FreeRTOS 变量,而对开发工具包路径{{testdata.sourcePath}}的所有引用都必须替换为适用于 的 IDT FreeRTOS 变量{{sdkPath}}

clientWifiConfig

客户端 Wi-Fi 配置。Wi-Fi 库测试要求 MCU 主板连接到两个接入点。(两个接入点可以是相同的。) 此属性配置第一个接入点的 Wi-Fi 设置。一些 Wi-Fi 测试用例需要接入点有一定的安全性,不能处于开放状态。请确保两个访问点与运行 IDT 的主机位于同一子网中。

wifi_ssid

Wi-Fi SSID。

wifi_password

Wi-Fi 密码。

wifiSecurityType

使用的 Wi-Fi 安全类型。以下值之一:

  • eWiFiSecurityOpen

  • eWiFiSecurityWEP

  • eWiFiSecurityWPA

  • eWiFiSecurityWPA2

  • eWiFiSecurityWPA3

注意

如果您的主板不支持 Wi-Fi,您仍须在 clientWifiConfig 文件中包含 device.json 部分,但您可以忽略这些属性的值。

testWifiConfig

测试 Wi-Fi 配置。Wi-Fi 库测试要求 MCU 主板连接到两个接入点。(两个接入点可以是相同的。) 此属性配置第二个接入点的 Wi-Fi 设置。一些 Wi-Fi 测试用例需要接入点有一定的安全性,不能处于开放状态。请确保两个访问点与运行 IDT 的主机位于同一子网中。

wifiSSID

Wi-Fi SSID。

wifiPassword

Wi-Fi 密码。

wifiSecurityType

使用的 Wi-Fi 安全类型。以下值之一:

  • eWiFiSecurityOpen

  • eWiFiSecurityWEP

  • eWiFiSecurityWPA

  • eWiFiSecurityWPA2

  • eWiFiSecurityWPA3

注意

如果您的主板不支持 Wi-Fi,您仍须在 testWifiConfig 文件中包含 device.json 部分,但您可以忽略这些属性的值。

echoServerCertificateConfiguration

用于安全套接字测试的可配置 Echo 服务器证书生成占位符。此字段为必填。

certificateGenerationMethod

指定是自动生成还是手动提供服务器证书。

customPath

如果 certificateGenerationMethod 是“Custom”,则 certificatePathprivateKeyPath 是必需的。

certificatePath

指定服务器证书的文件路径。

privateKeyPath

指定私有密钥的文件路径。

eccCurveFormat

指定主板支持的曲线格式。在 中将 PKCS11 设置为“ecc”时是必需的device.json。有效值为“P224”、“P256”、“P384”或“P521”。

echoServerConfiguration

适用于 WiFi 和安全套接字测试的可配置 Echo 服务器端口。此字段为可选项。

securePortForSecureSocket

用于设置使用 TLS 的 Echo 服务器以进行安全套接字测试的端口。默认值是 33333。确保配置的端口未被防火墙或公司网络阻止。

insecurePortForSecureSocket

用于设置不使用 TLS 的 Echo 服务器以进行安全套接字测试的端口。测试中使用的默认值为 33334。确保配置的端口未被防火墙或公司网络阻止。

insecurePortForWiFi

用于设置不使用 TLS 的 Echo 服务器以进行 WiFi 测试的端口。测试中使用的默认值为 33335。确保配置的端口未被防火墙或公司网络阻止。

otaConfiguration

OTA 配置。[可选]

otaFirmwareFilePath

在生成之后,所创建 OTA 映像的完整路径。例如,{{testData.sourcePath}}/relative-path/to/ota/image/from/source/root

deviceFirmwareFileName

MCU 设备上 OTA 固件所在位置的完整路径。有些设备不使用此字段,但您仍必须提供一个值。

otaDemoConfigFilePath

位于 aws_demo_config.h 中的 afr-source/vendors/vendor/boards/board/aws_demos/config_files/ 的完整路径。这些文件包含在 FreeRTOS 提供的移植代码模板中。

codeSigningConfiguration

代码签名配置。

signingMethod

代码签名方法。可能的值为 AWSCustom

注意

对于 北京和宁夏区域,请使用 CustomAWS 这些区域不支持 代码签名。

signerHashingAlgorithm

设备所支持的哈希算法。可能的值为 SHA1SHA256

signerSigningAlgorithm

设备所支持的签名算法。可能的值为 RSAECDSA

signerCertificate

用于 OTA 的可信证书。

对于 AWS 代码签名方法,使用上传到 AWS Certificate Manager 的可信证书的 Amazon 资源名称 (ARN)。

对于自定义代码签名方法,请使用签署人证书文件的绝对路径。

有关创建可信证书的更多信息,请参阅 创建代码签名证书

signerCertificateFileName

代码签名证书在设备上的位置。

compileSignerCertificate

如果代码签署人签名验证证书未预置或刷写,从而必须编译到项目中,则此项设置为 true。AWS IoT Device Tester 提取可信证书并将其编译为 aws_codesigner_certifiate.h

untrustedSignerCertificateArn

上传到 ACM 的代码签名证书的 ARN。

signerPlatform

AWS Code Signer 在创建 OTA 更新作业时使用的签名和哈希算法。目前,此字段的可能值为 AmazonFreeRTOS-TI-CC3220SFAmazonFreeRTOS-Default

  • AmazonFreeRTOS-TI-CC3220SF 如果为 SHA1 和 ,则选择 RSA

  • AmazonFreeRTOS-Default 如果为 SHA256 和 ,则选择 ECDSA

如果您需要 SHA256 | RSASHA1 | ECDSA 来进行配置,请联系我们以获得进一步的支持。

signCommand 如果您Custom为 选择 ,请配置 signingMethod

signCommand

用于执行自定义代码签名的命令。您可以在 /configs/script_templates 目录中找到模板。

命令中需要两个占位符 {{inputImageFilePath}} {{outputSignatureFilePath}} 和 。{{inputImageFilePath}} 是由 IDT 生成的要签名的映像的文件路径。{{outputSignatureFilePath}} 是脚本将生成的签名的文件路径。

otaDemoConfigFilePath

位于 aws_demo_config.h 中的 afr-source/vendors/vendor/boards/board/aws_demos/config_files/ 的完整路径。这些文件包含在 FreeRTOS 提供的移植代码模板中。

cmakeConfiguration

CMake 配置 [可选]

注意

要执行 CMake 测试案例,您必须提供主板名称、供应商名称和 frToolchainPathcompilerNamecmakeToolchainPath 如果您具有 CMake 工具链的自定义路径,您也可以提供 。

boardName

要测试的主板的名称。主板名称应该与 path/to/afr/source/code/vendors/vendor/boards/board 下的文件夹名称相同。

vendorName

所测试主板的供应商的名称。供应商名称应该与 path/to/afr/source/code/vendors/vendor 下的文件夹名称相同。

compilerName

编译器名称。

frToolchainPath

编译器工具链的全限定路径

cmakeToolchainPath

CMake 工具链的全限定路径。此字段为可选项

freertosFileConfiguration

IDT 在运行测试之前修改FreeRTOS的文件的配置。

required

本节指定您已移动其配置文件的必需测试,例如PKCS11 等。

configName

正在配置的测试的名称。

filePath

freertos 存储库中配置文件的绝对路径。使用 {{testData.sourcePath}} 变量定义路径。

optional

本节指定已移动配置文件的可选测试,例如 WiFi 等。

configName

正在配置的测试的名称。

filePath

freertos 存储库中配置文件的绝对路径。使用 {{testData.sourcePath}} 变量定义路径。

注意

要执行 CMake 测试案例,您必须提供主板名称、供应商名称和 afrToolchainPathcompilerName。如果您的 CMake 工具链使用自定义路径,则还需要提供 cmakeToolchainPath

适用于 FreeRTOS 的 IDT 变量

用于构建代码和刷写设备的命令可能需要连接或有关设备的其他信息才能成功运行。 AWS IoTDevice Tester 允许您使用 JsonPath 在刷写和构建命令中引用设备信息。通过使用简单 JsonPath 表达式,您可以按照 device.json 文件中的指定内容提取所需的信息。

路径变量

适用于 FreeRTOS 的 IDT 定义了可在命令行和配置文件中使用的以下路径变量:

{{testData.sourcePath}}

扩展到到源代码路径。如果使用该变量,则必须在刷写和构建命令中使用该变量。

{{sdkPath}}

在生成和刷入命令中使用userData.sdkConfiguration.path时,扩展到 中的 值。

{{device.connectivity.serialPort}}

扩展到串行端口。

{{device.identifiers[?(@.name == 'serialNo')].value[0]}}

扩展到您设备的序列号。

{{enableTests}}

整数值,指明构建适用于测试(值为 1)还是演示(值为 0)。

{{buildImageName}}

构建命令构建的映像的文件名。

{{otaCodeSignerPemFile}}

OTA 代码签署人的 PEM 文件。