# 迁移到 Qualcomm Linux 1.4 或更高版本

请考虑以下关键更新和改进，了解如何从 Qualcomm^®^ Linux^®^ 1.3 版本迁移到 Qualcomm Linux 1.4 或更高版本。

Qualcomm Linux 1.4 及更高版本拥有 Yocto 5.0 的最新长期支持 (LTS) 版本，称为 Yocto `scarthgap`。通用缓存管理 (GBM) 内存管理器和 Weston 驱动程序现已成为上游版本，取代了 1.3 及更早版本中使用的下游版本。

如果您是 Qualcomm Linux 的新用户且使用的是最新 1.5 版本，则无需迁移您的软件。有关最新版本的新功能、增强特性和局限性的列表，请参阅 [Qualcomm Linux 1.5 Release Notes](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/)。

## Yocto 方面的变更

Yocto 在 1.4 及更高版本中的更改如下：

- 将 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。为避免兼容性问题，请使用最新的 Qualcomm Linux 版本重新编译所有预编译的应用程序。

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

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

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

## 显示方面的变更

在 1.4 及更高版本中，QCS6490 和 QCS5430 的显示协议栈系统级芯片 (SoC) 平台现已成为上游，无需专有的 Snapdragon^®^ 显示管理器 (SDM) 后端。IQ-8275 和 IQ-9075 SoC 平台已使用上游显示协议栈。

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

要在 1.4 及更高版本中启用这些功能，请使用下表中的信息：

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

## 摄像头方面的变更

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

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

有关插件变更的更多信息，请参阅 [Qualcomm IM SDK 中的变更](https://docs.qualcomm.com/doc/80-70020-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)，表示编码器的输出。

## Qualcomm IM SDK 中的变更

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

为体现 Qualcomm IM SDK 插件的变化并与上游 GBM 对齐，请按如下方式更新示例应用程序。

### waylandsink 插件

早期版本的 Qualcomm IM 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 的压缩字段。相反，请使用专为 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-70020-27/ota_update_for_qualcomm_linux.html#ota-update-for-qualcomm-linux)。
- 要详细了解 Qualcomm Intelligent Multimedia (IM) SDK 的新功能、增强特性和局限性，请参阅 [Qualcomm Intelligent Multimedia (IM) SDK Release Notes](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-52/qim-sdk-release-1-5.html)。
- 要了解有关最新发布版本的新功能、增强特性和局限性的更多信息，请参阅 [Qualcomm Linux 1.5 Release Notes](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/)。

Last Published: Jul 21, 2025

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

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