Azure Sphere 应用程序概述

Azure Sphere 设备可以运行两种类型的应用程序:

  • 高级应用程序 在 Azure Sphere OS 上运行容器化
  • 支持实时的应用程序 (RTApps) 裸机或实时操作系统 (RTOS) 实时核心上运行

每个 Azure Sphere 设备都需要一个高级应用程序;RTApps 是可选的。

高级应用程序

每个 Azure Sphere 设备都有一个高级应用程序,该应用程序在 Azure Sphere OS 上运行,可以使用应用程序库。 高级应用程序可以:

  • 配置 Azure Sphere 外围设备并与之交互,例如通用输入/输出 (GPIO) 引脚、通用异步接收器/发射器 (UART) 和其他接口

  • 与 RTApps 通信

  • 与 Internet 和基于云的服务通信

  • 通过基于证书的身份验证与其他设备和服务的中转站信任关系

高级应用程序在普通世界用户模式下的容器中运行,如 什么是 Azure Sphere?中所述。 应用程序容器支持一部分 POSIX 环境和一组特定于 Azure Sphere OS 的应用程序库 (Applibs) 。 对可用于高级应用程序的库和函数进行了限制,以确保平台保持安全且可以轻松更新。 应用程序只能访问 Microsoft 提供的库和运行时服务;除了其他约束之外,直接文件 I/O 和 shell 访问均不可用。 开发环境 介绍了基本 API 集,并引入了支持特定于设备的功能的 Azure Sphere 应用程序库。

高级应用程序应持续运行,并在停止或失败时自动重启。

创建高级应用程序 提供了有关功能的详细信息。

支持实时的应用程序

除高级应用程序外,Azure Sphere 设备可能还具有一个或多个支持实时的应用程序。 RTApp 可以:

  • 配置集成到 Azure Sphere MCU 中的外围设备并与之交互,例如 GPIO 引脚和 UART
  • 与高级应用程序通信

RTApps 可以在裸机上运行,也可以通过实时操作系统 (RTOS) 运行。 GitHub 上的 Azure Sphere 示例存储库包括裸机 HelloWorld 示例 ,以及演示高级与 RTApps 之间 核心间通信 的示例。 GitHub 上的 Azure 示例存储库包含一个示例,演示如何 将 Azure Sphere 与 Azure RTOS 配合使用

Azure Sphere 合作伙伴 MediaTekCodethink 的 GitHub 上提供了面向 MT3620 芯片上的 M4 实时核心的 RTApps 的其他驱动程序和示例。

每个 RTApp 在特定 I/O 核心上独立运行,并且只能与高级应用程序通信;它无法使用 Internet、Azure Sphere applibs 或 Azure Sphere OS 的其他功能。

创建支持实时的应用程序 提供有关 RTApps 的功能和开发过程的详细信息。

所有应用程序通用的功能

尽管高级应用和 RTApps 之间存在显著差异,但所有 Azure Sphere 应用程序都有一些共同点。 可以使用 Visual Studio 或 Visual Studio Code,或使用 CLI 调用 CMake 和 Ninja 来开发、生成和调试这两种类型的应用程序。

此外,以下安全功能同时适用于高级和 RTApps:

应用程序功能

无论在何处运行,每个 Azure Sphere 应用程序都必须指定它所需的外部服务和接口(例如其 I/O 和网络要求),以防止任何未经授权的或意外使用。

应用程序功能 是应用程序所需的资源。 应用程序功能包括应用程序使用的外围设备、高级应用程序连接到的 Internet 主机以及更改网络配置的权限等。 每个应用程序都必须具有标识这些资源 的应用程序清单

设备功能

设备功能启用特定于设备的活动。 设备功能由 Azure Sphere 安全服务授予。 默认情况下,Azure Sphere 芯片没有设备功能。 有两种main类型的设备功能:appDevelopment 设备功能和 fieldServicing 设备功能。

appDevelopment 设备功能更改设备信任的签名类型。 默认情况下,Azure Sphere 设备信任生产签名的映像包,但不信任 SDK 签名的映像包。 因此,无法将 SDK 签名的映像包旁加载到没有此功能的 Azure Sphere 设备。 但是,当存在 appDevelopment 功能时,设备信任 SDK 签名的映像包。 此外,它还使你能够启动、停止、调试或删除设备中的应用程序。 总之,必须先在设备上提供应用程序开发功能,然后才能:

az sphere device enable-development 命令创建并应用 appDevelopment 功能,并阻止设备接收云应用程序更新。

fieldServicing 功能允许在处于 DeviceComplete 制造状态的设备上进行设备到计算机的通信。 使用此功能,可以旁加载生产签名的映像,但不能删除它们。 可以启动和停止应用程序,但不能调试它们。 还可以执行日常维护任务,例如配置 Wi-Fi。 它旨在用于 服务会话期间的短期使用,在此期间,每次操作都授予对设备的访问。

签名和部署要求

必须对部署到 Azure Sphere 设备的所有映像包进行签名。 Azure Sphere SDK 和 az sphere image-package 命令对映像包进行签名,以便使用 SDK 签名密钥进行测试。 仅当 appDevelopment 设备功能也存在时,Azure Sphere 设备才信任此密钥。

将映像包上传到云时,Azure Sphere 安全服务对映像包进行生产签名。 生产签名的映像包可以旁加载或从云加载。

为了防止安装恶意软件,只需通过两种方式即可在 Azure Sphere 设备上加载应用程序:

  • 旁加载,可用于软件开发和测试,以及设备的现场服务。 软件开发和测试的旁加载需要 appDevelopment 设备功能。 为现场服务旁加载需要 fieldServicing 设备功能和生产签名的映像包。 Visual Studio 和 Visual Studio Code在开发和调试期间旁加载应用程序;还可以使用 Azure CLI 手动旁加载应用程序。

  • 云更新,只能由 Azure Sphere 安全服务执行。 使用 Azure CLI 创建和管理云部署。

合作伙伴应用程序

协同工作的应用程序可以被视为 合作伙伴应用程序 ,然后可以单独旁加载。 旁加载具有合作伙伴的应用程序时,合作伙伴应用程序将保留在 Azure Sphere 设备上(如果已部署)。 每个应用程序在其项目配置中声明其合作伙伴的列表。

若要将合作伙伴添加到 CMake 项目配置,请在 launch.vs.json 或 .vscode/launch.json 文件的“配置”部分的 partnerComponents 字段中指定合作伙伴应用的组件 ID:

"partnerComponents": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]

相互通信的高级应用和 RTApp 必须标识为合作伙伴。 Azure Sphere 不支持高级应用对或 RTApps 对之间的通信。