文章目录
1、环境介绍
硬件:飞凌ok3568-c开发板
软件:原厂rk356x sdk
2、概念理清
2.1、Mali-G52 GPU
Mali是一款由ARM研发设计的移动显示芯片组(GPUs)系列。rk3566、rk3568芯片集成了一个型号为Mali-G52的GPU IP核。Mali-G52诞生于2018年第一季度。支持OpenGL ES1.1/2.0/3.0/3.1/3.2,Vulkan 1.1,OpenCL 2.1。
2.2、OpenGL、OpenGL ES、Vulkan、OpenCL
OpenGL 是一个跨平台的图形处理接口(API),用于渲染二维和三维图形。
OpenGL ES 是 OpenGL 的一个子集,专为移动设备和嵌入式系统设计。
Vulkan 是一个高性能、低开销的图形和计算 API,适用于现代 GPU 架构。
OpenCL 是一个跨平台的并行计算框架,用于通用计算任务。
3、GPU驱动
Mali GPU 驱动一般分为两部分:一小部分在 Linux 内核中,另外一大部分在 userspace,在 usercapce 的部分向下操作内核中的驱动,向上对应用层提供标准的 OpenGL 接口,这样各种图形显示相关的应用才能通过标准的 OpenGL API 进行图形渲染加速。其简易框架图参考如下:
4、获取libmali
关于内核态的GPU驱动,似乎不用我们关心,也不需要操作什么。我们需要关心的是用户空间驱动库,即libmali
。下图粗略展示了OpenGL ES API -> libmali -> kernel Mali GPU driver之间的关系:
可见,用户空间驱动库libmali实现了将OpenGL ES API转换成Mali GPU硬件可以理解的指令。所以所谓的用户空间驱动库是和GPU硬件高度相关的,一般由GPU厂家提供。
可以通过buildroot获取mali库:
编译buildroot过程中会下载到/external/libmali/lib/目录:
最后会拷贝到rootfs:
5、GPU测试
5.1、属性查看
如下是通过一些属性文件查看GPU相关信息:
# 查看GPU频率范围
root@rk3568-buildroot:/# cat /sys/class/devfreq/fde60000.gpu/available_frequencies
800000000 700000000 600000000 400000000 300000000 200000000
# 查看GPU工作模式
root@rk3568-buildroot:/# cat /sys/class/devfreq/fde60000.gpu/available_governors
rknpu_ondemand dmc_ondemand vdec2_ondemand venc_ondemand userspace powersave performance simple_ondemand
# 查看GPU最大频率
root@rk3568-buildroot:/# cat /sys/class/devfreq/fde60000.gpu/max_freq
800000000
# 查看GPU最小频率
root@rk3568-buildroot:/# cat /sys/class/devfreq/fde60000.gpu/min_freq
200000000
# 查看GPU实时工作模式及频率
root@rk3568-buildroot:/# cat /sys/class/devfreq/fde60000.gpu/trans_stat
From : To
: 800000000 700000000 600000000 400000000 300000000 200000000 time(ms)
800000000: 0 4 10 2 2 6 310486
700000000: 3 0 1 0 0 0 423
600000000: 8 0 0 1 0 3 20326
* 400000000: 2 0 0 0 0 0 753
300000000: 1 0 0 0 0 1 220
200000000: 10 0 0 0 0 0 2920
Total transition : 54
# 查看当前GPU load情况
root@rk3568-buildroot:/# cat /sys/class/devfreq/fde60000.gpu/load
17@800000000Hz
# 17表示GPU的当前负载百分比。如果一直为0,说明GPU未启用。
5.2、glmark2跑分测试
GLMark2是一个用于评估和测试图形硬件加速性能的开源工具。它基于 OpenGL ES 和 OpenGL,用于测量图形系统的性能,通过一系列标准化的基准测试场景来评估渲染性能。
glmark2工具在/usr/bin目录下(没有的话需要在buildroot配置里勾选):
root@rk3568-buildroot:/# ls /usr/bin/glmark2-es2-*
/usr/bin/glmark2-es2-drm /usr/bin/glmark2-es2-wayland
同时,rk也提供了gpu相关的测试脚本,在/rockchip-test/gpu目录下:
root@rk3568-buildroot:/# ls /rockchip-test/gpu/ -l
total 20
-rwxr-xr-x 1 root root 1289 Jan 13 16:46 gpu_test.sh # 总脚本,用于选择测试模式
-rwxr-xr-x 1 root root 3134 Jan 13 16:46 test_fullscreen_glmark2.sh # 以全屏模式进行图形性能测试
-rwxr-xr-x 1 root root 3013 Jan 13 16:46 test_normal_glmark2.sh # 以普通窗口模式进行图形性能测试
-rwxr-xr-x 1 root root 2810 Jan 13 16:46 test_offscreen_glmark2.sh # 以离屏渲染模式进行图形性能测试
-rwxr-xr-x 1 root root 3044 Jan 13 16:46 test_stress_glmark2.sh # 压力测试,以评估 GPU 在高负载下的性能和稳定性
离屏渲染模式跑分:
全屏模式跑分:
5.3、Qt测试
使用Qt opengl es demo测试。这里暂时忽略。后面有时间移植了qt,再回来补充。
6、总结
嵌入式Linux学习交流群:424571391
参考文章:RK3568 GPU介绍及使用-CSDN博客