C

AWS EC2 快速入门指南

Qt 提供所有必要的工具,用于设计、开发、构建以及将您的应用程序部署到目标设备。

此指南描述了如何使用 Qt 工具的图形用户界面在云中的 AWS (亚马逊网络服务)实例上开发 Linux 应用程序。它描述了整体流程,并提供了以下任务的逐步说明:

注意:Qt for Device Creation 需要许可证。如果您没有,您可以请求 免费试用

概述

以下图示展示了使用 Qt 工具和 QBSP 对 AWS Graviton 靶本实例进行简化的开发过程。

  • 开发主机 是在一台运行 Windows、Linux 或 Mac 的计算机上运行 Qt 工具的开发计算机。
  • Qt 工具 包括 Qt Creator 和 Qt 设计工作室等开发工具,以及 Squish 等质量保证(QA)工具。
  • QBSP SDK 包含一个交叉编译工具链,该工具链集成到 Qt Creator 中。
  • 使用 Qt Creator 上传和调试应用程序
  • 启动 AWS 实例 在云中运行 Boot to Qt 映像。
  • 通过 VNC 远程连接到应用程序 提供对目标实例的远程连接。
  • AWS 实例 是运行您嵌入式 Linux 应用程序的 EC2 实例。
  • QBSP 映像 是一个可以使用 Boot to Qt 软件堆栈引导设备的 AWS Graviton 设备映像。

在 AWS 上 Boot to Qt

为使用 Amazon Elastic Compute Cloud (EC2),已创建一个针对 AWS 使用的 Graviton ARM 处理器核心的 Boot to Qt 映像。此映像已打包为亚马逊机器映像 (AMI) 文件,该文件可在 AWS 市场中部署。

这个虚拟 Qt 靶本设备可以像物理硬件设备一样使用;可以将在 AWS 云中设计、开发和测试应用程序的完整开发工具套件用于应用程序。

工具套件包括Qt Design Studio、Qt Creator、Squish GUI测试器和Axivion Suite。此外,Qt工具可以在物理开发桌面或AWS WorkSpaces上的虚拟工作站中运行。AWS WorkSpaces

使用Boot to Qt EC2实例

您需要Qt for Device Creation的商业许可证来安装Qt开发工具。Qt工具可以安装在物理本地工作站,或在AWS WorkSpaces上托管的虚拟工作台上。两种方式安装过程相同,并在本页上详细描述。

适用的AWS目标实例

本指南中的说明适用于以下AWS Graviton目标实例

  • t4g.nano
  • t4g.micro
  • t4g.small
  • t4g.medium
  • t4g.large
  • t4g.2xlarge
  • g5g.large
  • g5g.2xlarge
  • g5g.4xlarge

注意:有关支持的目标实例和开发主机更详细的信息,请参阅支持的目标设备和开发主机

安装Qt

遵循本指南中的说明来获取所有必需的资源,包括Qt Creator和Qt Design Studio。

  1. 登录Qt客户门户下载Qt在线安装程序
  2. 安装程序适用于以下主机
    • ARM上的Linux
    • Linux x86
    • macOS
    • Windows

    下载与您的宿主匹配的安装程序包。

  3. 打开安装程序。
  4. 继续到安装文件夹并选择自定义安装
  5. 选择下一步
  6. 选择组件中,选择Qt 6.7.2。安装程序中已预先选择了所需的开发人员和设计工具(如Qt Creator和Qt Design Studio)。
  7. 选择下一步
  8. 继续到准备安装并选择安装

注意:如果您已经安装了Qt,请使用Qt维护工具安装缺少的工具。

使用Qt维护工具安装Boot to Qt软件堆栈

要为AWS Graviton实例安装Boot to Qt软件堆栈,请执行以下操作

  1. 打开Qt维护工具。
  2. 继续到选择组件并打开顶层的Boot to Qt软件堆栈下拉菜单。
  3. 打开针对正确Qt版本的Boot to Qt软件堆栈下拉菜单。
  4. 选择AWS EC2 ARM64
  5. 继续到准备安装并选择安装

实例化Boot to Qt AMI概述

您有以下三种选择:从AWS Marketplace实例化Boot to Qt AMI、上传从QBSP安装的AMI,或构建并上传自定义AMI。您需要根据所选安装方法配置AWS。

有关构建和上传自定义AMI的更多信息,请参阅本节构建和上传自定义AMI。

从AWS Marketplace启动Boot to Qt AMI

要从AWS Marketplace启动Boot to Qt实例,请按以下步骤操作

  1. 打开Amazon EC2控制台
  2. 在EC2控制台仪表板上,在启动实例框中,选择启动实例
  3. 名称和标签下,在名称中为您的新实例输入一个名称。
  4. 应用程序和操作系统镜像(Amazon Machine Image)下,执行以下操作
    • 在搜索字段中搜索Boot to Qt,然后在AWS Marketplace AMIs结果中选择它。这是您实例的操作系统(OS)。
  5. 实例类型下,从实例类型列表中选择您实例的硬件配置。选择 t4g 或 g5g;默认选择为 g5g.large。G5g 支持GPU和高性能。T4g 提供软件渲染,但不支持硬件加速。
  6. 密钥对(登录)下,对于密钥对名称,请选择在设置过程中创建的密钥对。

    警告:请不要选择无密钥对继续(不推荐)。如果您在没有密钥对的情况下启动实例,您将无法连接到它。

  7. 网络设置中,选择编辑。对于安全组名称,您将看到向导为您创建并选择了一个安全组。您可以使用此安全组,或者您可以使用以下步骤选择在设置过程中创建的安全组
    • 选择选择现有安全组
    • 通用安全组中,从现有安全组的列表中选择您的安全组。
  8. 保留其他实例配置设置 defaults。
  9. 摘要面板中查看实例配置的摘要,准备好后,请选择启动实例
  10. 确认页面会让您知道实例正在启动。选择查看所有实例以关闭确认页面并返回控制台。
  11. 实例屏幕上,您可以查看启动状态。实例启动需要短暂时间。启动实例时,其初始状态为 挂起。实例启动后,其状态变为 运行,并获取一个公共 DNS 名称。

    注意:如果隐藏了 公共IPv4 DNS 列,请选择右上角的设置图标,打开 公共IPv4 DNS,并选择 确认

  12. 实例准备就绪供您连接可能需要几分钟。请检查实例是否通过状态检查;您可以在 状态检查 列中查看此信息。

从 QBSP 上传 Boot to Qt AMI

在上传之前,您可能还需要配置您的 AWS 账户。请参阅 AWS 文档 获取详细信息。然而,这里有一些技巧。

  1. 打开您的账户安全凭据。
  2. 选择 创建访问密钥
  3. 选中框承认 root 访问不是最佳实践。
  4. 选择 创建访问密钥
  5. 复制或下载生成的 访问密钥秘密访问密钥
  6. 配置 AWS 命令行工具。从命令行运行
    aws configure
  7. 提示时,提供上面获得的 访问密钥秘密访问密钥
  8. 提示区域时,提供所需区域。
  9. 提示默认输出格式时,留空。
  10. 为 AMI 上传创建 aws-bucket。
  11. 首先打开 AWS S3 控制台
  12. 在左侧面板中选择 存储桶,然后选择 创建存储桶
  13. 提供一个唯一的名称给存储桶,并选择所需的区域。
  14. 滚动并选择 创建存储桶

请参阅 AWS 将镜像上传到 AWS 的说明。

上传脚本希望找到在固定路径的构建聚合。下载上传脚本,并将 Boot to Qt 构建聚合复制到正确路径,以便 create-ec2-ami.sh 可以找到它们。

curl -L https://raw.githubusercontent.com/aws4embeddedlinux/meta-aws/master/scripts/ec2-ami/create-ec2-ami.sh --create-dirs --output sources/meta-aws/scripts/ec2-ami/create-ec2-ami.sh && chmod +x "${_}"
mkdir -p build/tmp/deploy/images/aws-ec2-arm64/
cp <Qt-install-path>/<version>/Boot2Qt/aws-ec2-arm64/images/* build/tmp/deploy/images/aws-ec2-arm64/

现在您有了 sources/build/ 文件夹,您可以运行脚本以上传 AMI 镜像。您需要将 <aws-bucket> 替换为您 AWS 存储桶的名称。

sources/meta-aws/scripts/ec2-ami/create-ec2-ami.sh <aws-bucket> 8 b2qt-embedded-qt6-image aws-ec2-arm64

按照以下步骤1、2、3和6更新您的AWS权限:所需服务角色

注意:本文件的步骤要求您将 disk-image-file-bucket 替换为之前步骤中创建的S3桶的名称。

将Qt AMI作为EC2实例启动

上传成功后,脚本会报告AMI ID,您可以在AWS中的 EC2 > AMIs 找到并如下启动此AMI实例

注意:请确保SSH端口22对外来SSH流量开放。如有必要,您可以添加新的安全组来覆盖此端口。

  • 选择上传的AMI,然后选择 从AMI启动实例
  • 输入 名称密钥对 以进行SSH登录,然后选择 启动实例
  • 等待实例通过 状态检查
  • 作为用户通过 SSH客户端 连接到实例。

注意:默认禁用了root登录。相反,您可以使用 用户 登录。

实例重启时IP地址会改变。为了保持IP地址不变,请转到 EC2 > 弹性IP 并选择 将弹性IP地址分配给AMI实例

打开 EC2 > AMI目录 并启动Boot to Qt AMI。然后通过SSH客户端连接到实例。

设置设备

可以通过网络连接到Boot to Qt设备。

在目标设备连接并拥有公共IP地址后,您可以使用以下步骤将其设置为Qt Creator

  1. 打开 Qt Creator
  2. 选择 编辑 > 首选项
  3. 首选项 窗口中
    1. 选择 设备
    2. 选择 添加 > Boot2Qt设备 > 启动向导
  4. Boot2Qt网络设备设置 窗口中
    1. 输入 设备名称
    2. 输入 主机名(AWS Graviton设备的IP地址)。
    3. 选择 特定密钥
    4. 选择 完成
  5. 设备 选项卡中
    • 选择 确定

注意:Qt Creator通过IP网络上传应用程序,因此AWS Graviton设备必须与您的开发主机PC位于同一网络中。

在Qt Design Studio中创建应用程序UI

您可以使用Qt Design Studio创建跨平台UI,包括嵌入式Linux应用程序。

  1. 打开 Qt Design Studio
  2. 选择 创建项目
  3. 预设 中,选择 通用
    • 给您的项目命名(同时注意项目路径,以便在Qt Creator中打开它)。
    • 调整显示分辨率和方向以适应您的显示屏。
  4. 确保您的 目标Qt版本 与您机器上安装的Qt版本匹配。
  5. 选择 创建

现在您可以根据需要修改UI。准备好后,选择 保存所有 确保您可以在Qt Creator中打开您的UI项目。

在Qt Creator中配置和构建应用程序

  1. 打开 Qt Creator
  2. 导航到您使用Qt Design Studio创建的项目。
  3. 选择 CMakeLists.txt 以打开项目。
  4. 配置项目 窗口中
    1. 选择您的AWS EC2 ARM64工具包。
    2. 选择 配置项目

最后,选择 构建 > 构建项目 以构建您配置的项目。

在实例上运行应用程序

设置您的设备后,您可以将应用程序上传并启动到AWS Graviton实例上。

  1. 打开 Qt Creator
  2. 选择 文件 > 打开文件或项目
  3. 导航到您之前配置的项目并选择 打开
  4. 项目 窗口
    1. 如有必要,编辑 运行设置
    2. 选择 运行

注意: 要更改您的应用程序,只需再次运行它即可在设备上更新。

注意: Qt Creator 示例默认上传到 /usr/examples,但“用户”没有访问那个文件夹的权限,因此您需要在 Qt Creator 中更改安装目录或简单地为“用户”创建该文件夹,例如

sudo mkdir /usr/examples
sudo chown user /usr/examples

根据 EC2 实例的功能,您可以通过两种不同的方式设置应用程序图形。

1. 使用带有 GPU 的 EC2 实例

EGLFS 和 Wayland 支持在带有 NVIDIA GPU 的 EC2 实例上。要使用 EGLFS,设置 QT_QPA_PLATFORM=eglfs 或使用参数 '-platform eglfs',并在您的应用程序或 Wayland 组合器下的 Qml 窗口中添加 VncItem,例如以下所示

import QtVncServer

Window {
...
VncItem {
id : vncItem
anchors.fill: parent
}

有关 QtVncServer 的更多信息,请参阅 Qt VNC 服务器。

要使用 Wayland,按照上述方式启动 Wayland 组合器与 EGLFS。然后请使用 '-platform wayland-egl' 在 Wayland 客户端中将其连接到 Wayland 组合器。

目前,您还需要修改 main.cpp 并添加

{QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true)}

并移除

{QSurfaceFormat::setDefaultFormat(QQuick3D::idealSurfaceFormat())}

如果存在的话,以使用 NVIDIA GPU 驱动程序。

2. 使用不带 GPU 的 EC2 实例

Qt VNC 插件可用于不带 GPU 的 EC2 实例。要使用 Qt VNC 插件,在启动应用程序时设置 QT_QPA_PLATFORM=vnc 或使用参数 '-platform vnc'

通过 VNC 连接到 EC2 实例的用户界面

从您的本地主机打开到您的实例的 SSH 隧道,例如以下所示

ssh -i <ami-key.pem> -L 5900:localhost:5900 user@ec2-<ami-ip-address>.compute-1.amazonaws.com

注意: SSH 上禁用了根登录,但您登录后可以使用 sudo。

默认情况下禁用了根和密码登录,因此您需要以“用户”身份通过 SSH 登录。请注意,登录密钥(如 ssh -i <key>.pem)的权限设置必须仅用于用户,例如在 Linux 上 chmod 400 <key>.pem

注意: 在通过 VNC 连接之前,您需要启动 Qt 应用程序因为 Qt 应用程序会启动 Qt VNC 服务器。

打开 VNC 查看器并通过 SSH 隧道连接到您的实例

Protocol: VNC
Host: localhost:5900

注意: 如果 VNC 查看器出现关于不匹配安全类型的错误,请尝试不同的 VNC 查看器。

调试应用程序

要启用对 Qt AMI 的调试,请打开 AMIs > 安全组 > 编辑 入站规则中的 TCP 端口 10000。

有关使用 Qt Creator 调试应用程序的信息,请参阅 调试

为 AWS 设备定制 Boot to Qt

Boot to Qt for 嵌入式 Linux 是使用 Yocto 项目中的工具和资源构建的。有关如何为构建 Boot to Qt 设置构建环境的更多信息,请参阅 设置构建 Boot to Qt 的环境

本节提供了一个为 AWS Graviton 实例构建 Boot to Qt 的示例。

有关如何添加对新设备的支持的信息,请参阅 如何为新设备添加支持

  1. 从清单存储库初始化构建环境。
    cd <BuildDir>
    repo init -u https://code.qt.io/yocto/boot2qt-manifest -m aws/6.7.xml
    repo sync

    注意: 在上述示例中 6.7.xml 指的是特定的 Boot to Qt 版本,但您可以使用与您的目标设备兼容的任何版本。

  2. 为 Linux 配置构建环境。
    export MACHINE=aws-ec2-arm64 && source ./setup-environment.sh
  3. 要使用NVIDIA GPU在带有此Boot2Qt AMI的AWS实例中,您首先需要下载NVIDIA驱动程序包。然后,将local.conf中的NVIDIA_DEVNET_MIRROR变量设置为指向下载目录的路径。要找到当前支持的驱动程序版本,请参考code.qt.io中的此README文件
  4. 开始构建Boot to Qt的QBSP。
    bitbake meta-b2qt-embedded-qbsp

    构建完成后,您可以在boot2qt/build-aws-ec2-arm64/tmp/deploy/qbsp/meta-b2qt-embedded-qbsp-x86_64-aws-ec2-arm64-6.7.qbsp找到QBSP文件。

故障排除

如果您在实例中遇到任何问题,请参阅Amazon文档

有关故障排除Boot to Qt的更多信息,请参阅故障排除

在特定的Qt许可证下可用。
了解更多。