1. SA8155 平台概述
SA8155 是高通第三代车载数字座舱平台的核心 SoC,采用 7nm FinFET 制程,面向 2020 年后量产的高端智能座舱域控制器。本章从芯片架构、GPU 规格和驱动开发环境三个维度建立平台认知,为后续渲染管线映射和图形 API 适配打下硬件基础。
1.1 SA8155 芯片架构
SA8155 采用典型的异构计算架构,集成了多个专用处理单元,通过高速总线互联。下图展示了芯片内部的主要模块及其互联关系。
SA8155 的关键计算单元包括:
| 模块 | 型号/规格 | 驱动开发关注点 |
|---|---|---|
| CPU | Kryo 485 (1+3+4 三丛集) | 调度亲和性、GPU 绑定核 |
| GPU | Adreno 650 | 渲染管线、图形 API 映射 |
| NPU/DSP | Hexagon V66 (15 TOPS) | GPU 协同计算、帧后处理 |
| 显示 | DPU + 多路 DSI/HDMI | 合成器、显示缓冲区管理 |
| 内存 | LPDDR5 3200MHz | 带宽分配、GPU 页表 |
开发提示:SA8155 的 GPU 和显示单元共享同一内存控制器,驱动开发中需要关注 GPU 带宽预留和显示刷新率的同步问题,避免出现帧撕裂或掉帧。
1.2 Adreno 650 GPU 核心规格
Adreno 650 是高通第七代移动 GPU 架构,在 SA8155 上以 600-800 MHz 运行,支持 Vulkan 1.1、OpenGL ES 3.2 和 OpenCL 2.0。其核心规格如下表所示。
| 参数 | 规格 | 说明 |
|---|---|---|
| 架构 | Adreno 7xx 系列 | 统一着色器架构,支持可编程管线 |
| 核心频率 | 600-800 MHz | 根据功耗和温度动态调节 |
| 着色器单元 | 2 个着色器处理器 (SP) | 每个 SP 含 384 个 ALU |
| 纹理单元 | 32 个 TMU | 支持 ASTC/ETC2/BC 压缩 |
| ROP | 16 个 | 支持 4x MSAA、混合操作 |
| 显存带宽 | ~25.6 GB/s | LPDDR5 双通道 |
| API 支持 | Vulkan 1.1 / GLES 3.2 / CL 2.0 | 驱动需实现图形 API 映射层 |
Adreno 650 的渲染管线采用分块渲染架构(Tile-Based Rendering, TBR),将帧缓冲划分为多个小块(Tile)进行逐块渲染,减少显存带宽消耗。下图展示了其内部管线结构。
关键指标:Adreno 650 的 GMEM 大小为 1 MB,可容纳 4 个 32×32 像素的 Tile 及其深度/模板缓冲。驱动需根据渲染目标格式和分辨率动态调整 Tile 划分策略,以最大化 GMEM 命中率。
1.3 驱动开发环境搭建
SA8155 GPU 驱动开发需要交叉编译环境,目标平台为 ARM64(AArch64),主机通常为 x86_64 Linux 工作站。以下是环境搭建的核心步骤。
1.3.1 交叉编译工具链
推荐使用高通官方提供的 Linaro GCC 工具链,或从 AOSP 源码中提取预编译工具链。工具链版本需与内核版本匹配。
| 组件 | 推荐版本 | 下载/安装方式 |
|---|---|---|
| GCC 交叉编译器 | gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu | Linaro 官网或 AOSP prebuilts |
| Binutils | 2.34 | 随工具链附带 |
| Glibc | 2.31 | sysroot 中提供 |
| Kernel Headers | 与目标内核版本一致 | 从内核源码树安装 |
安装工具链后,设置环境变量:
export CROSS_COMPILE=aarch64-none-linux-gnu-
export ARCH=arm64
export PATH=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$PATH
1.3.2 内核源码树
SA8155 的 GPU 驱动(msm DRM 驱动)位于内核源码树的 drivers/gpu/drm/msm/ 目录下。获取源码树的典型方式:
- 从 Code Aurora Forum (CAF) 拉取:高通开源代码仓库,包含 SA8155 的完整内核分支。
- 从 SoC 厂商 BSP 包获取:高通提供给 Tier1 厂商的 Board Support Package,包含预配置的内核源码。
- 从 AOSP 公共内核:Android Common Kernel 中包含了 msm 驱动的基线版本。
配置内核并编译 GPU 驱动模块:
# 进入内核源码根目录
cd kernel/msm-4.19
# 使用 SA8155 默认配置
make defconfig vendor/sa8155_defconfig
# 编译 GPU 驱动模块
make modules_prepare
make M=drivers/gpu/drm/msm modules
常见问题:交叉编译时如果遇到
scripts/basic/fixdep 编译错误,说明主机缺少必要的开发包。安装 flex、bison、libelf-dev 后重新执行 make modules_prepare。
1.3.3 驱动模块加载与验证
编译生成的 msm.ko 驱动模块需要推送到目标设备并加载:
# 将模块推送到设备
adb push drivers/gpu/drm/msm/msm.ko /vendor/lib/modules/
# 加载模块
insmod /vendor/lib/modules/msm.ko
# 验证加载状态
lsmod | grep msm
# 预期输出:msm [permanent] [module]
验证 GPU 驱动正常工作:
# 检查设备节点
ls -l /dev/dri/
# 预期输出:card0 renderD128
# 使用 dmesg 查看驱动初始化日志
dmesg | grep msm
# 预期输出:[msm] adreno 650 initialised, firmware: a650_sqe.fw
开发建议:在搭建环境时,建议使用
ccache 加速重复编译,并在内核配置中启用 CONFIG_DRM_MSM_DEBUG 以获取更详细的驱动调试日志。首次编译完整内核可能需要 30-60 分钟,后续增量编译通常在 5 分钟内完成。