# Qualcomm Linux 的 OTA 更新

OTA 更新对于保持设备（尤其是嵌入式系统和物联网设备）正常运行至关重要。这些 OTA 更新运行设备接收和安装更新。

Qualcomm Linux 使用 capsule 更新机制来更新固件镜像，并使用 OSTree 更新机制来更新 Linux 操作系统。

> 
> 
> ![../../_images/OTA_Introduction.png](data:image/png;base64,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)
> 
> 
> **图：Qualcomm Linux 的 OTA 更新**

## 使用 capsule 更新固件

Capsule 更新是一种在支持 Qualcomm Linux 的设备上更新固件的方法。UEFI capsule 将固件打包成二进制格式。当设备启动并在正常任务模式下运行时，它会下载 capsule 并将其部署到 EFI 分区。重新启动时，在下一个启动周期内，UEFI 会处理此 capsule 并将更新应用于设备固件。

## 使用 OSTree 进行 Linux 操作系统更新

OSTree 是一个用于管理基于 Linux 的操作系统的版本控制和原子更新的工具。它就像整个 Linux 文件系统的 git 代码仓库一样工作。OSTree 将文件系统树的快照存储在代码仓库中，设备通过网络拉取这些快照。使用 OSTree，更新是原子的更新并且支持回滚，因此中断的更新不会破坏系统。这对于需要安全、一致更新的物联网设备或边缘设备非常有用，如果出现问题，可以回滚。

## 使用 capsule 和 OSTree 进行完整的 OTA 软件更新

要在单个 OTA 系统中管理固件和操作系统更新，请同时使用 capsule 和 OSTree 更新机制。Capsule 更新机制首先处理固件更新，更新底层固件。capsule 更新后，系统重新启动并到达 Linux OS，在那里检查并应用 OSTree 更新。

Qualcomm Linux 使用 Capsule 通过 UEFI 更新低层固件。

以下是使用 capsule 更新固件的步骤：

1. 创建 capsule：称为 UEFI capsule 的二进制文件封装了固件更新。
2. 交付：系统通过将 capsule 二进制文件存储在已挂载的 `/EFI` 路径中，将其交付给 UEFI。
3. 处理：UEFI 固件在启动周期内处理 capsule，并将更新应用于设备固件。

Qualcomm Linux 使用 OSTree 来管理 Linux 操作系统。系统会将 Qualcomm Linux 编译生成的更新包复制到设备，并使用[使用 OSTree 的 Linux OS 更新流程](https://docs.qualcomm.com/doc/80-70020-27SC/topic/ota_update_for_qualcomm_linux.html#linux-os-update-flow-using-ostree)中列出的命令将其至于待激活区(stage)。设备重启后，将应用更新包。

下图显示了带有 OSTree 的 Linux OS 的存储视图。**runtime** 视图指示来自**默认部署的存储**中的哪些目录映射到 runtime 挂载点。

**创建新部署后的存储**视图显示设备成功创建新 OSTree 部署后闪存存储的更新方式。此部署是新建的，并将在下次重启时尝试作为新的 Linux 操作系统。

![../../_images/OTAupdate.png](data:image/png;base64,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)

**图：OTA 更新期间的存储状态概览**

以下是作为 OTA 的一部分更新的 Linux 操作系统和固件镜像列表：

> 
> 
> - **Linux 操作系统镜像**
> 
> 
> 
> > 
> > 
> > - `efi.bin` 文件包含 UKI、initrd 和 bootloader 配置文件。OSTree 在部署期间会创建一个新的配置文件。它列出了复制到 EFI 分区的新内核和 initramfs 镜像的路径。
> >     - `system.img` 文件包含 rootfs，包括以下关键组件：`/ostree`、`/ostree/repo` 和 `/ostree/deploy`。当创建新部署时，OSTree 会更新文件系统树以反映新版本的操作系统。
> - **固件镜像**
> 
> 
> 
> > 
> > 
> > 有关固件镜像列表的信息，请参阅 [GitHub](https://github.com/quic/cbsp-boot-utilities/blob/main/uefi_capsule_generation/FirmwarePartitions.md)。

## Capsule 更新流程

下图展示了 capsule 和 HLOS 的更新流程：

![../../_images/OTA_flow.png](data:image/png;base64,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)

**图：capsule 和 HLOS 的更新流程**

要更新 capsule 和 HLOS，请执行以下操作：

1. 复制 `<capsule>.cap` capsule 文件到 EFI 分区，该分区挂载在已启动的设备上的 `/boot/EFI/UpdateCapsule`。
2. 使用 `EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED` 设置 EFI 变量 (efivar) OsIndications 标志并重新启动设备。

    1. UEFI 从 OsIndications 标志识别出有一个 capsule 可供更新。
    2. UEFI 对 capsule 进行身份验证并从 capsule 更新固件镜像。
    3. Capsule 更新的状态已在 ESRT 表中更新。
    4. 如果 capsule 更新期间出现故障，UEFI 会将固件回滚到以前的版本。
3. UEFI 从 capsule 中成功更新固件，设备使用新固件启动。
4. 将 OSTree repo 复制到设备。使用 OSTree 命令为 HLOS 更新创建一个新的部署，创建一个带有计数标签的新配置文件，然后重新启动设备。
5. Systemd-boot 选择新的配置文件并从中启动内核和用户空间。设备使用更新后的固件和 HLOS 软件启动。`systemd-bless-boot.service` 将新配置标记为 good。
6. 重置 OtaStatus efivar 中的 TrialBootEnabled 标志以指示固件为 good。UEFI 检查此 efivar 以提交新固件。

下图显示了固件更新流程：

![../../_images/OTA_firmware.png](data:image/png;base64,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)

**图：使用 capsule 更新固件**

要使用 capsule 更新固件，请执行以下操作：

1. 要在设备上创建 UpdateCapsule 文件夹，请运行以下命令：

adb shell mkdir /boot/EFI/UpdateCapsule
        Copy to clipboard
2. 将 capsule 复制到设备：

scp -r <firmware_capsule.cap> <user>@<IP_address>:/boot/EFI/UpdateCapsule/<firmware_capsule.cap>
        Copy to clipboard

    有关 `firmware_capsule.cap` 生成capsule 的更多信息，请参阅[在UEFI 中的生成 Capsule](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-4/tools.html#capsule-generation-in-uefi)。
3. 在设备上创建 `data.hex` 包含指定的十六进制数据的文件：

echo -e -n "\x4\x0\x0\x0\x0\x0\x0\x0" > data.hex
        Copy to clipboard
4. 使用 efivar 工具将设备上的 `data.hex` 内容写入 UEFI 变量 OsIndications：

efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -f data.hex -w
        Copy to clipboard

    有关 UEFI 变量的更多信息，请参阅[更新和恢复](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-4/capsule-update-and-recovery.html)。
5. 使用 efivar 工具打印 OsIndications UEFI 变量的值：

efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -p
        Copy to clipboard
6. 要将 efivars 保存到重放保护内存块 (RPMB)，请在设备上运行 `uefi_sec` 应用：

/usr/bin/uefi_sec 1
        Copy to clipboard
7. 重启设备：

reboot
        Copy to clipboard
8. 检查 ESRT 表条目：

cd /sys/firmware/efi/esrt/entries/entry0
        Copy to clipboard

    1. 检查 `last_attempt_status` 命令的输出。如果为 0，则更新成功：

cat last_attempt_status
            Copy to clipboard
    2. 检查 `last_attempt_version` 命令的输出。

cat last_attempt_version
            Copy to clipboard
    3. 检查 `fw_version` 命令的输出。如果 `last_attempt_version` 和 `fw_version` 相同则更新成功：

cat fw_version
            Copy to clipboard

## 使用 OSTree 的 Linux OS 更新流程

下图显示了 Linux OS 更新流程：

![../../_images/OTA_hlos.png](data:image/png;base64,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)

**图：使用 OSTree 更新 Linux 操作系统**

要使用 OSTree 更新 Linux 操作系统，请执行以下操作：

1. 要检查 Qualcomm 设备中的当前部署，请运行以下命令：

ostree admin status
        Copy to clipboard

    输出：

* poky 643b332dd72b345b5040a1decbe7e04bd2d208a04ba59417aa667c901c485504.0
           Version: 1.0
           origin refspec: poky:qcs6490-rb3gen2-vision-kit
        Copy to clipboard

    [\*](https://docs.qualcomm.com/doc/80-70020-27SC/topic/ota_update_for_qualcomm_linux.html#id2)显示设备已启动的当前部署。
2. `ostree_repo` 软件包位于开发主机上的 `<workspace>/build-<DISTRO>/tmp-glibc/deploy/images/<MACHINE>/` 路径中。例如，`<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/`。使用以下 scp 命令将 `ostree_repo` 包从主机复制到 Qualcomm 设备：

scp -r <ostree_repo> <user>@<IP_address>:/tmp
        Copy to clipboard
3. 在 Qualcomm 设备上拉取本地 OSTree 存储库。

    以下是该命令的一般语法：

ostree pull-local /tmp/<ostree_repo> <branch_name>
        Copy to clipboard

    要找到命令的 `branch_name`，运行以下命令：

ostree refs
        Copy to clipboard

    输出：

poky:qcs6490-rb3gen2-vision-kit
        Copy to clipboard

    这里，`qcs6490-rb3gen2-vision-kit` 是一个分支名称示例。
4. 在 Qualcomm 设备上创建部署：

ostree admin deploy <branch_name>
        Copy to clipboard

    这就在 `/boot/loader/entries/` 目录中创建了 `ostree-2-poky.conf` 配置文件。有关详细信息，请参阅 [Systemd 启动计数 - 启动成功](https://docs.qualcomm.com/doc/80-70020-27SC/topic/platform_software_features.html##systemd-boot-successful-boot)。
5. 重启设备：

reboot
        Copy to clipboard
6. 检查设备是否使用新创建的部署启动：

ostree admin status
        Copy to clipboard

    输出：

* poky 1e8a01bcc5cd9b3b34043db494ddcd01ec5c1c84312479a55253358a92250fa3.0
           Version: 1.0
           origin refspec: qcs6490-rb3gen2-vision-kit
           poky 643b332dd72b345b5040a1decbe7e04bd2d208a04ba59417aa667c901c485504.0 (rollback)
           Version: 1.0
           origin refspec: poky:qcs6490-rb3gen2-vision-kit
        Copy to clipboard

    要验证编译主机上新创建的部署，请检查 `<workspace>/build-<DISTRO>/tmp-glibc/work/<MACHINE>/<IMAGE>/ota-sysroot/ostree/deploy/poky/deploy` 路径中的部署。例如，`<workspace>/build-qcom-wayland/tmp-glibc/work/qcs6490-rb3gen2-vision-kit/qcom-multimedia-image/ota-sysroot/ostree/deploy/poky/deploy`。

## Systemd-boot 计数 - 启动成功

下图显示了 systemd-boot 在成功启动时的计数流程：

![../../_images/OTA_systemd_boot.png](data:image/png;base64,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)

**图：成功启动时 systemd-boot 计数**

为了在成功启动后管理 systemd-boot 中的启动计数，OSTree 执行以下步骤：

1. 当 OSTree 部署新配置时，它会创建一个配置文件，其中包含 `+3` 名称中的标签，表示最大重试次数。这将允许启动计数。
2. systemd-boot 检测到入口文件名中的标签 `+3`，并将其重命名为 `ostree-conf+2-1.conf`，表明一次启动尝试已开始。重命名文件后，启动过程继续。
3. `systemd-bless-boot-generator` 创建 `systemd-bless-boot.service`，将其设置为在达到 `boot-complete.target` 时启动。
4. `systemd-bless-boot.service` 通过删除计数器标签 `+2-1` 并将文件重命名为 `ostree-conf.conf` 来将新配置标记为成功。

## Systemd 启动计数 - 启动失败并回滚

下图展示了 systemd-boot 在启动失败和回滚时的计数流程：

![../../_images/OTA_boot_counting.png](data:image/png;base64,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)

**图：启动失败和回滚时 systemd-boot 计数**

为了在启动失败和回滚后管理 systemd-boot 中的启动计数，OSTree 执行以下步骤：

1. 当 OSTree 部署新配置时，它会创建一个 systemd 配置文件，名称中包含一个 `+3` 标签，表示最大重试次数，例如 `ostree-boot+3.conf`。这会启用启动计数。
2. systemd-boot 检测到配置文件名中的标签 `+3`，并将其重命名为 `ostree-boot+2-1.conf`，表明一次启动尝试已开始。重命名文件后，启动过程继续。
3. `systemd-bless-boot-generator` 创建 `systemd-bless-boot.service`，当达到 `boot-complete.target` 时启动。如果 Linux 启动过程中出现任何故障，`systemd-bless-boot.service` 不会从配置文件删除 `+2-1` 计数器标签。
4. 在后续启动中，systemd-boot 检测到配置文件名中的 `+2-1` 标记，将文件重命名为 `ostree-boot+1-2.conf`，并尝试使用它进行启动。
5. 如果 Linux 第二次尝试启动失败，则 `systemd-bless-boot.service` 不会从配置文件中删除计数器标签 `+1-2`。
6. 在下次启动时，systemd-boot 会检测到配置文件名中的 `+1-2` 标记，将文件重命名为 `ostree-boot+0-3.conf`，并尝试使用它进行启动。这是启动 Linux 部署的最后一次尝试。
7. 如果设备在第三次尝试时无法启动 Linux，则 `systemd-bless-boot.service` 不会从配置文件删除计数器标签 `+0-3`。
8. 在后续启动中，systemd-boot 会发现配置文件名中的 `+0-3` 标签。由于计数器已达到零，因此该入口文件（配置文件）被视为已损坏。systemd-boot 通过尝试有效的配置文件条目恢复到早期版本。

## Usrmerge

Linux 中的 Usrmerge 功能通过合并 `/usr` 路径下的某些目录来简化文件系统布局。它将 `/bin`、`/sbin` 和 `/lib` 三个目录分别与 `/usr/bin`、`/usr/sbin` 和 `/usr/lib` 目录合并。

使用 Usrmerge，在 `/bin`、`/sbin` 和 `/lib` 中找到的可执行文件和库将分别放置在 `/usr/bin`、`/usr/sbin` 和 `/usr/lib` 中。原始目录成为指向 /usr 对应目录的符号链接。这种统一的结构使维护更容易，并减少了冗余，因为二进制文件和库只有一个位置，而不是root和 `/usr` 目錄。符号链接确保兼容性，它允许引用 `/bin` 等路径的脚本和软件可以继续运行。

Linux 分发包采用 Usrmerge 以符合文件系统层次结构标准 (FHS) 的建议并简化根文件系统，尤其是在容器化和嵌入式系统中。

Debian、Ubuntu 和 Fedora 等分发包已采用 Usrmerge 作为其系统布局的一部分，使其成为最近版本的标准。这个转换涉及到创建符号链接并将任何剩余文件从起原始目录移动到其 `/usr` 下的对应目录。

总之，Usrmerge 特性整合了 Linux 文件系统，使其更易于管理、更现代化，并符合系统管理和容器化不断演进的需求。

## 在 Qualcomm Linux 中管理 `/var`、`/home`、`/media`、`/mnt`、`/opt`、`/srv` 和 `/usr`

OSTree 将 `/var` 视为持久目录。这意味着用户/runtime 在 `/var` 下创建的内容不受 OSTree 的影响，并在 OTA 更新中持续存在。有关详细信息，请参阅 [OSTree 概览](https://ostreedev.github.io/ostree/introduction/)。

在 OTA 更新期间 OSTree 不会触及的其他目录包括 `/home`、`/media`、`/mnt`、`/opt` 和 `/srv`。OSTree 将这些目录映射为符号链接，如下所示：

- `/home` 是指向 `/var/rootdirs/home` 的符号链接
- `/media` 是指向 `/var/rootdirs/media` 的符号链接
- `/mnt` 是指向 `/var/rootdirs/mnt` 的符号链接
- `/opt` 是指向 `/var/rootdirs/opt` 的符号链接
- `/srv` 是指向 `/var/rootdirs/srv` 的符号链接

存储在 `/home`、`/media`、`/mnt`、`/opt`、`/srv` 和 `/var` 下的任何 runtime 数据在 OTA 更新期间保持不变。

为了维护干净且一致的文件系统，OSTree 建议在编译时不要在上述目录下安装任何 artifact。编译时安装在这些目录中的任何 artifact 都不会打包到 Qualcomm Linux 编译命令生成的 rootfs 镜像中，即，`bitbake <image recipe>`。

要处理在持久路径下 runtime 创建文件和目录，请执行以下操作：

> 
> 
> 1. 当需要时，该进程在 runtime 创建文件或目录。
> 2. `/run/`、`/var/lib/`、`/var/cache/` 和 `/var/log/` 下的路径可以从相应的 systemd 单元文件创建。以下是一个[参考](https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#RuntimeDirectory=)。
> 3. 使用 [systemd-tmpfiles](https://www.freedesktop.org/software/systemd/man/latest/systemd-tmpfiles-setup.service.html) 在启动时创建文件、符号链接和目录。

OSTree 在 `/usr` 目录下创建只读绑定挂载，确保核心操作系统文件对用户不可变。这种方法有助于维护系统的完整性和安全性。OSTree 使用 `/usr` 挂载点来部署下一个更新。

> 
> 
> Note
> 
> - OSTree 允许在编译时安装 `/var/local` 路径下的文件和目录。
> - 尽管 OSTree 保留了安装在 `/usr` 下的内容，在编译时，它不会将安装在 `/usr/local` 子目录中的内容打包至 rootfs 镜像。

在启用 OSTree 的 Qualcomm Linux 中，`/etc` 目录的管理方式既允许系统更新也允许本地定制。

> 
> 
> - `/etc` 目录是可变的，允许在 runtime 进行修改以维护需要在更新过程中保持不变的系统配置。
> - OSTree 支持将 `/usr/etc` 目录的配置文件合并至 `/etc`。这使得 OSTree 可以更新默认配置，同时保留所做的任何本地更改。
> - 当应用更新时，OSTree 会使用文件的原始版本、新更新的文件版本和本地修改的文件版本对 `/etc` 中的配置文件进行三向合并。
> - 如果在合并过程中出现冲突，OSTree 会保留 runtime 修改。这有助于保持系统稳定性并确保关键配置不会被覆盖。

## SOTA 分发特性

软件无线 (SOTA) 分发特性允许对嵌入式系统和 IoT 设备进行远程更新。它集成了 OSTree 等用于系统更新的工具，允许设备无需物理访问即可接收和安装更新。该特性包含在 Qualcomm Linux 参考分发包配置中，具体如下：

> 
> 
> DISTRO_FEATURES:append = " pam overlayfs acl xattr selinux ptest security virtualization tpm usrmerge sota"
>     Copy to clipboard

SOTA 分发特性位于 `meta-qcom-distro/conf/distro/include/qcom-base.inc` 文件中。

## 后续步骤

使用配方处理树外内核模块和设备树

要编译树外内核模块，请参阅[添加内核模块](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-3/kernel-development.html#add-a-kernel-module)。

Note

Qualcomm Linux 仅在 `custom` 变体上的内核外设备树覆盖。

有关设备树/设备树 blob 管理，请参阅[平台设备树](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-3/kernel-development.html#platform-device-tree)中内核的 DTB 编译支持。

Last Published: Jul 24, 2025

[Previous Topic
创建二级虚拟机](https://docs.qualcomm.com/bundle/publicresource/80-70020-27SC/topics/create_secondary_virtual_machine.md) [Next Topic
从 SD 卡启动 Linux 操作系统](https://docs.qualcomm.com/bundle/publicresource/80-70020-27SC/topics/boot_linux_operating_system_from_sdcard.md)