高通SA8155平台显示与GPU驱动开发实战 - 第1节

1.1 SA8155 芯片架构总览

高通 SA8155(Snapdragon Automotive 8155)是面向第三代智能座舱的旗舰级 SoC,采用 7nm 制程工艺。其核心架构围绕 Kryo 485 CPU、Adreno 650 GPU、Hexagon 690 DSP 和 Spectra 380 ISP 构建,提供强大的异构计算能力。

架构要点:SA8155 在显示与图形方面最大的特点是 Display Processing Unit (DPU) 与 GPU 分离,DPU 负责合成与输出,GPU 负责渲染,两者通过 SMMU 共享内存带宽。
SA8155 芯片顶层架构框图 Kryo 485 CPU 1x A76 + 3x A76 + 4x A55 Adreno 650 GPU Vulkan 1.1 / OpenGL ES 3.2 Display Processing Unit 4 层硬件合成 + 旋转 系统总线 ACE / AXI LPDDR4x / LPDDR5 SMMU 共享内存 Hexagon 690 DSP 音频 / 传感器 / 计算机视觉 关键设计理念 • GPU 与 DPU 物理分离 • 显示流水线独立于 GPU • SMMU 统一地址映射 • 支持多屏异显(最多 4 屏)

1.2 显示子系统框图

SA8155 的显示子系统由 MDSS (Mobile Display Subsystem) 统一管理,包含 MDP(Mobile Display Processor)、DPU、DSI/DP 接口控制器以及 HDMI TX 等模块。显示数据流从 GPU 渲染完成后,经 SMMU 进入 MDP 进行合成,最终通过物理接口输出到屏幕。

模块 功能 驱动对应
MDP 多层合成、缩放、色彩转换 msm_drv.c / mdp5 / dpu1
DPU 显示流水线控制、时序生成、混合 dpu_encoder.c / dpu_crtc.c
DSI Controller MIPI DSI 协议层、命令/视频模式 dsi_host.c / dsi_ctrl.c
DP Controller DisplayPort 输出,支持 4K@60Hz dp_display.c / dp_ctrl.c
HDMI TX HDMI 2.0 输出(部分 SKU) hdmi.c / hdmi_phy.c
SA8155 显示子系统数据流框图 Adreno 650 GPU 渲染帧缓冲区 SMMU IOMMU 地址映射 MDP / DPU 合成 + 色彩管理 DSI / DP / HDMI 物理接口输出 显示数据流路径 1. GPU 渲染完成 → 2. SMMU 将物理地址映射到 DPU 可访问空间 3. DPU 读取帧缓冲区 → 4. 硬件合成器叠加多层 → 5. 编码后通过 DSI/DP 发送到屏幕

1.3 Adreno 650 GPU 简介

Adreno 650 是高通第 6 代 GPU 架构,支持 Vulkan 1.1、OpenGL ES 3.2、OpenCL 2.0 以及 DirectX 12(通过 Wine/DXVK 桥接)。在 SA8155 上,GPU 通过 kgsl (Kernel Graphics Subsystem) 驱动与内核交互。

特性 参数
核心频率 最高 670 MHz(可动态调频)
统一着色器 1024 个 ALU(算术逻辑单元)
显存带宽 通过 LPDDR4x 4266 MHz,64-bit 双通道
显示输出 最大 4K@60Hz 单屏,或 2K@60Hz 双屏
驱动模型 kgsl + adreno_cores + msm_drm
开发提示:Adreno 650 的驱动代码位于内核 drivers/gpu/drm/msm 目录下,其中 adreno 子目录包含 GPU 核心逻辑,dpu 子目录包含显示处理单元驱动。调试时可通过 kgsl debugfs 接口查看 GPU 频率与负载。
Adreno 650 GPU 内部模块框图 Shader Processor 1024 ALU Texture Unit 16 采样器 Render Backend 4 个 ROP GMEM / 内存控制器 1MB 片内 GMEM Adreno 650 渲染流水线 1. 命令处理器解析 GPU 命令 → 2. Shader Processor 执行顶点/片元着色器 3. Texture Unit 采样纹理 → 4. Render Backend 写入 GMEM → 5. 最终输出到帧缓冲区

1.4 开发板与调试环境搭建

SA8155 开发通常使用 高通 SA8155P 开发板(MTP/CRD) 或第三方核心板(如移远、广和通)。调试环境需要准备 Linux 主机(Ubuntu 20.04/22.04)、高通 EDL 工具 以及 ADB/Fastboot。

1.4.1 硬件准备清单

  • SA8155 开发板(MTP 或 CRD 版本)
  • USB Type-C 数据线(用于 ADB 调试与 fastboot 刷机)
  • 12V/3A DC 电源适配器
  • HDMI 或 DP 显示器(用于验证显示输出)
  • 串口调试线(UART,用于内核早期日志)

1.4.2 软件环境搭建步骤

  1. 安装依赖包:
    sudo apt update
    sudo apt install git build-essential python3 python3-pip \
      device-tree-compiler u-boot-tools adb fastboot
  2. 下载内核源码:
    git clone --depth=1 -b sa8155-la-1.0 https://github.com/qualcomm-linux/msm-4.19
    cd msm-4.19
  3. 配置内核:
    export ARCH=arm64
    export CROSS_COMPILE=aarch64-linux-gnu-
    make sa8155_defconfig
    make -j$(nproc) Image.gz dtbs
  4. 烧录到开发板:
    fastboot flash boot out/arch/arm64/boot/Image.gz
    fastboot flash dtbo out/arch/arm64/boot/dts/qcom/sa8155.dtb
    fastboot reboot
常见问题:如果开发板无法进入 fastboot 模式,请按住 VOL_UP + VOL_DOWN 键同时上电,进入 EDL(Emergency Download)模式后使用 QPST 工具恢复。另外,确保串口线连接正确(TX/RX/GND),波特率设置为 115200。

1.4.3 调试工具链

工具 用途 常用命令
ADB Android 调试桥,用于文件传输与 shell adb shell / adb logcat
Fastboot 刷机与分区管理 fastboot flash / fastboot boot
dmesg 内核日志查看 dmesg -w | grep msm
kgsl debugfs GPU 状态监控 cat /sys/kernel/debug/kgsl/proc/0/mem
DRM 调试 显示状态查询 cat /sys/kernel/debug/dri/0/state
开发调试环境连接拓扑 Linux 主机 Ubuntu 20.04/22.04 USB 线 ADB / Fastboot SA8155 开发板 MTP / CRD 串口调试 115200 baud 调试流程 1. 主机通过 USB 连接开发板 → 2. 使用 ADB 进入 shell 或 fastboot 刷机 3. 串口线连接开发板 UART 口 → 4. 使用 minicom/picocom 查看内核启动日志
环境验证:搭建完成后,在开发板终端执行 dmesg | grep -i "msm_drm\|adreno\|dpu",如果看到类似 [drm] adreno 1a00000.gpu: hw: 0x06050100 的输出,说明 GPU 驱动已成功加载。显示输出可通过 cat /sys/class/graphics/fb0/modes 查看当前分辨率。