> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用 OTA 升级迁移到 Qualcomm Linux 2.0

使用 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-00A0C93EC93B` 和 `EFI`。因此，您可以通过 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-bsp` 和 `qcom-base-distro` override 构建的 `qcom-multimedia-image`
> * Custom 变体，即使用 `qcom-custom-bsp` 和 `qcom-custom-distro` override 构建的 `qcom-multimedia-image`

Qualcomm Linux 2.0 中对应的镜像如下：

> * Qualcomm Linux 1.0 中使用 `qcom-base-bsp` 和 `qcom-base-distro` override 构建的 `qcom-multimedia-image` 镜像对应 Qualcomm Linux 2.0 中的 `qcom-multimedia-image`。
> * Qualcomm Linux 1.0 中使用 `qcom-custom-bsp` 和 `qcom-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 定义镜像配方](https://dragonwingdocs.qualcomm.com/Key-Documents/Migration-Guide/evaluate-overlays-using-supported-workflows#define-the-image-recipe-for-config-%233-and-config-%234)。

请确保为您产品定义的镜像启用 `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](https://dragonwingdocs.qualcomm.com/Key-Documents/Yocto-Guide/update-firmware-and-os-on-qualcomm-linux-using-capsule-and-os-tree-mechanisms#update-capsule-and-hlos)。

在 Qualcomm Linux 2.0 中，您无需执行以下 OTA 更新步骤。此命令仅在 Qualcomm Linux 1.0 中受支持。

> * 在设备上运行 `uefi_sec` 应用程序，将 `efivars` 保存到重放保护内存块（RPMB）：
>   > ```text theme={null}
>   > /usr/bin/uefi_sec 1
>   > ```

在 Qualcomm Linux 2.0 中会跳过该步骤，因为当您运行以下步骤时，EFI 变量会存储在 EFI 分区中：

> ```text theme={null}
> efivar -n <node name> -f data.hex -w
> ```
