> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.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 提供了版本控制的不可变文件系统结构,可实现以下功能:

* 原子升级
* 回滚能力
* 高效的基于增量的更新

这一机制使其适用于嵌入式和边缘平台,确保系统更新可靠、一致,并在发生故障时可恢复。

对于固件更新,使用 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 配置设备时定义。

这些分区可能有一些未使用的空间。例如,QCS6490 中的未使用空间如下:

* UEFI 为 700 KB
* TZ 为 25 KB
* DTB 为 60 MB

您可以将未使用的空间用于可容纳在其中的功能或其他模块。如果新增功能使固件二进制文件的大小增加,但仍能容纳在已预先分配的分区大小内,则可以使用 capsule 更新目标分区中的镜像。

建议 OTA 路径不升级虚拟机监控程序。也就是说,如果设备使用带 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 到 Qualcomm Linux 2.0 的 OTA 升级后,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` overrides 构建的 `qcom-multimedia-image`
> * Custom 变体,即使用 `qcom-custom-bsp` 和 `qcom-custom-distro` overrides 构建的 `qcom-multimedia-image`

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

> * Qualcomm Linux 1.0 中使用 `qcom-base-bsp` 和 `qcom-base-distro` overrides 构建的 `qcom-multimedia-image` 镜像对应于 Qualcomm Linux 2.0 中的 `qcom-multimedia-image`。
> * Qualcomm Linux 1.0 中使用 `qcom-custom-bsp` 和 `qcom-custom-distro` overrides 构建的 `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 指南](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
> ```
