# Qualcomm Linux 迁移

本指南可帮助您将软件迁移至 Qualcomm^®^ Linux^®^ 1.4 版本。本文详细阐述了与 1.3 版本相比，1.4 版本在运行表现方面的变化，重点介绍了关键的更新内容和改进。如果当前您已经在开发中，希望将现有软件更新到最新的 Qualcomm Linux 版本，那么本指南与您密切相关。

如果您是 Qualcomm Linux 的新用户且使用的是最新版本，则无需迁移您的软件。

在 1.4 发布版本中，Qualcomm Linux 已升级到 Yocto 5.0 的最新长期支持 (LTS) 版本，即 Yocto `scarthgap`。此外，通用缓存管理 (GBM) 内存管理器和 Weston 驱动程序已过渡到上游版本，取代了 1.3 及更早版本中使用的下游版本。

有关最新版本的新功能、增强特性和局限性的列表，请参阅 [*Qualcomm Linux 1.4 Release Notes*](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250403001134/ReleaseNote.html)。

## Yocto 方面的变更

1.4 版本中 Yocto 的变更如下：

- Yocto 版本已从 `kirkstone` (v4.0.22) 升级到 `scarthgap` (v5.0.6)。有关 `scarthgap` 的功能和增强特性，请参阅 [Release notes for 5.0 (scarthgap)](https://docs.yoctoproject.org/5.0.6/singleindex.html#release-notes-for-5-0-scarthgap)。
- GNU 编译器集合 (GCC) 编译器已升级到 v13.2 版本。为避免兼容性问题，请使用最新的 1.4 版本重新编译任何预先构建的应用程序。

## 内存管理器方面的变更

在 1.4 版本中，用于内存管理的上游 [`libgbm` package](https://git.openembedded.org/openembedded-core/tree/meta/recipes-graphics/mesa?h=scarthgap&amp;id=00a662c5e28235fb64348aab4ce9aeb5e7f95d06) 取代了下游版本。此变更会影响显示、图形、视频和摄像头模块中的内存格式和 GBM 功能。

有关上游 GBM 支持的格式列表，请参阅 [`mesa` repository](https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/gbm/main/gbm.h)。

## 显示方面的变更

在 1.4 版本中，QCS6490 和 QCS5430 片上系统 (SoC) 平台的显示堆栈已迁移到完全的上游解决方案，不再需要专有的 Snapdragon^®^ 显示管理器 (SDM) 后端。QCS8275 和 QCS9075 SoC 平台已使用上游显示解决方案。

由于此次迁移，某些依赖于 SDM 组件的功能默认不可用。如果您需要这些功能，可以将显示堆栈切换到下游实现。

要启用这些功能，请使用下表中的信息：

| 功能 | 在 1.4 版本中启用 |
| --- | --- |
| 嵌入式 DisplayPort (eDP) 支持 | 按照 [*Qualcomm Linux Display Guide - Addendum*](https://docs.qualcomm.com/bundle/resource/topics/80-70018-18A/configure.html#enable-sdm-and-downstream-display-drivers) 中所述启用下游路径。 |
| 基于 DisplayPort (DP) 的 TypeC | 按照 [*Qualcomm Linux Display Guide - Addendum*](https://docs.qualcomm.com/bundle/resource/topics/80-70018-18A/configure.html#enable-sdm-and-downstream-display-drivers) 中所述启用下游路径。 |
| 预构建 modetest 二进制文件 | 在 `libdrm_2.4.120.bb` 文件中，启用 `install-test-programs` 选项。有关更多信息，请参阅 [*Qualcomm Linux 显示指南*](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-18/debug.html#generate-the-drm-mode-test-binary)。 |

## 摄像头方面的变更

在 1.4 版本中，缓存管理工具使用上游 GBM 组件，而不再使用下游组件。因此，需要更改 Qualcomm Intelligent Multimedia (QIM) 命令来调用摄像头缓存管理。

raw 缓存的默认格式现为 `memory:GBM`。您无需在 `gst` 命令中指定内存格式。

**Pipeline 示例**

- 1.3 版本的 pipeline 如下：

gst-launch-1.0 qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! waylandsink fullscreen=true async=true sync=false
    Copy to clipboard

- 1.4 版本的 pipeline 如下：

gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! waylandsink fullscreen=true sync=false
    Copy to clipboard

有关插件变更的更多信息，请参阅 [QIM SDK 方面的变更](https://docs.qualcomm.com/doc/80-70018-150Y/topic/introduction.html#qim-sdk)。

## 视频方面的变更

为了管理用于视频编码或解码的缓存，1.4 版本支持直接内存访问 (DMA) Export 模式 (4)、DMA Import 模式 (5) 以及内存映射 (MMAP) 模式 (2)。请根据您的具体用例选择合适的模式。

**示例**

摄像头进行编码时，就会生成 DMA 缓存。在本用例中，请执行以下操作：

> 
> 
> - 将编码器输入设置为 DMA Import 模式 (5)。此模式可确保直接使用摄像头缓存文件描述符 (FD)，无需在视频驱动端分配新的缓存并复制内容。
> - 将编码器输出设置为 DMA Import 模式 (5)。此模式可确保由视频驱动程序分配输出缓存。

此示例的视频 pipeline 如下：

gst-launch-1.0 qtiqmmfsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! v4l2h264enc output-io-mode=5 capture-io-mode=4 ! h264parse ! mp4mux ! filesink location=/opt/cam_enc.mp4
    Copy to clipboard

在此 pipeline 中，`output-io-mode` 为 DMA Import 模式 (5)，表示编码器的输入，`capture-io-mode` 为 DMA Export 模式 (4)，表示编码器的输出。

## QIM SDK 方面的变更

在 QIM SDK 1.4 版本中，由于内存管理器组件向上游迁移，`waylandsink`、`qtiqmmfsrc`、`v4l2h264dec` 和 `v4l2h264enc` 插件的行为发生了变化。有关更多详细信息，请参阅[内存管理器方面的变更](https://docs.qualcomm.com/doc/80-70018-150Y/topic/introduction.html#memory-manager)。

为了将这些变更体现在 QIM SDK 插件中并与上游 GBM 保持一致，请按以下方式更新示例应用程序。

### waylandsink 插件

早期版本的 QIM SDK 使用的是 `waylandsink` 插件的下游版本，该版本会将 `x,y,width,height` 坐标作为额外参数包含在内。在后续版本中，由于切换到了上游 `waylandsink` 插件，此功能不再可用。应用程序现在应使用 `qtivcomposer` 插件来实现该功能。

插件的变更以及您必须采取的相应操作如下：

| 变更 | 变更 | 操作 |
| --- | --- | --- |
| 1.3 | 1.4 | 操作 |
| 包含 `x,y,width,height` 坐标。 | 通过 `qtivcomposer` 插件提供功能。 | 使用 `qtivcomposer` 插件进行合成。 |
|  |  |  |

**Pipeline 示例**

- 1.3 版本的 pipeline 如下：

gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<1280, 720>" sink_1::position="<590, 310>" sink_1::dimensions="<640, 360>" mixer. ! queue ! waylandsink enable-last-sample=false sync=true fullscreen=true filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=5 output-io-mode=5 ! mixer. filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=5 output-io-mode=5 ! mixer.
    Copy to clipboard

- 1.4 版本的 pipeline 如下：

gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<1280, 720>" sink_1::position="<590, 310>" sink_1::dimensions="<640, 360>" mixer. ! queue ! waylandsink fullscreen=true filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw, format=NV12 ! mixer. filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw, format=NV12 ! mixer.
    Copy to clipboard

### qtiqmmfsrc 插件

从 1.4 版本开始，`qtiqmmfsrc` 插件不再支持通用带宽压缩 (UBWC) NV12 的 compression 字段。取而代之的是，客户端必须使用新格式，其专门为经 UBWC 压缩的 NV12 图像设计。

插件的变更以及您必须采取的相应操作如下：

| 变更 | 变更 | 操作 |
| --- | --- | --- |
| 1.3 | 1.4 | 操作 |
| `format=NV12`<br><br><br>`compression=ubwc` | 新增 `format=NV12_Q08C` | <ul class="simple"><br><li><p>将格式从 <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code> 更改为 <code class="docutils literal notranslate"><span class="pre">format=NV12_Q08C</span></code>。</p></li><br><li><p>移除 <code class="docutils literal notranslate"><span class="pre">compression=ubwc</span></code> 参数。</p></li><br></ul> |
|  |  |  |

**Pipeline 示例**

- 1.3 版本的 pipeline 如下：

gst-launch-1.0 qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! v4l2h264enc output-io-mode=5 capture-io-mode=5 ! h264parse ! filesink location=/opt/video.h264
    Copy to clipboard

- 1.4 版本的 pipeline 如下：

gst-launch-1.0 -ev qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw,format=NV12_Q08C,width=1920,height=1080,framerate=30/1 ! queue ! v4l2h264enc output-io-mode=5 capture-io-mode=4 ! h264parse ! filesink location=/opt/video.h264
    Copy to clipboard

### v4l2h264enc 和 v4l2h264dec 插件

在早期版本中，GST 框架负责管理应用程序缓存。从 1.4 版本开始，`v4l2` 驱动程序支持内部缓存管理。

要将此改进特性添加到驱动程序中，请执行以下操作：

- 对于使用摄像头源和 `v4l2h264enc` 插件的应用程序，请将 pipeline 配置 `output-io-mode=5`/`capture-io-mode=5` 更改为 `output-io-mode=5`/`capture-io-mode=4`。
- 对于使用文件源和 `v4l2h264dec` 插件的应用程序，请将 pipeline 配置 `output-io-mode=5`/`capture-io-mode=5` 更改为 `output-io-mode=4`/`capture-io-mode=4`。

插件的变更以及您必须采取的相应操作如下：

| 用例 | 变更 | 变更 | 操作 |
| --- | --- | --- | --- |
| 用例 | 1.3 | 1.4 | 操作 |
| 视频编码 | `format=NV12`<br><br><br>`compression=ubwc` | 新增 `format=NV12_Q08C` | <ul class="simple"><br><li><p>将格式从 <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code> 更改为 <code class="docutils literal notranslate"><span class="pre">format=NV12_Q08C</span></code>。</p></li><br><li><p>移除 <code class="docutils literal notranslate"><span class="pre">compression=ubwc</span></code> 参数。</p></li><br></ul> |
| 视频编码 | `output-io-mode=5` 和 `capture-io-mode=5` | 更改为 `output-io-mode=5` 和 `capture-io-mode=4` | 将模式更改为 `output-io-mode=5` 和 `capture-io-mode=4`。 |
| 视频解码 | `output-io-mode=5` 和 `capture-io-mode=5` | <ul class="simple"><br><li><p>新增 caps 和 <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code></p></li><br><li><p>更改为 <code class="docutils literal notranslate"><span class="pre">output-io-mode=4</span></code> 和 <code class="docutils literal notranslate"><span class="pre">capture-io-mode=4</span></code></p></li><br></ul> | <ul class="simple"><br><li><p>添加 <code class="docutils literal notranslate"><span class="pre">video/x-raw,format=NV12</span></code>。</p></li><br><li><p>将模式更改为 <code class="docutils literal notranslate"><span class="pre">output-io-mode=4</span></code> 和 <code class="docutils literal notranslate"><span class="pre">capture-io-mode=4</span></code>。</p></li><br></ul> |
|  |  |  |  |

**Pipeline 示例**

- 1.3 版本的视频解码器 pipeline 如下：

gst-launch-1.0 -e filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=5 output-io-mode=5 !  waylandsink fullscreen=true
    Copy to clipboard

- 1.4 版本的视频解码器 pipeline 如下：

gst-launch-1.0 -e filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
    Copy to clipboard

- 1.3 版本的视频编码器 pipeline 如下：

gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=3840,height=2160,framerate=30/1,compression=ubwc,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=5 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux1.mp4"
    Copy to clipboard

- 1.4 版本的视频编码器 pipeline 如下：

gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw,format=NV12_Q08C,width=3840,height=2160,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux1.mp4"
    Copy to clipboard

## 后续步骤

- 要为 Qualcomm Linux 进行空中下载 (OTA) 更新，请参阅 [*Qualcomm Linux Yocto 指南*](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-27/qualcomm_linux_software_components.html#ota-update-for-qualcomm-linux)。
- 要了解有关 Qualcomm Intelligent Multimedia Product (QIMP) SDK 的新功能、增强特性和局限性的更多信息，请参阅 [*Qualcomm Linux QIMP SDK Release Notes*](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-52/qimp_sdk_release_1_4.html)。
- 要了解有关最新发布版本的新功能、增强特性和局限性的更多信息，请参阅 [*Qualcomm Linux 1.4 Release Notes*](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250403001134/ReleaseNote.html)。

Last Published: Apr 24, 2025

[Next Topic
参考资料](https://docs.qualcomm.com/bundle/publicresource/80-70018-150Y/topics/references.md)

Source: [https://docs.qualcomm.com/doc/80-70018-150Y/topic/introduction.html](https://docs.qualcomm.com/doc/80-70018-150Y/topic/introduction.html)