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

# 显示

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

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

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

图像处理包括以下内容:

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

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

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-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/DPU_HW_architecture_block_diagram.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=e27dc0cfe9f3b427587eb9c888fdf888" width="290" height="401" data-path="Linux/images/peripheral-interfaces/DPU_HW_architecture_block_diagram.png" />

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

### 显示软件架构

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

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

## 显示规格

### 显示特性

主要特性

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

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

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

3. DSI 接口

4. 4 路 DisplayPort,支持单流传输(SST)

能力

设备支持同时使用两个显示器,并为实现最大并发提供多种配置。下表汇总了这些能力。

| 接口       | 能力                                                                                                                                        |
| -------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **DSI0** | 支持 1280 × 720,使用参考 Raspberry Pi (RPi) 面板;支持视频电子标准协会(VESA)显示流压缩(DSC)1.2                                                                    |
| **eDP0** | 支持 3840 × 2160 @ 60 fps 30 bpp                                                                                                            |
| **eDP1** | 支持 3840 × 2160 @ 60 fps 30 bpp                                                                                                            |
| **eDP2** | 支持 3840 × 2160 @ 60 fps 30 bpp                                                                                                            |
| **eDP3** | 支持 3840 × 2160 @ 60 fps 30 bpp                                                                                                            |
| **最大并发** | 支持以 DP0 为主显示的 3840 × 2160 @ 60 fps、30 bpp,以及以 DP1 为副显示的 3840 × 2160 @ 60 fps 30 bpp。请注意,软件支持最大并发(DSI、eDP0 和 eDP1 之间仅支持 4 路流,包括多流传输(MST))。 |

## 设置 DisplayPort

### 连接 DisplayPort

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

<img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/Displayport_setup_workflow.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=bfc18c5df4c7a747f2543155e1a40fd4" 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-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/IQ-9075_displayport_setup.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=64a884a50661a67e663ab636e586cfea" width="550" height="619" data-path="Linux/images/peripheral-interfaces/IQ-9075_displayport_setup.png" />

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

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

  <Step title="上电">
    给设备上电。Weston 在启动过程中自动运行并显示花朵图案。

    <img src="https://mintcdn.com/qualcomm-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/dragonwing_image.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=cf1a86fa7aba76f7b8247a9a25722e48" 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-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/dragonwing_image_weston.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=1260c0a599203a76987cc503ea006eb5" 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-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/drm_output.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=1606ec6af53e90fa356b050fdf3a48be" 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-staging/TEuuywLWbysJVmUv/Linux/images/peripheral-interfaces/DRM_mode_test.png?fit=max&auto=format&n=TEuuywLWbysJVmUv&q=85&s=47800bb23469524506db2c7f076d5e8d" 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/)                       |
