Azure Sphere 应用程序概述
重要
这是 Azure Sphere(旧版)文档。 Azure Sphere(旧版)将于 2027 年 9 月 27 日停用,用户此时必须迁移到 Azure Sphere(集成)。 使用位于 TOC 上方的版本选择器查看 Azure Sphere(集成)文档。
Azure Sphere 设备可运行两种类型的应用程序:
- 高级应用程序在 Azure Sphere OS 上进行容器化
- 支持实时的应用程序 (RTApp) 在裸机上运行,或者在实时核心的实时操作系统 (RTOS) 上运行
高级应用程序是每个 Azure Sphere 设备所必需的;而 RTApp 是可选的。
高级应用程序
每个 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)并与之互动
- 与高级应用程序进行通信
RTApp 可以在裸机上运行,也可以在实时操作系统 (RTOS) 上运行。 GitHub 上的 Azure Sphere 示例存储库包含裸机 HelloWorld 示例以及一个演示高级应用和 RTApp 之间的内核间通信的示例。 GitHub 上的 Azure 示例存储库包含一个示例,该示例演示了如何将 Azure Sphere 与 Azure RTOS 配合使用。
Azure Sphere 合作伙伴 MediaTek 和 Codethink 在 GitHub 上提供了其他驱动程序和示例,这些驱动程序和示例适用于以 MT3620 芯片上的 M4 实时核心为目标的 RTApp。
每个 RTApp 在特定 I/O 核心上独立运行,且只能与高级应用程序进行通信;它无法使用 Internet、Azure Sphere applibs 或 Azure Sphere OS 的其他功能。
创建支持实时的应用程序 提供有关 RTApps 的功能和开发过程的详细信息。
所有应用程序的通用功能
尽管高级应用和 RTApp 之间存在显著差异,但所有 Azure Sphere 应用程序都具有一些共性。 可以使用 Visual Studio 或 Visual Studio Code 开发、生成和调试这两种类型的应用程序,也可以使用 CLI 调用 CMake 和 Ninja。
此外,以下安全功能适用于高级和 RTApp:
应用程序功能
每个 Azure Sphere 应用程序无论在何处运行,都必须指定其需要的外部服务和接口(例如,I/O 和网络要求),以防止任何未经授权或意外的使用。
应用程序功能是应用程序所需的资源。 应用程序功能包括应用程序使用的外围设备、高级应用程序所连接的 Internet 主机以及更改网络配置的权限等。 每个应用程序都必须有一个 标识这些资源的应用程序清单 。
设备功能
一种设备功能支持特定于设备的一项活动。 Azure Sphere 安全服务授予设备功能。 默认情况下,Azure Sphere 芯片不具有设备功能。 有两种主要类型的设备功能: appDevelopment 设备功能和 fieldServicing 设备功能。
appDevelopment 设备功能可更改设备信任的签名类型。 默认情况下,Azure Sphere 设备信任生产签名的映像包,但不信任 SDK 签名的映像包。 因此,无法将 SDK 签名的映像包旁加载到不具有此功能的 Azure Sphere 设备中。 但是,如果具备 appDevelopment 功能,则设备会信任 SDK 签名的映像包。 此外,通过此功能,还可以从设备启动、停止、调试或删除应用程序。 总之,设备上必须具备应用程序开发功能,才能执行以下操作:
- 旁加载由 Visual Studio 或 azsphere image-package 命令生成的映像包。
- 从 Azure Sphere 设备启动、停止、调试或删除映像包(无论映像包的签名方式如何)。
azsphere device enable-development 命令创建并应用 appDevelopment 功能,并阻止设备接收云应用程序更新。
fieldServicing 功能允许在处于 DeviceComplete 制造状态的设备上进行设备到计算机通信。 借助此功能,可以旁加载生产签名的映像,但不能删除它们。 可以启动和停止应用程序,但不能对其进行调试。 还可以执行常规维护任务,例如配置 Wi-Fi。 它适用于在服务会话期间进行短期使用,在此期间,将按操作授予对设备的访问。
签名和部署要求
必须对部署到 Azure Sphere 设备的所有映像包进行签名。 Azure Sphere SDK 和 azsphere image-package 命令对映像包进行签名,以便使用 SDK 签名密钥进行测试。 仅当还具备 appDevelopment 设备功能时,Azure Sphere 设备才会信任此密钥。
将映像包上传到云时,Azure Sphere 安全服务会生成签名映像包。 生产签名的映像包可通过云旁加载或加载。
为防止流氓软件的安装,仅可通过两种方式在 Azure Sphere 设备上加载应用程序:
旁加载,可用于软件开发和测试和设备的现场服务。 用于软件开发和测试的旁加载需要 appDevelopment 设备功能。 现场服务的旁加载需要 fieldServicing 设备功能和生产签名的映像包。 在开发和调试期间,Visual Studio 和 Visual Studio Code 旁加载应用程序;还可以使用 Azure Sphere CLI 手动旁加载。
仅可由 Azure Sphere 安全服务执行云更新。 使用 Azure Sphere CLI 创建和管理云部署。
合作伙伴应用程序
协同工作的应用程序可视为合作伙伴应用程序,之后可单独进行旁加载。 旁加载具有合作伙伴的应用程序时,如果合作伙伴应用程序已经部署,则它仍然位于 Azure Sphere 设备中。 每个应用程序在其项目配置中声明合作伙伴列表。
要将合作伙伴添加到 CMake 项目配置,请在 launch.vs.json 或 .vscode/launch.json 文件的“配置”部分的 partnerComponents 字段指定合作伙伴应用的组件 ID:
"partnerComponents": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]
必须将相互通信的高级应用和 RTApp 标识为合作伙伴。 Azure Sphere 不支持高层应用对或 RTApps 对之间的通信。