# Chuyển đổi Qualcomm Linux

Hướng dẫn này hỗ trợ bạn chuyển đổi phần mềm sang Qualcomm^®^ Linux^®^ 1.4. Hướng dẫn nêu chi tiết các thay đổi về hành vi trong phiên bản 1.4 so với phiên bản 1.3, tập trung vào các bản cập nhật và điểm cải tiến chính. Hướng dẫn này đặc biệt phù hợp nếu bạn là nhà phát triển đang tìm cách cập nhật phần mềm hiện có của mình lên bản phát hành Qualcomm Linux mới nhất.

Nếu bạn mới làm quen với Qualcomm Linux và sử dụng bản phát hành mới nhất thì không cần chuyển đổi phần mềm.

Với bản phát hành 1.4, Qualcomm Linux đã nâng cấp lên phiên bản hỗ trợ dài hạn mới nhất (LTS) của Yocto 5.0, gọi là Yocto `scarthgap`. Ngoài ra, trình quản lý bộ nhớ dùng để quản lý vùng đệm chung (GBM) và Weston driver đã chuyển sang phiên bản upstream, thay thế các phiên bản downstream được dùng trong phiên bản 1.3 và các phiên bản trước đó.

Để biết danh sách các tính năng mới, điểm cải tiến và hạn chế của bản phát hành mới nhất, hãy xem [*Qualcomm Linux 1.4 Release Notes*](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250403001134/ReleaseNote.html).

## Các thay đổi trong Yocto

Sau đây là các thay đổi trong Yocto cho bản phát hành 1.4:

- Bản phát hành Yocto đã được nâng cấp từ `kirkstone` (v4.0.22) lên `scarthgap` (v5.0.6). Đối với các tính năng và điểm cải tiến của `scarthgap`, hãy xem [Release notes cho 5.0 (scarthgap)](https://docs.yoctoproject.org/5.0.6/singleindex.html#release-notes-for-5-0-scarthgap).
- Trình biên dịch GNU Compiler Collection (GCC) đã được nâng cấp lên v13.2. Để tránh gặp các vấn đề về khả năng tương thích, hãy biên dịch lại mọi ứng dụng dựng sẵn với bản phát hành 1.4 mới nhất.

## Các thay đổi trong trình quản lý bộ nhớ

Trong bản phát hành 1.4, upstream [`libgbm` package](https://git.openembedded.org/openembedded-core/tree/meta/recipes-graphics/mesa?h=scarthgap&amp;id=00a662c5e28235fb64348aab4ce9aeb5e7f95d06)  được dùng để quản lý bộ nhớ thay thế cho biến thể downstream. Thay đổi này ảnh hưởng đến định dạng bộ nhớ và chức năng GBM trên các mô-đun display, graphics, video, and camera.

Để biết danh sách các định dạng được upstream GBM hỗ trợ, hãy xem [`mesa` repository](https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/gbm/main/gbm.h).

## Các thay đổi display

Trong bản phát hành 1.4, display stack của system-on-chip (SoC) QCS6490 và QCS5430 đã chuyển đổi sang giải pháp upstream nên không cần sử dụng chương trình  Trình quản lý màn hình hiển thị (SDM) Snapdragon^®^ độc quyền nữa. Nền tảng QCS8275 và QCS9075 SoC đã sử dụng giải pháp hiển thị upstream.

Do sự chuyển đổi này, một số tính năng phụ thuộc vào SDM không có sẵn theo mặc định. Nếu cần dùng những tính năng này, bạn có thể chuyển display stack sang giải pháp downstream.

Để bật những tính năng này, hãy sử dụng thông tin trong bảng sau:

| Tính năng | Bật trong bản phát hành 1.4 |
| --- | --- |
| Hỗ trợ Embedded DisplayPort (eDP) | Bật downstream path như mô tả trong [*Qualcomm Linux Display Guide - Addendum*](https://docs.qualcomm.com/bundle/resource/topics/80-70018-18A/configure.html#enable-sdm-and-downstream-display-drivers). |
| TypeC over DisplayPort (DP) | Bật downstream path như mô tả trong [*Qualcomm Linux Display Guide - Addendum*](https://docs.qualcomm.com/bundle/resource/topics/80-70018-18A/configure.html#enable-sdm-and-downstream-display-drivers). |
| Tệp thực thi modetest biên dịch sẵn | Trong tệp `libdrm_2.4.120.bb`, hãy bật tùy chọn `install-test-programs`. Để biết thêm thông tin, hãy xem [*Qualcomm Linux Display Guide*](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-18/debug.html#generate-the-drm-mode-test-binary). |

## Các thay đổi trong camera

Trong bản phát hành 1.4, tiện ích quản lý bộ nhớ sử dụng upstream GBM thay vì downstream. Do đó, hãy thay đổi các lệnh Qualcomm Intelligent Multimedia (QIM) gọi chức năng quản lý bộ nhớ camera.

Định dạng mặc định của raw buffers hiện tại là `memory:GBM`. Bạn không cần chỉ định định dạng bộ nhớ trong lệnh `gst`.

**Ví dụ về Pipeline**

- Sau đây là Pipeline bản phát hành 1.3:

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

- Sau đây là Pipeline bản phát hành 1.4:

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

Để biết thêm thông tin về các thay đổi trong plugin, hãy xem [Các thay đổi trong QIM SDK](https://docs.qualcomm.com/doc/80-70018-150V/topic/introduction.html#qim-sdk).

## Các thay đổi trong video

Để quản lý bộ nhớ cho quá trình mã hóa hoặc giải mã video, bản phát hành 1.4 hỗ trợ cơ chế truy cập bộ nhớ trực tiếp (DMA) cho chế độ Xuất (4), chế độ Nhập (5) và chế độ Bản đồ bộ nhớ (MMAP) (2). Chọn chế độ phù hợp dựa trên trường hợp sử dụng cụ thể.

**Ví dụ**

Khi bạn mã hóa trong camera, nó đã tạo vùng đệm DMA. Trong trường hợp này, hãy làm như sau:

> 
> 
> - Đặt đầu vào trình mã hóa ở chế độ Nhập DMA (5). Chế độ này đảm bảo rằng trình mô tả tệp vùng đệm camera (FD) được dùng trực tiếp mà không phân bổ vùng đệm mới ở phía trình điều khiển video và sao chép nội dung.
> - Đặt đầu ra trình mã hóa ở chế độ Nhập DMA (5). Chế độ này đảm bảo rằng video driver phân bổ vùng đệm đầu ra.

Sau đây là ví dụ cho video 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

Trong pipeline này, `output-io-mode` là chế độ Nhập DMA (5), biểu thị đầu vào trình mã hóa và `capture-io-mode` là chế độ Xuất DMA (4), biểu thị đầu ra trình mã hóa.

## Các thay đổi trong QIM SDK

Trong bản phát hành QIM SDK 1.4, hành vi của các plugin `waylandsink`, `qtiqmmfsrc`, `v4l2h264dec` và `v4l2h264enc` đã thay đổi do chuyển đổi trình quản lý bộ nhớ lên upstream. Để biết thêm chi tiết, hãy xem [Các thay đổi trong trình quản lý bộ nhớ](https://docs.qualcomm.com/doc/80-70018-150V/topic/introduction.html#memory-manager).

Để phản ánh sự thay đổi trong các plugin của QIM SDK và việc căn chỉnh theo upstream GBM, hãy cập nhật các ứng dụng mẫu như sau.

### waylandsink plugin

Các phiên bản trước đây của QIM SDK đã dùng phiên bản downstream của plugin `waylandsink` có chứa tọa độ `x,y,width,height` làm đối số bổ sung. Trong các phiên bản sau này, chức năng này không hoạt động do việc chuyển đổi sang plugin upstream `waylandsink`. Các ứng dụng nên chuyển sang dùng plugin `qtivcomposer` cho chức năng này.

Sau đây là các thay đổi plugin và thay đổi tương ứng mà bạn phải thực hiện:

| Thay đổi | Thay đổi | Hành động |
| --- | --- | --- |
| 1.3 | 1.4 | Hành động |
| Có tọa độ `x,y,width,height`. | Cung cấp chức năng thông qua plugin `qtivcomposer`. | Sử dụng plugin `qtivcomposer` cho composition. |
|  |  |  |

**Ví dụ về Pipeline**

- Sau đây là Pipeline bản phát hành 1.3:

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

- Sau đây là Pipeline bản phát hành 1.4:

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 plugin

Từ bản phát hành 1.4, plugin `qtiqmmfsrc` không hỗ trợ trường nén cho NV12 được nén băng thông phổ dụng (UBWC). Thay vào đó, clients phải sử dụng định dạng mới được thiết kế riêng cho hình ảnh NV12 được nén UBWC.

Sau đây là các thay đổi plugin và thay đổi tương ứng mà bạn phải thực hiện:

| Thay đổi | Thay đổi | Hành động |
| --- | --- | --- |
| 1.3 | 1.4 | Hành động |
| `format=NV12`<br><br><br>`compression=ubwc` | Đã thêm `format=NV12_Q08C` | <ul class="simple"><br><li><p>Thay đổi định dạng từ <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code> thành <code class="docutils literal notranslate"><span class="pre">format=NV12_Q08C</span></code>.</p></li><br><li><p>Xóa tham số <code class="docutils literal notranslate"><span class="pre">compression=ubwc</span></code>.</p></li><br></ul> |
|  |  |  |

**Ví dụ về Pipeline**

- Sau đây là Pipeline bản phát hành 1.3:

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

- Sau đây là Pipeline bản phát hành 1.4:

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 and v4l2h264dec plugins

Trong các phiên bản trước đây, GST framework quản lý các buffer của ứng dụng. Từ bản phát hành 1.4, `v4l2` driver hỗ trợ quản lý vùng đệm nội bộ.

Để thêm điểm cải tiến này vào driver, hãy làm như sau:

- Đối với ứng dụng dùng nguồn camera với plugin `v4l2h264enc`, hãy thay đổi cấu hình pipeline  từ `output-io-mode=5`/ `capture-io-mode=5` thành `output-io-mode=5`/ `capture-io-mode=4`.
- Đối với ứng dụng dùng nguồn tệp với plugin `v4l2h264dec`, hãy thay đổi cấu hình pipeline từ `output-io-mode=5`/ `capture-io-mode=5` thành `output-io-mode=4`/ `capture-io-mode=4`.

Sau đây là các thay đổi plugin và thay đổi tương ứng mà bạn phải thực hiện:

| Trường hợp sử dụng | Thay đổi | Thay đổi | Hành động |
| --- | --- | --- | --- |
| Trường hợp sử dụng | 1.3 | 1.4 | Hành động |
| Mã hóa video | `format=NV12`<br><br><br>`compression=ubwc` | Đã thêm `format=NV12_Q08C` | <ul class="simple"><br><li><p>Thay đổi định dạng từ <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code> thành <code class="docutils literal notranslate"><span class="pre">format=NV12_Q08C</span></code>.</p></li><br><li><p>Xóa tham số <code class="docutils literal notranslate"><span class="pre">compression=ubwc</span></code>.</p></li><br></ul> |
| Mã hóa video | `output-io-mode=5` và `capture-io-mode=5` | Đã cập nhật `output-io-mode=5` và `capture-io-mode=4` | Thay đổi các chế độ thành `output-io-mode=5` và `capture-io-mode=4`. |
| Giải mã video | `output-io-mode=5` và `capture-io-mode=5` | <ul class="simple"><br><li><p>Đã thêm caps và <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code></p></li><br><li><p>Đã cập nhật <code class="docutils literal notranslate"><span class="pre">output-io-mode=4</span></code> và <code class="docutils literal notranslate"><span class="pre">capture-io-mode=4</span></code></p></li><br></ul> | <ul class="simple"><br><li><p>Thêm <code class="docutils literal notranslate"><span class="pre">video/x-raw,format=NV12</span></code>.</p></li><br><li><p>Thay đổi các chế độ thành <code class="docutils literal notranslate"><span class="pre">output-io-mode=4</span></code> và <code class="docutils literal notranslate"><span class="pre">capture-io-mode=4</span></code>.</p></li><br></ul> |
|  |  |  |  |

**Ví dụ về Pipeline**

- Sau đây là pipeline trình giải mã video cho bản phát hành 1.3:

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

- Sau đây là pipeline trình giải mã video cho bản phát hành 1.4:

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

- Sau đây là pipeline trình mã hóa video cho bản phát hành 1.3:

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

- Sau đây là pipeline trình mã hóa video cho bản phát hành 1.4:

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

## Các bước tiếp theo

- Để cập nhật qua mạng (OTA) cho Qualcomm Linux, hãy xem [*Qualcomm Linux Yocto Guide*](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-27/qualcomm_linux_software_components.html#ota-update-for-qualcomm-linux).
- Để tìm hiểu thêm về các tính năng mới, điểm cải tiến và hạn chế của Qualcomm Intelligent Multimedia Product (QIMP) SDK, hãy xem [*Qualcomm Linux QIMP SDK Release Notes*](https://docs.qualcomm.com/bundle/publicresource/topics/80-70018-52/qimp_sdk_release_1_4.html).
- Để tìm hiểu thêm về các tính năng mới, điểm cải tiến và hạn chế của bản phát hành mới nhất, hãy xem [*Qualcomm Linux 1.4 Release Notes*](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250403001134/ReleaseNote.html).

Last Published: Oct 23, 2025

[Next Topic
Tham khảo](https://docs.qualcomm.com/bundle/publicresource/80-70018-150V/topics/references.md)

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