

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

# 首次测试微控制器主板
<a name="lts-qual-steps"></a>

您可以使用适用于 FreeRTOS 的 IDT 来测试 FreeRTOS 库的实现。移植完主板设备驱动程序的 FreeRTOS 库后， AWS IoT Device Tester 使用在微控制器主板上运行资格测试。

## 添加库移植层
<a name="lts-add-port-layer"></a>

要为您的设备移植 FreeRTOS，请参阅[《FreeRTOS 移植指南》](https://docs.aws.amazon.com/freertos/latest/portingguide/porting-guide.html)。在实现 FreeRTOS 测试存储库和移植 FreeRTOS 层时，您必须向 `manifest.yml` 提供每个库（包括测试存储库）的路径。此文件将位于源代码的根目录中。有关详细信息，请参阅[清单文件说明](https://docs.aws.amazon.com/freertos/latest/qualificationguide/afq-checklist-manifest-instr.html)。

## 配置您的 AWS 凭据 AWS IoT Device Tester 以与 AWS 云端通信
<a name="lts-cfg-aws-afr"></a>

您需要配置您的 AWS 凭据才能与 AWS 云端通信。 AWS IoT Device Tester 有关更多信息，请参阅[设置用于开发的 AWS 凭证和区域](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html)。在`devicetester_extract_location/devicetester_freertos_[win|mac|linux]/configs/config.json`配置文件中指定了有效的 AWS 凭据。

```
"auth": {
   "method": "environment"
}

"auth": {
    "method": "file",
    "credentials": {
        "profile": "<your-aws-profile>"
    }
}
```

该`config.json`文件的`auth`属性具有控制 AWS 身份验证的方法字段，可以声明为文件或环境。将该字段设置为 environment 会从主机的环境变量中提取您的 AWS 凭据。将该字段设置为文件会从 `.aws/credentials` 配置文件中导入指定的配置文件。

**Topics**
+ [添加库移植层](#lts-add-port-layer)
+ [配置您的 AWS 凭据 AWS IoT Device Tester 以与 AWS 云端通信](#lts-cfg-aws-afr)
+ [在适用于 FreeRTOS 的 IDT 中创建设备池](lts-cfg-dt-dp.md)
+ [配置构建、刷写和测试设置](lts-cfg-dt-ud.md)

# 在适用于 FreeRTOS 的 IDT 中创建设备池
<a name="lts-cfg-dt-dp"></a>

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

`device.json` 文件的顶层有一个数组。每个数组属性都是一个新的设备池。每个设备池都有一个设备数组属性，该属性声明了多个设备。在模板中有一个设备池，该设备池中只有一个设备。您可以通过编辑 `configs` 文件夹中 `device.json` 模板的 `devices` 部分，将一个或多个设备添加到设备池中。

**注意**  
同一个池中的所有设备必须具有相同的技术规格和 SKU。要允许针对不同测试组并行构建源代码，适用于 FreeRTOS 的 IDT 需要将源代码复制到适用于 FreeRTOS 的 IDT 提取文件夹的结果文件夹中。您在构建或刷写命令中使用 `testdata.sourcePath` 变量来引用源代码路径。适用于 FreeRTOS 的 IDT 使用所复制源代码的临时路径来替换此变量。有关更多信息，请参阅 [适用于 FreeRTOS 变量的 IDT](lts-dt-vars.md)。

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

```
[
    {
        "id": "pool-id",
        "sku": "sku",
        "features": [
           {
              "name": "Wifi",
              "value": "Yes | No"
           },
           {
              "name": "Cellular",
              "value": "Yes | No"
           },
           {
              "name": "BLE",
              "value": "Yes | No"
          },
          {
             "name": "PKCS11",
             "value": "RSA | ECC | Both"
          },
          {
              "name": "OTA",
              "value": "Yes | No",
              "configs": [
              {
                  "name": "OTADataPlaneProtocol",
                  "value": "MQTT | HTTP | None"
              }
            ]
          },
          {
             "name": "KeyProvisioning",
             "value": "Onboard | Import | Both | No"
          }
        ],
        "devices": [
          {
            "id": "device-id",
            "connectivity": {
              "protocol": "uart",
              "serialPort": "/dev/tty*"
            },
            "secureElementConfig" : {
              "publicKeyAsciiHexFilePath": "absolute-path-to/public-key-txt-file: contains-the-hex-bytes-public-key-extracted-from-onboard-private-key",
              "publiDeviceCertificateArn": "arn:partition:iot:region:account-id:resourcetype:resource:qualifier",
              "secureElementSerialNumber": "secure-element-serialNo-value",
              "preProvisioned"           : "Yes | No",
              "pkcs11JITPCodeVerifyRootCertSupport": "Yes | No"
            },         
            "identifiers": [
              {
                "name": "serialNo",
                "value": "serialNo-value"
              }
            ]
          }
        ]
    }
]
```

在 `device.json` 文件中使用以下属性：

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

** `sku` **  
唯一标识您正在测试的主板的字母数字值。该 SKU 用于跟踪符合条件的主板。  
如果您想在 AWS 合作伙伴设备目录中发布您的主板，则在此处指定的 SKU 必须与您在发布过程中使用的 SKU 相匹配。

** `features` **  
包含设备支持的功能的阵列。 AWS IoT Device Tester 使用此信息来选择要运行的资格测试。  
支持的值为：    
** `Wifi` **  
指示您的主板是否具有 Wi-Fi 功能。  
** `Cellular` **  
指示您的主板是否具有蜂窝功能。  
** `PKCS11` **  
表示主板支持的公钥加密算法。 PKCS11 是资格认证所必需的。支持的值包括 `ECC`、`RSA` 和 `Both`。`Both` 表示主板同时支持 `ECC` 和 `RSA` 算法。  
** `KeyProvisioning` **  
指示将受信任的 X.509 客户端证书写入主板的方法。  

有效值为 `Import`、`Onboard`、`Both` 和 `No`。需要 `Onboard`、`Both` 或 `No` 密钥预配才能进行资格认证。只有 `Import` 不是有效的资格认证选项。
+ 如果您的主板允许导入私有密钥，才能使用 `Import`。选择`Import`不是有效的资格鉴定配置，应仅用于测试目的，特别是 PKCS11 测试用例。 `Onboard`，`Both`或者`No`是资格认证所必需的。
+ 如果您的主板支持板载私有密钥（例如，如果您的设备具有安全元件，或者如果您希望生成自己的设备密钥对和证书），请使用 `Onboard`。确保您在每个设备部分中添加一个 `secureElementConfig` 元素，并将公有密钥文件的绝对路径放在 `publicKeyAsciiHexFilePath` 字段中。
+ 如果您的主板支持导入私有密钥和生成板载密钥以进行密钥预配，则使用 `Both`。
+ 如果您的主板不支持密钥预配，请使用 `No`。只有当您的设备也已预先配置时，`No` 才是有效的选项。  
** `OTA` **  
表示您的主板是否支持 over-the-air (OTA) 更新功能。`OtaDataPlaneProtocol` 属性指示设备支持哪个 OTA 数据平面协议。OTA 需要使用 HTTP 或 MQTT 数据面板协议才能获得资格。要在测试时跳过运行 OTA 测试，请将 OTA 功能设置为 `No`，并将 `OtaDataPlaneProtocol` 属性设置为 `None`。这样不会运行资格认证。  
** `BLE` **  
指示您的主板是否支持低功耗蓝牙 (BLE) 功能。

** `devices.id` **  
用户定义的测试的设备的唯一标识符。

** `devices.connectivity.serialPort` **  
主机连接到所测试设备时使用的串行端口。

** `devices.secureElementConfig.PublicKeyAsciiHexFilePath` **  
如果您的主板不是 `pre-provisioned`，或者未提供 `PublicDeviceCertificateArn`，则需要。由于密钥配置`Onboard`是必填类型，因此 FullTransportInterface TLS 测试组当前必须填写此字段。如果您的设备是 `pre-provisioned`，则 `PublicKeyAsciiHexFilePath` 为可选设备，无需将其包含在内。  
以下数据块是该文件的绝对路径，包含从 `Onboard` 私有密钥中提取的十六进制字节公有密钥。  

```
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** 命令：  

```
xxd -p pubkey.der > outFile
```
如果您的公有密钥是 .pem 格式，则可以提取 base64 编码的标头和脚注并将其解码为二进制格式。然后，对二进制字符串进行十六进制编码以生成十六进制文件。  
要为 .pem 公有密钥生成十六进制文件，请执行以下操作：  

1. 运行以下 **base64** 命令，以便从公有密钥中删除 base64 标头和脚注。然后将名为 `base64key` 的解码密钥输出到文件 `pubkey.der` 中：

   ```
   base64 —decode base64key > pubkey.der
   ```

1. 运行 **xxd** 命令以将 `pubkey.der` 转换为十六进制格式。将生成的密钥另存为 `outFile`

   ```
   xxd -p pubkey.der > outFile
   ```

** `devices.secureElementConfig.PublicDeviceCertificateArn` **  
上传到您的安全元素的证书的 ARN。 AWS IoT Core*有关将证书上传到的信息 AWS IoT Core，请参阅《开发人员指南》AWS IoT 中的 [X.509 客户端证书](https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html)。*

** `devices.secureElementConfig.SecureElementSerialNumber` **  
（可选）安全元件的序列号。可选择将此序列号用于为 JITR 密钥预配创建设备证书。

** `devices.secureElementConfig.preProvisioned` **  
（可选）如果设备预配置了带有锁定凭证的安全元件，无法导入、创建或销毁对象，则设置为“是”。如果将此属性设置为**是**，则必须提供相应的 pkcs11 标签。

** `devices.secureElementConfig.pkcs11JITPCodeVerifyRootCertSupport` **  
（可选）如果设备的核心PKCS11 实现支持 JITP 存储，则设置为 “**是**”。这将在测试核心 PKCS 11 时启用 JITP `codeverify` 测试，并且需要提供代码验证密钥、JITP 证书和根证书 PKCS 11 标签。

** `identifiers` **  
（可选）任意名称/值对的数组。您可以在下一部分所述的构建和刷写命令中使用这些值。

# 配置构建、刷写和测试设置
<a name="lts-cfg-dt-ud"></a>

适用于 FreeRTOS 的 IDT 会自动构建测试并将其刷写到您的主板上。要启用此功能，您必须配置 IDT，以便为您的设备运行构建和刷写命令。构建和刷写设置在位于 `config` 文件夹的 `userdata.json` 模板文件中配置。

# 为测试设备配置设置
<a name="lts-config-settings-device"></a>

构建、刷写和测试设置在 `configs/userdata.json` 文件中进行。以下 JSON 示例显示如何配置适用于 FreeRTOS 的 IDT 来测试多个设备：

```
{
    "sourcePath": "</path/to/freertos>",
    "retainModifiedSourceDirectories": true | false,
    "freeRTOSVersion": "<freertos-version>",
    "freeRTOSTestParamConfigPath": "{{testData.sourcePath}}/path/from/source/path/to/test_param_config.h",
    "freeRTOSTestExecutionConfigPath": "{{testData.sourcePath}}/path/from/source/path/to/test_execution_config.h",
    "buildTool": {
        "name": "your-build-tool-name",
        "version": "your-build-tool-version",
        "command": [
            "<build command> -any-additional-flags {{testData.sourcePath}}"
        ]
    },
    "flashTool": {
        "name": "your-flash-tool-name",
        "version": "your-flash-tool-version",
        "command": [
            "<flash command> -any-additional-flags {{testData.sourcePath}} -any-additional-flags"
        ]
    },
    "testStartDelayms": 0,
    "echoServerConfiguration": {
      "keyGenerationMethod": "EC | RSA",
      "serverPort": 9000      
    },
    "otaConfiguration": {
        "otaE2EFirmwarePath": "{{testData.sourcePath}}/relative-path-to/ota-image-generated-in-build-process",
        "otaPALCertificatePath": "/path/to/ota/pal/certificate/on/device",
        "deviceFirmwarePath" : "/path/to/firmware/image/name/on/device",
        "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",
            "untrustedSignerCertificate": "arn:partition:service:region:account-id:resourcetype:resource:qualifier",
            "signerCertificateFileName": "signerCertificate-file-name",
            "compileSignerCertificate": true | false,
            // ***********Use signerPlatform if you choose AWS for signingMethod***************
            "signerPlatform": "AmazonFreeRTOS-Default | AmazonFreeRTOS-TI-CC3220SF"            
            ]
         }   
    },
    **********
    This section is used for PKCS #11 labels of private key, public key, device certificate, code verification key, JITP certificate, and root certificate.
    When configuring PKCS11, you set up labels and you must provide the labels of the device certificate, public key, 
    and private key for the key generation type (EC or RSA) it was created with. If your device supports PKCS11 storage of JITP certificate, 
    code verification key, and root certificate, set 'pkcs11JITPCodeVerifyRootCertSupport' to 'Yes' in device.json and provide the corresponding labels.
    **********
    "pkcs11LabelConfiguration":{
        "pkcs11LabelDevicePrivateKeyForTLS": "<device-private-key-label>",
        "pkcs11LabelDevicePublicKeyForTLS": "<device-public-key-label>",
        "pkcs11LabelDeviceCertificateForTLS": "<device-certificate-label>",
        "pkcs11LabelPreProvisionedECDevicePrivateKeyForTLS": "<preprovisioned-ec-device-private-key-label>",
        "pkcs11LabelPreProvisionedECDevicePublicKeyForTLS": "<preprovisioned-ec-device-public-key-label>",
        "pkcs11LabelPreProvisionedECDeviceCertificateForTLS": "<preprovisioned-ec-device-certificate-label>",
        "pkcs11LabelPreProvisionedRSADevicePrivateKeyForTLS": "<preprovisioned-rsa-device-private-key-label>",
        "pkcs11LabelPreProvisionedRSADevicePublicKeyForTLS": "<preprovisioned-rsa-device-public-key-label>",
        "pkcs11LabelPreProvisionedRSADeviceCertificateForTLS": "<preprovisioned-rsa-device-certificate-label>",
        "pkcs11LabelCodeVerifyKey": "<code-verification-key-label>",
        "pkcs11LabelJITPCertificate": "<JITP-certificate-label>",
        "pkcs11LabelRootCertificate": "<root-certificate-label>"
     }   
  }
```

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

**  `sourcePath` **  
移植的 FreeRTOS 源代码的根目录的路径。

**  `retainModifiedSourceDirectories` **  
（可选）检查是否保留在构建和刷写期间用于调试目的的已修改源目录。如果设置为 `true`，则修改的源目录名为 retainedSrc，位于每个测试组运行的结果日志文件夹中。如果未包含，则该字段默认为 `false`。

**  `freeRTOSTestParamConfigPath` **  
 FreeRTOS-Libraries-Integration-Tests集成的`test_param_config.h`文件路径。此文件必须使用`{{testData.sourcePath}}`占位符变量使其相对于源代码根目录。 AWS IoT Device Tester 使用此文件中的参数来配置测试。

**  `freeRTOSTestExecutionConfigPath` **  
 FreeRTOS-Libraries-Integration-Tests集成的`test_execution_config.h`文件路径。此文件必须使用`{{testData.sourcePath}}`占位符变量使其相对于存储库根目录。 AWS IoT Device Tester 使用此文件来控制必须运行哪些测试。

**  `freeRTOSVersion` **  
FreeRTOS 的版本，包括您的实现中使用的补丁版本。有关与 FreeRTOS [AWS IoT Device Tester 兼容的 FreeRTOS 版本，请参阅 FreeRTOS 的支持版本](https://docs.aws.amazon.com/freertos/latest/userguide/dev-test-versions-afr.html)。 AWS IoT Device Tester 

**  `buildTool` **  
用于构建源代码的命令。生成命令中对源代码路径的所有引用都必须替换为 AWS IoT Device Tester 变量`{{testData.sourcePath}}`。使用`{{config.idtRootPath}}`占位符引用相对于 AWS IoT Device Tester 根路径的生成脚本。

**  `flashTool` **  
将映像刷写到设备的命令。flash 命令中对源代码路径的所有引用都必须替换为 AWS IoT Device Tester 变量`{{testData.sourcePath}}`。使用`{{config.idtRootPath}}`占位符引用相对于 AWS IoT Device Tester 根路径的 Flash 脚本。  
FRQ 2.0 的新集成测试结构不需要路径变量，例如，`{{enableTests}}` 和 `{{buildImageName}}`。OTA 端到端测试使用[ FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/blob/main/config_template/) GitHub 存储库中提供的配置模板运行。如果 GitHub 存储库中的文件存在于您的父源项目中，则源代码在两次测试之间不会更改。如果需要为 OTA 端到端测试创建不同的构建映像，则必须在构建脚本中构建此映像，并在 `otaConfiguration` 下指定的 `userdata.json` 文件中指定该映像。

**  `testStartDelayms` **  
指定 FreeRTOS 测试运行器在开始运行测试之前将等待多少毫秒。如果由于网络或其他延迟问题，待测试设备在 IDT 有机会连接并开始日志记录之前就开始输出重要的测试信息，这可能很有用。此值仅适用于 FreeRTOS 测试组，不适用于不使用 FreeRTOS 测试运行器的其他测试组，例如 OTA 测试。如果您收到**预期为 10，但收到为 5**相关的错误，则应将此字段设置为 5000。

**  `echoServerConfiguration` **  
为 TLS 测试设置 Echo 服务器的配置。该字段为必填。    
** `keyGenerationMethod` **  
使用此选项对 Echo 服务器进行配置。选项是 EC 或 RSA。  
** `serverPort` **  
Echo 服务器运行时使用的端口号。

**  `otaConfiguration` **  
OTA PAL 和 OTA E2E 测试的配置。该字段为必填。    
**`otaE2EFirmwarePath`**  
IDT 用于 OTA 端到端测试的 OTA bin 映像的路径。  
** `otaPALCertificatePath` **  
设备上 OTA PAL 测试证书的路径。这用于验证签名。例如，**ecdsa-sha256-signer.crt.pem**。  
** `deviceFirmwarePath` **  
要引导的固件映像的硬编码名称的路径。如果您的设备不使用文件系统引导固件，请将此字段指定为 `'NA'`。如果您的设备使用文件系统引导固件，请指定固件引导映像的路径或名称。  
** `codeSigningConfiguration` **    
** `signingMethod` **  
代码签名方法。可能的值为 AWS 或自定义。  
对于北京和宁夏区域，请使用自定义。 AWS 该区域不支持代码签名。  
** `signerHashingAlgorithm` **  
设备所支持的哈希算法。可能的值为 `SHA1` 或 `SHA256`。  
** `signerSigningAlgorithm` **  
设备所支持的签名算法。可能的值为 `RSA` 或 `ECDSA`。  
** `signerCertificate` **  
用于 OTA 的可信证书。对于 AWS 代码签名方法，请使用上传到 Certificate Manager 的可信证书的 Amazon 资源名称 (ARN)。 AWS 对于自定义代码签名方法，请使用签署人证书文件的绝对路径。有关创建信任证书的信息，请参阅[创建代码签名证书](https://docs.aws.amazon.com/freertos/latest/userguide/ota-code-sign-cert.html)。  
** `untrustedSignerCertificate` **  
在某些 OTA 测试中用作不可信证书的第二个证书的 ARN 或文件路径。有关创建证书的信息，请参阅[创建代码签名证书](https://docs.aws.amazon.com//freertos/latest/userguide/ota-code-sign-cert.html)。  
** `signerCertificateFileName` **  
设备上代码签署证书的文件名。此值必须与您在运行 `aws acm import-certificate` 命令时提供的文件名相匹配。  
** `compileSignerCertificate` **  
确定签名验证证书状态的布尔值。有效值为 `true` 和 `false`。  
如果未配置或刷写代码签署人签名验证证书，则将此值设置为 **true**。它必须编译到项目中。 AWS IoT Device Tester 获取可信证书并将其编译为。`aws_codesigner_certificate.h`  
** `signerPlatform` **  
C AWS ode Signer 在创建 OTA 更新任务时使用的签名和哈希算法。目前，此字段的可能值为 `AmazonFreeRTOS-TI-CC3220SF` 和 `AmazonFreeRTOS-Default`。  
+ 如果为 `SHA1` 和 `RSA`，则选择 `AmazonFreeRTOS-TI-CC3220SF`。
+ 如果为 `SHA256` 和 `ECDSA`，则选择 `AmazonFreeRTOS-Default`。
+ 如果您的配置需要 `SHA256` \$1 `RSA` 或 `SHA1` \$1 `ECDSA`，请与我们联系以获取进一步的支持。
+ 如果您为 `signingMethod` 选择 `Custom`，则配置 `signCommand`。  
** `signCommand` **  
命令中需要两个占位符 `{{inputImageFilePath}}` 和 `{{outputSignatureFilePath}}`。`{{inputImageFilePath}}` 是要签名的由 IDT 构建的映像的文件路径。`{{outputSignatureFilePath}} ` 是将由脚本生成的签名的文件路径。

**  `pkcs11LabelConfiguration` **  
PKCS11 标签配置需要至少一组设备证书标签、公钥标签和私钥标签标签的标签才能运行 PKCS11 测试组。所需的 PKCS11 标签取决于`device.json`文件中的设备配置。如果在中将预配置设置为 “**是**”`device.json`，则所需的标签必须是以下标签之一，具体取决于为该 PKCS11 功能选择的内容。  
+ `PreProvisionedEC`
+ `PreProvisionedRSA`
如果在 `device.json` 中将预配置设置为**否**，则所需的标签为：  
+ `pkcs11LabelDevicePrivateKeyForTLS`
+ `pkcs11LabelDevicePublicKeyForTLS`
+ `pkcs11LabelDeviceCertificateForTLS`
只有在 `device.json` 文件中为 `pkcs11JITPCodeVerifyRootCertSupport` 选择**是**时，才需要以下三个标签。  
+ `pkcs11LabelCodeVerifyKey`
+ `pkcs11LabelRootCertificate`
+ `pkcs11LabelJITPCertificate`
这些字段的值应与[《FreeRTOS 移植指南》](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-pkcs.html)中定义的值相匹配。    
** `pkcs11LabelDevicePrivateKeyForTLS` **  
（可选）此标签用于私有密钥的 PKCS \$111 标签。对于支持板载和导入密钥预配的设备，此标签用于测试。此标签可能与为预先配置的用例定义的标签不同。如果在 `device.json` 中将密钥预配置设置为**否**，将已预先配置设置为**是**，则不会定义。  
** `pkcs11LabelDevicePublicKeyForTLS` **  
（可选）此标签用于公有密钥的 PKCS \$111 标签。对于支持板载和导入密钥预配的设备，此标签用于测试。此标签可能与为预先配置的用例定义的标签不同。如果在 `device.json` 中将密钥预配置设置为**否**，将已预先配置设置为**是**，则不会定义。  
** `pkcs11LabelDeviceCertificateForTLS` **  
（可选）此标签用于设备证书的 PKCS \$111 标签。对于支持板载和导入密钥预配的设备，此标签将用于测试。此标签可能与为预先配置的用例定义的标签不同。如果在 `device.json` 中将密钥预配置设置为**否**，将已预先配置设置为**是**，则不会定义。  
** `pkcs11LabelPreProvisionedECDevicePrivateKeyForTLS` **  
（可选）此标签用于私有密钥的 PKCS \$111 标签。对于具有安全元素或硬件限制的设备，这将使用不同的标签来保留 AWS IoT 凭据。如果您的设备支持使用 EC 密钥进行预配置，请提供此标签。当 `device.json` 中的预置备设置为**是** 时，必须提供标签 `pkcs11LabelPreProvisionedRSADevicePrivateKeyForTLS` 或同时提供两者。此标签可能与为注册和导入的用例定义的标签不同。  
** `pkcs11LabelPreProvisionedECDevicePublicKeyForTLS` **  
（可选）此标签用于公有密钥的 PKCS \$111 标签。对于具有安全元素或硬件限制的设备，这将使用不同的标签来保留 AWS IoT 凭据。如果您的设备支持使用 EC 密钥进行预配置，请提供此标签。当 `device.json` 中的预置备设置为**是** 时，必须提供标签 `pkcs11LabelPreProvisionedRSADevicePublicKeyForTLS` 或同时提供两者。此标签可能与为注册和导入的用例定义的标签不同。  
** `pkcs11LabelPreProvisionedECDeviceCertificateForTLS` **  
（可选）此标签用于设备证书的 PKCS \$111 标签。对于具有安全元素或硬件限制的设备，这将使用不同的标签来保留 AWS IoT 凭据。如果您的设备支持使用 EC 密钥进行预配置，请提供此标签。当 `device.json` 中的预置备设置为**是** 时，必须提供标签 `pkcs11LabelPreProvisionedRSADeviceCertificateForTLS` 或同时提供两者。此标签可能与为注册和导入的用例定义的标签不同。  
** `pkcs11LabelPreProvisionedRSADevicePrivateKeyForTLS` **  
（可选）此标签用于私有密钥的 PKCS \$111 标签。对于具有安全元素或硬件限制的设备，这将使用不同的标签来保留 AWS IoT 凭据。如果您的设备支持使用 RSA 密钥进行预配置，请提供此标签。当 `device.json` 中的预置备设置为**是** 时，必须提供标签 `pkcs11LabelPreProvisionedECDevicePrivateKeyForTLS` 或同时提供两者。  
** `pkcs11LabelPreProvisionedRSADevicePublicKeyForTLS` **  
（可选）此标签用于公有密钥的 PKCS \$111 标签。对于具有安全元素或硬件限制的设备，这将使用不同的标签来保留 AWS IoT 凭据。如果您的设备支持使用 RSA 密钥进行预配置，请提供此标签。当 `device.json` 中的预置备设置为**是** 时，必须提供标签 `pkcs11LabelPreProvisionedECDevicePublicKeyForTLS` 或同时提供两者。  
** `pkcs11LabelPreProvisionedRSADeviceCertificateForTLS` **  
（可选）此标签用于设备证书的 PKCS \$111 标签。对于具有安全元素或硬件限制的设备，这将使用不同的标签来保留 AWS IoT 凭据。如果您的设备支持使用 RSA 密钥进行预配置，请提供此标签。当 `device.json` 中的预置备设置为**是** 时，必须提供标签 `pkcs11LabelPreProvisionedECDeviceCertificateForTLS` 或同时提供两者。  
** `pkcs11LabelCodeVerifyKey` **  
（可选）此标签用于代码验证密钥的 PKCS \$111 标签。如果您的设备支持 PKCS \$111 存储 JITP 证书、代码验证密钥和根证书，请提供此标签。当 `device.json` 中的 `pkcs11JITPCodeVerifyRootCertSupport` 设置为**是**时，必须提供此标签。  
** `pkcs11LabelJITPCertificate` **  
（可选）此标签用于设备 JITP 证书的 PKCS \$111 标签。如果您的设备支持 PKCS \$111 存储 JITP 证书、代码验证密钥和根证书，请提供此标签。当 `device.json` 中的 `pkcs11JITPCodeVerifyRootCertSupport` 设置为**是**时，必须提供此标签。

# 适用于 FreeRTOS 变量的 IDT
<a name="lts-dt-vars"></a>

生成代码和刷新设备的命令可能需要连接或有关设备的其他信息才能成功运行。 AWS IoT Device Tester 允许您在 Flash 中引用设备信息并使用生成命令[JsonPath](https://goessner.net/articles/JsonPath/)。通过使用简单的 JsonPath表达式，您可以获取`device.json`文件中指定的所需信息。

## 路径变量
<a name="path-variables-lts"></a>

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

** `{{testData.sourcePath}}` **  
扩展到到源代码路径。如果使用该变量，则必须在刷写和构建命令中使用该变量。

** `{{device.connectivity.serialPort}}` **  
扩展到串行端口。

** `{{device.identifiers[?(@.name == 'serialNo')].value[0]}}` **  
扩展到您设备的序列号。

** `{{config.idtRootPath}}` **  
扩展到 AWS IoT Device Tester 根路径。