1. SA8155 平台概述

SA8155 是高通第三代车载数字座舱平台的核心 SoC,采用 7nm FinFET 制程,面向 2020 年后量产的高端智能座舱域控制器。本章从芯片架构、GPU 规格和驱动开发环境三个维度建立平台认知,为后续渲染管线映射和图形 API 适配打下硬件基础。

1.1 SA8155 芯片架构

SA8155 采用典型的异构计算架构,集成了多个专用处理单元,通过高速总线互联。下图展示了芯片内部的主要模块及其互联关系。

SA8155 芯片架构框图 SA8155 芯片架构框图 高速互联总线 Kryo 485 CPU 1×Cortex-A76 + 3×A76 + 4×A55 Hexagon DSP / NPU AI 引擎 15 TOPS Adreno 650 GPU Vulkan 1.1 / OpenGL ES 3.2 显示处理单元 DPU / DSI / HDMI LPDDR5 / LPDDR4X 说明:SA8155 通过高速互联总线实现 CPU、GPU、NPU 和显示单元之间的低延迟数据交换,GPU 通过专用通道访问系统内存。

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 渲染管线结构 Adreno 650 渲染管线结构 输入装配 顶点着色器 光栅化 片元着色器 Tile 缓存 (GMEM) 渲染目标 说明:Adreno 650 采用分块渲染架构,片元着色器结果先写入片上 GMEM(Tile 缓存), 完成一个 Tile 后再将最终颜色数据写回外部渲染目标,减少对系统内存的带宽需求。 驱动开发中需配置 Tile 大小(通常为 32×32 或 64×64 像素)和 GMEM 分配策略。
关键指标: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/ 目录下。获取源码树的典型方式:

  1. 从 Code Aurora Forum (CAF) 拉取:高通开源代码仓库,包含 SA8155 的完整内核分支。
  2. 从 SoC 厂商 BSP 包获取:高通提供给 Tier1 厂商的 Board Support Package,包含预配置的内核源码。
  3. 从 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
驱动开发环境搭建流程 驱动开发环境搭建流程 1. 安装工具链 2. 获取内核源码 3. 配置内核 4. 编译驱动 5. 推送模块 6. 加载模块 7. 验证日志 提示:每次修改驱动源码后,只需重复步骤 4-7,无需重新配置内核。
开发建议:在搭建环境时,建议使用 ccache 加速重复编译,并在内核配置中启用 CONFIG_DRM_MSM_DEBUG 以获取更详细的驱动调试日志。首次编译完整内核可能需要 30-60 分钟,后续增量编译通常在 5 分钟内完成。