你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将更新导入 Device Update for IoT Hub

若要将更新从 Device Update for IoT Hub 部署到设备,首先必须将该更新导入 Device Update 服务。 导入的更新将存储在设备更新服务中,并且可以从该服务部署到设备。 本文概述了一些在导入更新时要了解的重要概念。

导入清单

导入清单是一个 JSON 文件,它定义有关要导入的更新的重要信息。 在导入过程中,你需要提交导入清单和关联的更新文件(例如固件更新包)。 在导入清单中定义的元数据用于引入更新。 有些元数据还会在部署时用到,例如,用于验证是否正确安装了某个更新。

例如:

{
  "updateId": {
    "provider": "Contoso",
    "name": "Toaster",
    "version": "1.0"
  },
  "isDeployable": false,
  "compatibility": [
    {
      "manufacturer": "Contoso",
      "model": "Toaster"
    }
  ],
  "instructions": {
    "steps": [
      {
        "handler": "microsoft/swupdate:1",
        "files": [
          "firmware.swu"
        ],
        "handlerProperties": {
          "installedCriteria": "1.0"
        }
      }
    ]
  },
  "files": [
    {
      "filename": "firmware.swu",
      "sizeInBytes": 7558,
      "hashes": {
        "sha256": "/CD7Sn6fiknWa3NgcFjGlJ+ccA81s1QAXX4oo5GHiFA="
      }
    }
  ],
  "createdDateTime": "2022-01-19T06:23:52.6996916Z",
  "manifestVersion": "5.0"
}

导入清单包含多个项,它们表示重要的 Device Update for IoT Hub 概念。 本部分中概述了这些项。 有关完整导入架构的信息,请参阅导入清单 JSON 架构

更新标识

更新标识或 updateId 是 Device Update for IoT Hub 中的更新的唯一标识符。 它由三个部分组成:

  • 提供程序:创建或直接负责更新的实体。 它通常是公司名称。
  • 名称:更新类的标识符。 它通常是一个设备类或模型名称。
  • 版本:将此更新与具有相同提供程序和名称的其他版本区分开来。

例如:

{
  "updateId": {
    "provider": "Contoso",
    "name": "Toaster",
    "version": "1.0"
  }
}

注意

updateId 仅由 Device Update 服务使用,可能不同于设备上实际软件组件的标识。

兼容性

兼容性定义了可安装更新的设备条件。 它包含设备属性,即一组从设备报告的任意键值对。 只有具有匹配属性的设备才能进行部署。 通过具有多个设备属性集,更新可能与多个设备类兼容。

下面是一个更新的示例,此更新只能部署到报告 Contoso 和 Toaster 作为其设备制造商和型号的设备。

{
  "compatibility": [
    {
      "manufacturer": "Contoso",
      "model": "Toaster"
    }
  ]
}

Instructions

说明部分包含设备代理安装更新所需的信息或步骤。 最简单的更新包含单个内联步骤。 该步骤使用注册到设备代理的处理程序执行包含的负载文件:

{
  "instructions": {
    "steps": [
      {
        "handler": "microsoft/swupdate:1",
        "files": [
          "contoso.toaster.1.0.swu"
        ]
      }
    ]
  }
}

提示

handler 等效于导入清单版本 3.0 或更早版本中的 updateType

更新可能包含多个步骤:

{
  "instructions": {
    "steps": [
      {
        "description": "pre-install script",
        "handler": "microsoft/script:1",
        "handlerProperties": {
          "arguments": "--pre-install"
        },
        "files": [
          "configure.sh"
        ]
      },
      {
        "description": "firmware package",
        "handler": "microsoft/swupdate:1",
        "files": [
          "contoso.toaster.1.0.swu"
        ]
      }
    ]
  }
}

更新可能包含引用步骤,指导设备代理使用自己的导入清单来安装另一个更新,同时建立父和子更新关系。 例如,toaster 的一个更新可能包含两个子更新:

{
  "instructions": {
    "steps": [
      {
        "type": "reference",
        "updateId": {
          "provider": "Contoso",
          "name": "Toaster.HeatingElement",
          "version": "1.0"
        }
      },
      {
        "type": "reference",
        "updateId": {
          "provider": "Contoso",
          "name": "Toaster.Sensors",
          "version": "1.0"
        }
      }
    ]
  }
}

注意

更新可能包含内联和引用步骤的任意组合。

文件

文件部分包含更新有效负载文件的元数据,例如其名称、大小和哈希。 Device Update for IoT Hub 在导入过程中使用此元数据进行完整性验证。 然后,在安装之前,会将相同的信息转发给设备代理以重复执行完整性验证。

注意

仅包含引用步骤的更新不会在父更新中包含任何更新负载文件。

创建导入清单

虽然可以使用文本编辑器手动创作导入清单 JSON,但最好是使用 Azure 命令行界面 (CLI),因为该界面会大大简化此过程。 准备尝试创建导入清单时,可以使用操作指南

重要

通过 Azure 门户导入时,导入清单 JSON 文件名必须以 .importmanifest.json 结尾。

提示

创建导入清单时,可以使用Visual Studio Code 启用自动完成和 JSON 架构验证。

有关导入更新的限制

对于每个 Device Update for IoT Hub 实例,强制实施特定限制。 如果尚未查看,请参阅 Device Update 限制

后续步骤