生成高级应用程序

本部分介绍如何生成、打包和部署 Azure Sphere 高级应用程序。

这些说明使用 HelloWorld_HighLevelApp 示例应用程序作为示例。

先决条件

准备设备进行开发和调试

在 Azure Sphere 设备上生成示例应用程序或为其开发新应用程序之前,必须启用开发和旁加载。 默认情况下,Azure Sphere 设备处于“锁定”状态;也就是说,它们不允许从计算机加载正在开发的应用程序,并且不允许调试应用程序。 准备设备进行旁加载会消除此限制。

az sphere device enable-development 命令将设备配置为接受要调试的应用程序,将调试服务器加载到设备上,并将设备分配给不允许云应用程序更新的设备组。 在应用程序开发和调试期间,应将设备保留在此组中,以便云应用程序更新不会覆盖正在开发的应用程序。

  1. 确保 Azure Sphere 设备已连接到计算机,并且计算机已连接到 Internet。

  2. 使用 PowerShell、Windows 命令提示符或 Linux 命令行界面打开命令行界面。

  3. 输入以下命令:

    az sphere device enable-development --resource-group <ResourceGroupName> --catalog <CatalogName> --device <DeviceIdValue>
    

    应会看到类似于以下内容的输出:

    Getting device capability configuration for application development.
    Downloading device capability configuration for device ID '<device ID>'.
    Successfully downloaded device capability configuration.
    Successfully wrote device capability configuration file 'C:\Users\user\AppData\Local\Temp\tmpD732.tmp'.
    Setting device group ID 'a6df7013-c7c2-4764-8424-00cbacb431e5' for device with ID '<device ID>'.
    Successfully disabled over-the-air updates.
    Enabling application development capability on attached device.
    Applying device capability configuration to device.
    Successfully applied device capability configuration to device.
    The device is rebooting.
    Installing debugging server to device.
    Deploying 'C:\Program Files (x86)\Microsoft Azure Sphere SDK\DebugTools\gdbserver.imagepackage' to the attached device.
    Image package 'C:\Program Files (x86)\Microsoft Azure Sphere SDK\DebugTools\gdbserver.imagepackage' has been deployed to the attached device.
    Application development capability enabled.
    Successfully set up device '<device ID>' for application development, and disabled over-the-air updates.
    Command completed successfully in 00:00:38.3299276.
    

如果 az sphere device enable-development 命令失败,请参阅 排查 Azure Sphere 问题 以获取帮助。

使用调试在 Visual Studio 中生成和部署应用程序

  1. 确保设备通过 USB 连接到电脑。 在 “设置启动项 ”菜单中,选择“ Azure Sphere 应用 (HLCore) ,其中 Azure Sphere 应用 是当前高级应用程序的名称,或按 F5

    “远程 GDB 调试器”按钮

  2. 如果系统提示生成项目,请选择“ ”。 Visual Studio 编译应用程序,创建映像包, 将其旁加载 到开发板上,并在调试模式下启动它。 旁加载 意味着应用程序通过有线连接直接从电脑交付,而不是通过云传递。

    “查看>输出显示输出来源生成输出>”中记下映像包的图像 ID。 稍后将在 教程:创建云部署中使用映像 ID。

  3. 默认情况下,“ 输出 ”窗口显示 设备输出的输出。 若要查看来自调试器的消息,请从“显示输出来源:”下拉菜单中选择“调试”。 还可以通过 “调试>Windows ”菜单检查程序反汇编、寄存器或内存。

在不调试的情况下在 Visual Studio 中生成和部署应用程序

  1. 确保设备通过 USB 连接到电脑。 在 “调试 ”菜单中,选择“ 启动但不调试” 或按 Ctrl+F5

  2. 如果系统提示生成项目,请选择“ ”。 Visual Studio 编译应用程序,创建映像包, 将其旁加载 到开发板上,然后启动它。 旁加载 意味着应用程序通过有线连接直接从电脑交付,而不是通过云传递。

  3. 默认情况下,“ 输出 ”窗口显示 设备输出的输出

通过调试在 Visual Studio Code 中生成和部署应用程序

  1. 按 F5 生成和调试项目。 如果之前尚未生成项目,或者文件已更改且需要重新生成,Visual Studio Code将在调试开始之前生成项目。

  2. 等待几秒钟,让Visual Studio Code生成应用程序、创建映像包、将其部署到开发板,并在调试模式下启动它。 在此过程中,你将在“ 输出 ”窗格中看到状态更新。

    首先,CMake 确定是否需要生成应用程序。 如果是这样,焦点将转移到输出窗口,该窗口显示来自 CMake/Build 的输出。

    接下来,“ 输出 ”窗格会在映像包部署到设备时显示结果。 最后,调试控制台接收焦点并显示调试器输出。

在不调试的情况下在 Visual Studio Code 中生成和部署应用程序

  1. 确保设备通过 USB 连接到电脑。 在 “运行 ”菜单中,选择“ 启动而不调试” ,或按 Ctrl+F5 生成并运行项目。 如果之前尚未生成项目,或者文件已更改且需要重新生成,Visual Studio Code将生成项目。

  2. 等待几秒钟,让Visual Studio Code生成应用程序、创建映像包、将其部署到开发板并启动它。 在此过程中,你将在“ 输出 ”窗格中看到状态更新。

    首先,CMake 确定是否需要生成应用程序。 如果是这样,焦点将转移到输出窗口,该窗口显示来自 CMake/Build 的输出。

    接下来,输出窗口会在 azsphere 将映像包部署到设备时显示输出。 应用在部署到设备后自动启动。

生成应用程序

若要生成应用程序,需要在计算机上找到正确的编译工具、标头和库(统称为 sysroot)。 Azure Sphere SDK 附带多个 sysroot,因此应用程序可以面向不同的 API 集,如 应用程序运行时版本、sysroots 和 Beta API 中所述。 sysroot 安装在 Sysroots 下的 Azure Sphere SDK 安装文件夹中。

  1. 创建或导航到将包含生成过程中要生成的文件的目录。

  2. 如果应用程序依赖于其他应用程序,请在其 app_manifest.md 文件中 将应用程序标记为合作伙伴

  3. 添加或更新应用程序的 CMakeLists.txt 文件,以便根据需要调用 Azure Sphere CMake 函数

  4. 在命令提示符下,在项目生成目录中,使用以下参数运行 CMake:

    cmake --preset <preset-name> <source-path>
    
    • --preset <preset-name>

      CMakePresets.json 中定义的生成配置预设名称。

    • --build <cmake-path>

      包含 CMake 缓存的二进制目录。 例如,如果在 Azure Sphere 示例上运行 CMake,则生成命令将为 cmake --build out/ARM-Debug

    • <source-path>

      包含示例应用程序的源文件的目录的路径。 在此示例中,Azure Sphere 示例存储库已下载到名为 AzSphere 的目录。

      CMake 参数由空格分隔。 行延续字符 (^ for Windows 命令行、\ for Linux 命令行或 ' for PowerShell) 可用于提高可读性,但不是必需的。

    以下示例显示了Hello World高级应用的 CMake 命令。

    Windows 命令提示符

    cmake ^
     --preset "ARM-Debug" ^
     "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_HighLevelApp"
    

    Windows PowerShell

    cmake `
     --preset "ARM-Debug" `
     "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_HighLevelApp"
    
  5. 运行 Ninja 以生成应用程序并创建映像包文件:

    ninja -C out/ARM-Debug
    

    Ninja 将生成的应用程序和 .imagepackage 文件放在指定的目录中。

    还可以使用以下命令通过 CMake 调用 Ninja:

    cmake --build out/<binary-dir>
    

    设置为 <binary-dir> 包含 CMake 缓存的二进制目录。 例如,如果在 Azure Sphere 示例上运行 CMake,则生成命令将为 cmake --build out/ARM-Debug

部署应用程序

确保设备具有 appDevelopment 功能,以便可以旁加载应用程序并确保存在调试服务器。 如有必要, az sphere device enable-development 请使用 命令。

  1. 如果设备已在运行一个或多个应用程序,请将其删除。

    az sphere device sideload delete
    

    请注意,此命令将删除设备上的所有应用程序。 如果已将作为合作伙伴的 RTApp 部署到高级应用,请使用 --component-id 参数指定要删除的应用程序。 可以在应用程序的 app_manifest.json 文件中 找到应用程序的组件 ID

  2. 通过运行 az sphere device sideload deploy 命令并指定映像包,将映像包加载到设备上。 例如:

    az sphere device sideload deploy --image-package C:\Users\LocalSamples\HelloWorld\HelloWorld_HighLevelApp\out\ARM-Debug\HelloWorld_HighLevelApp.imagepackage
    

    应用程序应开始运行。

稍后可以使用 和 az sphere device app start --component-id <component ID> 命令停止并重启应用程序az sphere device app stop --component-id <component-ID>