Skip to main content
使用 OTA 升级软件,通过 OSTree 和 capsule 提供的稳健且可扩展的 OTA 更新框架,从 Qualcomm Linux 1.0 迁移到 Qualcomm Linux 2.0。 在 Qualcomm Linux 1.0 中,OSTree 是管理 Linux 升级的默认机制。OSTree 提供了一个受版本控制、不可变的文件系统结构,可实现以下功能:
  • 原子升级
  • 回滚能力
  • 高效的基于增量(delta)的更新
这一机制使其适用于嵌入式和边缘平台,确保系统更新可靠、一致,并可在失败时恢复。 对于固件更新,使用 UEFI capsule 更新,它提供了一种安全、标准化的低层二进制文件交付方法。UEFI 固件在启动过程中验证 capsule 更新,确保完整性、真实性以及与安全启动环境的兼容性。这一机制将设备崩溃的风险降至最低,并支持与现有引导加载程序基础设施的无缝集成。 Qualcomm Linux 2.0 支持相同的更新机制。即 Linux 使用 OSTree,固件使用 capsule 更新。这种统一的方法简化了迁移过程,增强了系统弹性,并为未来 Qualcomm Linux 版本的可扩展 OTA 更新管理奠定了基础。

使用 capsule 和 OSTree 仓库升级设备

要将运行 Qualcomm Linux 1.0 的设备升级到 Qualcomm Linux 2.0,请使用以下方式:
  • 通过 capsule 对引导固件进行 OTA 升级
  • 为 Linux 使用 OSTree 仓库
升级时,建议 OTA 升级操作将 OSTree 仓库和 capsule 一并覆盖。 升级运行 Qualcomm Linux 1.0 的设备时,请考虑以下限制和注意事项。

分区操作限制

以下操作不支持 OTA 升级,因为它们会使设备在现场易于崩溃:
  • 重新分区以调整任何分区的大小,即无法增大或减小分区大小
  • 更改分区标签
  • 更改分区 GUID
  • 更改分区的属性标志
  • 将分区从 LUN-X 移动到 LUN-Y
  • 从任何逻辑单元号(LUN)中删除分区

非 Linux 分区的引导固件分区大小注意事项

对于任何运行 Qualcomm Linux 1.0 的设备,引导固件 LUN 具有专用于 XBL、TZ、UEFI 和 DTB 等镜像的分区。分区大小在设备使用 Qualcomm Linux 1.0 进行预配(provision)时已确定。 这些分区可能存在一些未使用的空间。例如,QCS6490 中的未使用空间如下:
  • UEFI 为 700 KB
  • TZ 为 25 KB
  • DTB 为 60 MB
您可以将未使用的空间用于可容纳其中的功能或其他模块。如果新增功能增大了固件二进制大小,但仍能容纳在预先分配的分区大小内,则可以使用 capsule 更新目标分区中的镜像。 建议 OTA 路径不升级 hypervisor。也就是说,如果设备使用带 Gunyah 的 Qualcomm Linux 1.0,升级后必须继续支持它。

EFI 的 Linux 镜像分区注意事项

在 Qualcomm Linux 1.0 中,EFI 分区 GUID 和分区标签已经是标准的:分别为 C12A7328-F81F-11D2-BA4B-00A0C93EC93BEFI。因此,您可以通过 OTA 从 Qualcomm Linux 1.0 升级到 Qualcomm Linux 2.0,EFI 分区将按预期挂载。系统会将该分区挂载到 /boot 挂载点。 注意 标签和 GUID 无法通过 OTA 更改。

Rootfs 的 Linux 镜像分区注意事项

对于启用 OSTree 的构建,根文件系统通过 OTAROOT 标签进行查找,该标签在 Qualcomm Linux 1.0 中是标准的。因此,使用 OSTree 从 Qualcomm Linux 1.0 OTA 升级到 Qualcomm Linux 2.0 时,rootfs 挂载可按预期工作。 经过升级的 Qualcomm Linux 1.0 设备无法将分区标签(分区名称)更改为 rootfs。使用 gdisk 或 sgdisk 等工具检查时,分区标签仍显示为 system 注意 Qualcomm Linux 1.0 和 Qualcomm Linux 2.0 中 rootfs 分区使用的标准 GUID 均为 B921B045-1DF0-41C3-AF44-4C6F280D3FAE

Persist 分区注意事项

在 Qualcomm Linux 1.0 中,persist 分区位于 LUN0 上。将设备从 Qualcomm Linux 1.0 更新到主线时,无法将 persist 分区从 Linux 镜像 LUN0 移动到引导固件 LUN4。 从 Qualcomm Linux 1.0 OTA 升级到 Qualcomm Linux 2.0 后,systemd 单元使用分区标签将 persist 分区挂载到 /var/lib/tee

用户空间对分区标签的引用

如果您的用户空间实用程序或库在 Qualcomm Linux 1.0 中引用根分区标签 system,则必须将其更新为使用引导规范 GUID 或 findmnt 来发现 root 分区。此更改可在升级到 Qualcomm Linux 2.0 时保持兼容性。 注意 库必须使用基于 GUID 的引用方法,才能可靠地找到 rootfs 分区。

镜像注意事项

Qualcomm Linux 1.0 设备可能运行以下镜像变体之一:
  • Base 变体,即使用 qcom-base-bspqcom-base-distro override 构建的 qcom-multimedia-image
  • Custom 变体,即使用 qcom-custom-bspqcom-custom-distro override 构建的 qcom-multimedia-image
Qualcomm Linux 2.0 中对应的镜像如下:
  • Qualcomm Linux 1.0 中使用 qcom-base-bspqcom-base-distro override 构建的 qcom-multimedia-image 镜像对应 Qualcomm Linux 2.0 中的 qcom-multimedia-image
  • Qualcomm Linux 1.0 中使用 qcom-custom-bspqcom-custom-distro override 构建的 qcom-multimedia-image 镜像对应 Qualcomm Linux 2.0 中的 qcom-multimedia-proprietary-image

在运行 Qualcomm Linux 1.0 镜像的设备上部署 Qualcomm Linux 2.0 镜像

Qualcomm Linux 2.0 开发完成后,根据您的产品需求,在 Config #1 到 Config #4 之间选择一个镜像。 以下两种配置的镜像已在 meta-qcom-distro 中作为配方预定义:
  • Config #1:qcom-multimedia-image
  • Config #2:qcom-multimedia-proprietary-image
您可以自行为 Config #3 和 Config #4 定义镜像。有关说明,请参阅为 Config #3 和 Config #4 定义镜像配方 请确保为您产品定义的镜像启用 DISTRO_FEATURE sota,以便在镜像中启用 OSTree 框架。 使用 OSTree 和 capsule 的 OTA 会处理以下分区:
  • EFI:OSTree
  • ROOTFS:OSTree
  • 引导固件:Capsule

OTA 更新命令注意事项

Qualcomm Linux 1.0 和 Qualcomm Linux 2.0 的 OTA 更新步骤类似。有关说明,请参阅 Qualcomm Linux Yocto Guide 在 Qualcomm Linux 2.0 中,您无需执行以下 OTA 更新步骤。此命令仅在 Qualcomm Linux 1.0 中受支持。
  • 在设备上运行 uefi_sec 应用程序,将 efivars 保存到重放保护内存块(RPMB):
在 Qualcomm Linux 2.0 中会跳过该步骤,因为当您运行以下步骤时,EFI 变量会存储在 EFI 分区中: