一、问题背景

在 OpenHarmony 系统移植和功能适配过程中,当前设备已经能够正常启动并完成基础显示,但是系统能够点亮屏幕并不代表 GPU 硬件加速链路已经完整工作。

为了确认当前板卡 GPU 是否真正参与系统图形渲染,需要对 GPU 从底层硬件到上层图形接口进行完整检查,确认各层之间是否已经建立正确连接。

本次排查主要围绕以下几个方面展开:

  • GPU 硬件是否被系统正确识别;
  • 内核 GPU 驱动是否成功加载;
  • GPU Firmware 是否完整;
  • 用户态 OpenGL ES/EGL 图形库是否部署;
  • DRM 显示管线是否正常;
  • 系统是否具备硬件加速能力。

整体排查思路如下:

GPU硬件
    ↓
内核驱动
    ↓
Firmware
    ↓
DRM设备节点
    ↓
Mesa/EGL
    ↓
OpenGL ES
    ↓
应用图形渲染

只有各个环节全部正常,才能说明 GPU 图形栈已经完成适配。

在排查过程中,针对部分底层状态判断问题,也与组长进行了沟通确认,进一步确定应该从整个 GPU 软件栈入手,而不是只观察应用层显示效果。


二、DRM 设备节点确认

首先从系统 DRM 子系统入手,确认 GPU 是否已经向系统注册。

通过查看设备节点:

/dev/dri/

可以发现系统存在:

card0
card1
renderD128

其中:

  • card0 对应 GPU 设备;
  • card1 对应显示控制器;
  • renderD128 对应 GPU 渲染节点。

在 Linux 图形架构中,现代 OpenGL ES 等用户态图形接口通常通过 render 节点访问 GPU,而不是直接访问硬件节点。

因此 renderD128 的存在说明:

  • DRM 框架已经初始化;
  • GPU 驱动已经注册设备;
  • 用户态程序具备访问 GPU 的基础条件。

这一步确认了 GPU 并不是简单存在硬件,而是已经进入系统图形框架。


三、GPU 硬件与驱动确认

确认 DRM 节点后,进一步检查 GPU 对应驱动信息。

通过系统设备信息可以看到:

DRIVER=pvrsrvkm
OF_COMPATIBLE_0=img,rgx

其中:

  • pvrsrvkm 表示 PowerVR Services Kernel Module;
  • img,rgx 表示设备树已经匹配到 PowerVR RGX GPU。

进一步确认驱动状态:

pvr dev=cac00000.imggpu

说明当前系统加载的是 PowerVR GPU 驱动。

经过检查可以确认:

  • GPU 硬件已经被系统识别;
  • Device Tree 配置匹配成功;
  • 内核驱动正常加载。

这说明 GPU 底层硬件连接已经建立。


四、GPU Firmware 检查

GPU 驱动正常加载后,还需要确认 Firmware 是否完整。

现代 GPU 在运行过程中需要依赖专用固件完成初始化和任务调度,因此继续检查系统中的 RGX 固件文件。

系统中存在:

rgx.fw.*
rgx.sh.*

其中:

rgx.fw

负责:

  • GPU 初始化;
  • 命令调度;
  • 硬件运行控制。

rgx.sh

负责:

  • Shader 编译;
  • 图形程序执行。

当前系统中 Firmware 和 Shader Firmware 均存在,并且版本匹配。

因此可以确认:

GPU 已经具备正常启动运行条件。


五、用户态图形库检查

完成内核部分检查后,需要继续确认用户态 OpenGL ES 图形环境。

检查系统图形库:

libGLES*
libEGL*
libpvr*

可以发现:

libEGL.so
libEGL_impl.so

libGLESv2_PVR_MESA.so

libGLESv1_CM_PVR_MESA.so

libpvr_mesa_wsi.so

其中关键的是:

PVR_MESA

说明当前系统采用:

PowerVR + Mesa

图形方案。

如果系统没有正确使用 GPU,一般会出现软件渲染组件,例如:

llvmpipe
softpipe
swrast

但当前系统不存在这些组件。

因此可以判断:

  • EGL 环境完整;
  • OpenGL ES 库完整;
  • Mesa 已经连接 PowerVR 后端;
  • 用户态具备 GPU 硬件加速能力。

六、DRM 显示链路确认

GPU 不仅需要能够渲染,还需要确认最终显示链路正常。

通过系统日志检查:

drm
gpu
pvrsrv
rgx

相关信息,可以看到:

dpu_init

spacemit_dsi_encoder_enable()

spacemit_panel_prepare()

spacemit_panel_enable()

对应完整显示流程:

GPU
 ↓
DRM
 ↓
DPU
 ↓
DSI Encoder
 ↓
LCD Panel

日志显示:

  • DPU 初始化成功;
  • DSI 显示接口启动;
  • Panel 正常打开。

说明整个显示输出链路已经打通。


七、最终验证结果

经过逐层排查,目前系统 GPU 软件栈状态如下:

模块 状态 结果
GPU硬件 PowerVR RGX识别成功
DRM设备 card/render节点存在
内核驱动 pvrsrvkm正常加载
GPU Firmware 固件完整
Shader Firmware 运行环境完整
EGL 接口库正常
OpenGL ES 支持硬件渲染
Mesa 连接PVR后端
DRM/DPU显示 显示链路正常

最终确认当前 OpenHarmony 系统已经形成完整 GPU 图形链路:

PowerVR RGX GPU

        ↓

pvrsrvkm 内核驱动

        ↓

GPU Firmware

        ↓

DRM Render Node

        ↓

      Mesa

        ↓

       EGL

        ↓

    OpenGL ES

八、总结

本次 GPU 排查主要围绕系统图形栈完整性展开,通过从底层硬件到上层接口逐层验证,确认当前设备已经完成 GPU 软件栈集成。

整个过程并不是简单确认“屏幕亮了”,而是需要验证:

  • GPU 是否被识别;
  • 驱动是否加载;
  • 固件是否存在;
  • 用户态接口是否连接;
  • 显示链路是否正常。

通过本次检查,确认 OpenHarmony 平台上的 PowerVR GPU 已经具备硬件加速能力,为后续图形性能优化、应用运行以及系统完善提供了基础。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐