> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 显示

IQ-8275 平台配备 Qualcomm Adreno 显示处理单元(DPU),提供硬件加速的图像处理。DPU 从内存中获取像素数据,并通过标准接口将其发送到显示外设

<img src="https://mintcdn.com/qualcomm-prod/T1k4QQ7G3l_dE-rX/Linux/images/peripheral-interfaces/Display_DPU_architecture.png?fit=max&auto=format&n=T1k4QQ7G3l_dE-rX&q=85&s=353218d720a9e852e36cf35e1c88ee7d" width="616" height="210" data-path="Linux/images/peripheral-interfaces/Display_DPU_architecture.png" />

DPU 提供以下图像处理和接口能力:

图像处理包括以下内容:

1. 合成:将各个图层混合为单帧并发送到显示面板

2. 缩放:支持对源图像进行放大和缩小以匹配面板分辨率

3. 颜色格式转换:将颜色从一种颜色格式转换为另一种(从 YUV 到 RGB)

4. 色彩空间转换:将颜色从一种色彩空间转换为另一种(sRGB、P3 和 BT2020)

5. 色彩处理:增强色彩以获得更好的视觉质量

6. 接口:使用移动行业处理器接口显示串行接口(MIPI DSI)连接各种面板,并使用 DisplayPort 接口连接电视或显示器

7. MIPI DSI:定义主机处理器与遵循 MIPI 联盟移动设备接口规范的外设之间的协议

8. DisplayPort:作为数字显示接口,主要将视频源连接到计算机显示器等显示设备,还可以传输音频、USB 和其他形式的数据

## 显示架构

### DPU 硬件架构

<img src="https://mintcdn.com/qualcomm-prod/T1k4QQ7G3l_dE-rX/Linux/images/peripheral-interfaces/DPU_HW_architecture_block_diagram.png?fit=max&auto=format&n=T1k4QQ7G3l_dE-rX&q=85&s=73f02b273572c45b840f9358144b1ce5" width="290" height="401" data-path="Linux/images/peripheral-interfaces/DPU_HW_architecture_block_diagram.png" />

| 组件         | 功能                   |
| ---------- | -------------------- |
| **总线接口**   | 从内存中获取数据             |
| **源表面处理**  | 读取 RGB/YUV 表面;执行格式转换 |
| **混合**     | 混合并合成源表面             |
| **目标表面处理** | 根据面板特性转换和调整数据        |
| **压缩**     | 通过发送压缩的显示缓冲区来降低带宽    |
| **显示接口**   | 为连接的显示外设生成时序         |

### 显示软件架构

<img src="https://mintcdn.com/qualcomm-prod/T1k4QQ7G3l_dE-rX/Linux/images/peripheral-interfaces/DPU_SW_architecture_block_diagram.png?fit=max&auto=format&n=T1k4QQ7G3l_dE-rX&q=85&s=24cad07837863457ea8fda4cc008937d" width="859" height="719" data-path="Linux/images/peripheral-interfaces/DPU_SW_architecture_block_diagram.png" />

| 组件                | 说明                      |
| ----------------- | ----------------------- |
| **Wayland Sink**  | 与 Weston 通信以渲染显示的插件     |
| **Weston**        | Wayland 合成器;负责合成和渲染     |
| **DRM 后端**        | 管理 Adreno DPU 硬件资源和合成策略 |
| **libdrm**        | 提供 DRM IOCTL API 的库     |
| **DRM/KMS 框架**    | 面向硬件功能的内核与用户空间接口        |
| **Adreno DPU 驱动** | 管理通向面板接口的所有像素数据路径       |

## 显示规格

### 显示特性

主要特性

显示子系统支持以下主要特性:

1. 使用上游协议的 Wayland 和 Weston

2. 带直接渲染管理器(DRM)后端模块的 Weston 合成器

3. DSI 接口

4. 2 个支持单流传输(SST)的 DisplayPort

能力

下表总结了各项能力。

| 接口       | 能力                                                                                   |
| -------- | ------------------------------------------------------------------------------------ |
| **DSI0** | 支持 1280 × 720(使用参考 Raspberry Pi(RPi)面板),支持视频电子标准协会(VESA)显示流压缩(DSC)1.2                |
| **eDP0** | 支持 3840 × 2160 @ 60 fps 30 bpp                                                       |
| **eDP1** | 支持 3840 × 2160 @ 60 fps 30 bpp                                                       |
| **最大并发** | 支持以 DP0 为主显示的 3840 × 2160 @ 60 fps、30 bpp,以及以 DP1 为副显示的 3840 × 2160 @ 60 fps 30 bpp。 |

## 设置 DisplayPort

### 连接 DisplayPort

要在 DisplayPort 上查看示例应用程序的输出,请设置 DisplayPort。

<img src="https://mintcdn.com/qualcomm-prod/Bh7DlgudKfjY_3Wf/Linux/images/peripheral-interfaces/Displayport_setup_workflow.png?fit=max&auto=format&n=Bh7DlgudKfjY_3Wf&q=85&s=e79f61ff4994f44ffa7e48f85fc2e9ac" width="1133" height="228" data-path="Linux/images/peripheral-interfaces/Displayport_setup_workflow.png" />

显示子系统提供 Weston 和 Wayland 合成器以及 libdrm,它们与 DPU 驱动交互以渲染 Wayland 客户端应用程序。使用示例测试应用程序来评估 Wayland 应用程序的基本渲染并连接到 DisplayPort。

### 验证 DisplayPort 设置

<img src="https://mintcdn.com/qualcomm-prod/Bh7DlgudKfjY_3Wf/Linux/images/peripheral-interfaces/IQ8275_DP_setup.png?fit=max&auto=format&n=Bh7DlgudKfjY_3Wf&q=85&s=cdbb6269b5a432813ff9559291e1b8a7" width="450" height="358" data-path="Linux/images/peripheral-interfaces/IQ8275_DP_setup.png" />

<Steps>
  <Step title="连接主显示器">
    将 DisplayPort 线缆连接到 **eDP0** 连接器。
  </Step>

  <Step title="连接副显示器(可选)">
    如需双显示器,请将第二根 DisplayPort 线缆连接到 **eDP1**。
  </Step>

  <Step title="上电">
    为设备上电。Weston 会在启动期间自动启动并显示花朵图案。

    <img src="https://mintcdn.com/qualcomm-prod/GfyA_U32cnx0UaZ3/Linux/images/peripheral-interfaces/dragonwing_image.png?fit=max&auto=format&n=GfyA_U32cnx0UaZ3&q=85&s=865afde0146393ced6e464e9c7e5a021" width="3910" height="2214" data-path="Linux/images/peripheral-interfaces/dragonwing_image.png" />
  </Step>
</Steps>

### SSH 访问

您必须启用 SSH 才能访问主机设备。

## 测试与验证

### 运行 Weston simple EGL 客户端应用程序

Weston simple EGL 是一个示例测试应用程序,用于验证 DisplayPort 上帧的合成和渲染。要运行该应用程序,请运行以下命令:

```bash theme={null}
mount -o remount,rw /
```

```
. /etc/profile
```

```
export XDG_RUNTIME_DIR=/run/user/1000 && mkdir -p $XDG_RUNTIME_DIR
```

```
cd /usr/bin
```

```
export WAYLAND_DISPLAY=wayland-1 && weston-simple-egl
```

下图显示了在显示器上运行的 Weston simple EGL 客户端应用程序。

<img src="https://mintcdn.com/qualcomm-prod/GfyA_U32cnx0UaZ3/Linux/images/peripheral-interfaces/dragonwing_image_weston.png?fit=max&auto=format&n=GfyA_U32cnx0UaZ3&q=85&s=8352f6622bc4882ac4f20df135b03532" width="3865" height="2232" data-path="Linux/images/peripheral-interfaces/dragonwing_image_weston.png" />

按 `Ctrl+C` 终止。

### 运行 DRM modetest 应用程序

DRM modetest 可确保 DSI 和 DPU 路径正常工作。要验证显示驱动拓扑,请运行 DRM modetest。

注意

您必须启用 SSH 才能访问主机设备。请参阅 [Connect SSH](https://dragonwingdocs.qualcomm.com/Linux/devices/iq9075-evk/set-up-the-device#connect-over-ssh)

1. 要终止 Weston 客户端应用程序,请在设备 shell 中运行以下命令:

```
mount -o remount,rw /
```

```
ps -A | grep weston
```

示例输出:

```
824 ?        00:00:12 weston
1090 ?        00:00:00 weston-keyboard
1092 ?        00:00:01 weston-desktop-
```

使用示例 Weston 进程列表中的 Weston 进程 ID 来终止 Weston 进程。

2. 要终止所有 Weston 进程,请运行以下命令:

```
systemctl stop weston.service
```

3.要更改 modetest 应用程序的权限,请运行以下命令:

```
chmod 0777 /usr/bin/modetest
```

4. 要查看连接器 ID 和模式,请运行以下命令:

```
/usr/bin/modetest -M msm > /opt/drm_mode.txt
```

5. 要验证 DRM 模式和连接器信息,请将 /opt/drm\_mode.txt 文件拉取到本地主机计算机。使用安全复制协议(SCP)将 drm\_mode.txt 文件从设备拉取到主机计算机。例如,

```
scp -r root@<IP of the device>:/opt/drm_mode.txt <directory path of the host machine>
```

注意

当提示输入密码时,输入 oelinux123。
下图所示的输出来自 /opt/drm\_mode.txt 文件。

<img src="https://mintcdn.com/qualcomm-prod/XFFGGnuKFRy5vKOW/Linux/images/peripheral-interfaces/drm_output.png?fit=max&auto=format&n=XFFGGnuKFRy5vKOW&q=85&s=3f23888f707bb9ff3fe5b2b63e9d1337" width="1503" height="166" data-path="Linux/images/peripheral-interfaces/drm_output.png" />

6. 要获取连接器 ID、模式名称和刷新率,请使用 /opt/drm\_mode.txt 文件中的相关值:

```
modetest -M msm -s <Connector id>:<mode name>-<refresh>
```

7. 要启动 modetest 应用程序,请使用从 /opt/drm\_mode.txt 文件中获取的连接器 ID 和模式名称运行以下示例命令。例如:

```
/usr/bin/modetest -M msm -s 32:1920x1080-60
```

注意

启动 DRM modetest 应用程序时,请忽略警告日志:Failed to set gamma: Function not implemented。

<img src="https://mintcdn.com/qualcomm-prod/T1k4QQ7G3l_dE-rX/Linux/images/peripheral-interfaces/DRM_mode_test.png?fit=max&auto=format&n=T1k4QQ7G3l_dE-rX&q=85&s=90a7a78c9d543821b0b91126925a16c4" width="694" height="384" data-path="Linux/images/peripheral-interfaces/DRM_mode_test.png" />

要终止 modetest 应用程序,请按 CTRL + C。
请确保重新启动 Weston

```
systemctl start weston.service
```

## 故障排除

### 检查 DisplayPort 状态

使用以下命令挂载 debugfs 文件系统

```
 mount -t debugfs none /sys/kernel/debug
```

```bash theme={null}
# Cable status
cat /sys/class/drm/card0-DP-1/status   # eDP0
cat /sys/class/drm/card0-DP-2/status   # eDP1

# Available modes (EDID)
cat /sys/class/drm/card0-DP-1/modes

# Detailed DP info
cat /sys/kernel/debug/dri/0/DP-1/dp_debug
```

## 资源

| 资源           | URL                                                                                                                        |
| ------------ | -------------------------------------------------------------------------------------------------------------------------- |
| DRM 内部机制     | [https://www.kernel.org/doc/html/v5.4/gpu/drm-internals.html](https://www.kernel.org/doc/html/v5.4/gpu/drm-internals.html) |
| 内核模式设置(KMS)  | [https://www.kernel.org/doc/html/v5.4/gpu/drm-kms.html](https://www.kernel.org/doc/html/v5.4/gpu/drm-kms.html)             |
| Wayland 协议   | [https://wayland.freedesktop.org/](https://wayland.freedesktop.org/)                                                       |
| Weston 合成器   | [https://gitlab.freedesktop.org/wayland/weston](https://gitlab.freedesktop.org/wayland/weston)                             |
| GStreamer 文档 | [https://gstreamer.freedesktop.org/documentation/](https://gstreamer.freedesktop.org/documentation/)                       |
