一文带你玩转全志T527的GPU(1)-盈鹏飞嵌入式
-
本文中涉及到产品的实际操作,该操作都是在盈鹏飞嵌入式AHD-X527主板上进行执行,AHD-X527介绍如下:
AHD-X527产品特性:
-
采用Allwinner公司Cortex-A55八核A527/T527处理器,运行最高速度为2.0GHZ(T527最高1.8GHZ);
-
支持Mali-G57 MC1 GPU,支持OpenGL ES 3.2/2.0/1.0, Valkan 1.1,OpenCL 2.0
-
支持4K/25fps H.264视频编码,支持4K/15fps MJPEG编码;
-
多格式4K/60fps视频解码 (H.265,H.264,VC-1, MPEG-1/2/4, VP8) ;
支持双屏异显;支持HDMI 2.0B, 分辨率最高4K@60fps;支持LVDS,分辨率最高1920x1080@60fps;支持MIPI DSI,分辨率最高2.5K@60fps(与LVDS复用); -
支持1-4G Bytes LPDDR4X SDRAM;
-
支持EMMC 8G-64G大容量电子盘,可启动;
-
支持1路USB 3.0;支持3路USB2.0 HOST和一路OTG(TYPE-C接口);
-
支持2路I2C(其中一路支持掉电唤醒)、2路PWM(应用于背光);
-
支持双路千兆以太网;
-
支持3G/4G通信;
-
支持2路UART(TTL)、支持1路RS485、支持双路CAN BUS(2.0B,仅T527支持);
-
支持MIPI CSI - 24-lane/42-lane/ 4+2*2-lane;
-
操作系统的支持,可预装Android13/LINUX 5.15/Ubuntu 22.04;
-
尺寸为146X119MM
AHD-X527产品功能图:
一、A527/T527处理器简介
T527是八核64位Cortex-A55 处理器,采用全新ARM v8.2-A架构,主频最高可达1.8GHz(A527最高速度是2.0GHz),效能有大幅提升;采用22nm先进工艺,具有低功耗高性能的特点
T527集成了单核心架构 GPU,高性能VPU以及高效能 NPU。 GPU:Mail-G57,支持OpenGL ES3.2/2.0/1.1,Vulkan1.1;VPU:可实现4K 60fps H.265/H.264/VP9视频解码和1080P 60fps H.265/H.264视频编码;NPU:2.0Tops算力(特定型号支持),支持INT8/INT16混合操作。此外,兼容基于一系列框架的网络模型,如TensorFlow/MXNet/PyTorch/Caffe可轻松转换
T527支持PCIE/USB3.0/HDMI/MIPI CSI/MIPI DSI/eDP/LVDS等各类型外围接口
T527除支持Android及Linux系统外,更可适配多个主流国产OS
二、T527平台GPU
2.1、GPU简介
GPU提供了一个基于开放标准的完整图形加速平台,支持2D/3D图形渲染硬件加速。GPU的作用是为计算机系统提供强大的图形处理和计算能力,能够处理大量的图形数据并进行高效的计算,从而实现各种应用的图形渲染、数据处理和加速等功能。T527是使用Mali-G57,支持OpenGL ES1.1/2.0/3.0,Vulkan 以及OpenCL。和Rk356x系列使用的虽有区别,但是性能区别不大。Rk356x是使用Mali-G52,支持OpenGL ES1.1/2.0/3.0,Vulkan 以及OpenCL。 这里不得不提RK3576,RK3576也是8核处理器,它使用大小核异构形式,RK3576虽然也是使用Mali-G52,但是它是使用G52 MC3。注意看下G57可以跑到850Mhz,后续介绍T527 GPU使用的时候,全部把这个限制在700MHZ。
以下是RK3576的GPU的具体参数
RK3576的处理单元是3个,而T527的处理单元只有一个。T527的Pixel fillrate是1.7G,而RK3576是5.1G。看似小小的区别,其实区别很大。
当然了,如果是GPU的代差上看,RK3576是老了一代,Mali其实是ARM的Mali系列IP核,ARM mali gpu目前有四大架构,每一代架构在性能上都有提升和更高效的能耗管理:
(1)第一代微架构Utgard(北欧神话人物:乌特加德),2007年推出,主要系列有:mali-200, mali-400, mali-450, mali-470
(2)第二代微架构Midgard(北欧神话人物:米德加德),主要系列有:mali-t6xx, mali-t7xx, mali-t8xx
(3)第三代微架构Bifrost(北欧神话中连接天宫和大地的:彩虹桥),2016年推出,主要系列有:mali-g31, mali-g51, mali-g71, mali-g52, mali-g72, mali-g76
(4)第四代微架构Valhall,2019年退出,主要系列有:mali-g57, mali-g77
2.2、GPU驱动
Mali GPU 驱动一般分为两部分:一小部分在 Linux 内核中,另外一大部分在 userspace,在 usercapce 的部分向下操作内核中的驱动,向上对应用层提供标准的 OpenGL 接口,这样各种图形显示相关的应用才能通过标准的 OpenGL API 进行图形渲染加速。其 结构图 简单参考如下:
在linux系统上使用OpenGL ES或者OpenCL接口,需要添加libmali库以及头文件, libmali有不同的版本(x11,gbm,wayland),提供了opengles,egl,opencl接口
但是 mali GPU IP 提供商 Arm 公司只开放了内核部分驱动,而且这部分驱动还没有按照 linux kernel 的规范以 Drm 的框架去实现,所以它无法被 linux mainline 接受;usersapce 部分,Arm没有开源,只是以库的形式提供给购买了 mali GPU 授权的 SOC 厂商,比如 Rockchip,Amlogic。
面对这种状况,很多人为了能够利用 GPU 加速,就只能使用 SOC 原厂提供的内核,和他们定制的系统,这种内核和系统一般都比较老。如果想跑 mainline 的内核,基本就没法使用 GPU 加速了。
但是也有一部分黑客们不满于这种封锁,他们勇于探索,积极尝试,逆向了 Arm 发布的二进制库(现在ARM公司已经承认了他们,并与他们合作了),然后重写了针对 Arm mali gpu 的开源驱动,最终在 Linux 5.2 发布的时候合并到了 mainline 中:针对 Mali-400/Mali-450 的驱动叫做 lima,针对 Mali-T6xx / Mali-T7xx / Mali-T8xx GPU 和 GXX 系列的叫做 panfrost。Usersacpe 部分的开源库叫做 mesa,对 mali gpu 的支持从 mesa 19.2 开始
2.3、GPU驱动使用方案
2.3.1、方案一:使用官方闭源的GPU驱动(闭源的驱动可以通过下面途径获取到)
通过ARM官方的SDK编译下载,需要在buildroot中使能 valhall-mali,
(全志公司已经编译好了,不需要我们再编译了,并且已经集成到了SDK中)GPU库看似只能选择wayland/和fbdev,但是实际上在配置脚本中可以看到KMS选项,需要去掉BR2_PACKAGE_WAYLAND/ BR2_PACKAGE_WESTON_DRM,才可以选择KMS。
config BR2_PACKAGE_GPU_UM_PUB_DEFAULT_KMS bool "kms(gbm + drm)" depends on !BR2_PACKAGE_WAYLAND && !BR2_PACKAGE_WESTON_DRM
最后会全志编译好的库复制到rootfs中,以下是支持wayland的库,也有支持KMS的库。
ping@embfly-server:/sda7/allwinner_a527/A527_Tina5.0_AIOT_V1.4.6/1.SDK/A527_Tina5.0_AIOT_V1.4.6/tina/platform/allwinner/display/libgpu/mali-g57/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/wayland/aarch64-none-linux-gnu/lib64$ tree -L 2 . ├── cl │ ├── libOpenCL.so -> libOpenCL.so.2 │ ├── libOpenCL.so.2 -> libOpenCL.so.2.1.0 │ └── libOpenCL.so.2.1.0 ├── egl │ ├── libEGL.so -> libEGL.so.1 │ ├── libEGL.so.1 -> libEGL.so.1.4.0 │ └── libEGL.so.1.4.0 ├── gbm │ ├── libgbm.so -> libgbm.so.1 │ ├── libgbm.so.1 -> libgbm.so.1.0.0 │ └── libgbm.so.1.0.0 ├── gles1 │ ├── libGLESv1_CM.so -> libGLESv1_CM.so.1 │ ├── libGLESv1_CM.so.1 -> libGLESv1_CM.so.1.1.0 │ └── libGLESv1_CM.so.1.1.0 ├── gles2 │ ├── libGLESv2.so -> libGLESv2.so.2 │ ├── libGLESv2.so.2 -> libGLESv2.so.2.1.0 │ └── libGLESv2.so.2.1.0 ├── mali │ ├── libmali.so -> libmali.so.0 │ ├── libmali.so.0 -> libmali.so.0.32.0 │ └── libmali.so.0.32.0 ├── vulkan │ ├── libvulkan.so -> libvulkan.so.1 │ ├── libvulkan.so.1 -> libvulkan.so.1.3.296 │ └── libvulkan.so.1.3.296 ├── vulkan_wsi │ └── libVkLayer_window_system_integration.so └── wayland-egl ├── libwayland-egl.so -> libwayland-egl.so.1 ├── libwayland-egl.so.1 -> libwayland-egl.so.1.0.0 └── libwayland-egl.so.1.0.0
其实,这些库是有版本的,只是全志把他们封闭起来了,参考RK_libmali的命名规则:gpu型号-软件版本-硬件版本(如果有的话,比如说r1p0区分3288和3288w)-编译选项。
注意gbm是配置drm使用的memory机制,如果不是3.10的kernel,不要用fbdev的。
(1)gbm:是给qt+eglfs这样的程序用的,不依赖x11,wayland。
(2)wayland: 给wayland使用。
(3)X11:是给xorg使用的。
2.3.2、方案二:使用开源的mesa
这种方案要 利用 linux kernel 的 Panfrost 驱动 + userspace 的 mesa 来解锁 3D 图形加速功能。但是这种方案对内核版本有要求,需要在5.2以上,但是瑞芯微提供的4.19的kernel版本还没有支持Panfrost 驱动,需要使用5.10内核版本的
进一步深究,这个mesa库编译出来库都有什么呢?以下是编译出来的内容:├── dri │ ├── armada-drm_dri.so │ ├── asahi_dri.so │ ├── etnaviv_dri.so │ ├── exynos_dri.so │ ├── hx8357d_dri.so │ ├── i830_dri.so │ ├── i915_dri.so │ ├── i965_dri.so │ ├── ili9225_dri.so │ ├── ili9341_dri.so │ ├── imx-dcss_dri.so │ ├── imx-drm_dri.so │ ├── ingenic-drm_dri.so │ ├── kgsl_dri.so │ ├── kms_swrast_dri.so │ ├── lima_dri.so │ ├── mcde_dri.so │ ├── mediatek_dri.so │ ├── meson_dri.so │ ├── mi0283qt_dri.so │ ├── msm_dri.so │ ├── mxsfb-drm_dri.so │ ├── nouveau_vieux_dri.so │ ├── panfrost_dri.so │ ├── pl111_dri.so │ ├── r200_dri.so │ ├── r300_dri.so │ ├── r600_dri.so │ ├── r600_drv_video.so │ ├── radeon_dri.so │ ├── repaper_dri.so │ ├── rockchip_dri.so │ ├── st7586_dri.so │ ├── st7735r_dri.so │ ├── stm_dri.so │ ├── sun4i-drm_dri.so │ ├── swrast_dri.so │ ├── v3d_dri.so │ ├── vc4_dri.so │ ├── virtio_gpu_dri.so │ └── zink_dri.so ├── libEGL.so -> libEGL.so.1 ├── libEGL.so.1 -> libEGL.so.1.0.0 ├── libEGL.so.1.0.0 ├── libgbm.so -> libgbm.so.1 ├── libgbm.so.1 -> libgbm.so.1.0.0 ├── libgbm.so.1.0.0 ├── libglapi.so -> libglapi.so.0 ├── libglapi.so.0 -> libglapi.so.0.0.0 ├── libglapi.so.0.0.0 ├── libGLESv1_CM.so -> libGLESv1_CM.so.1 ├── libGLESv1_CM.so.1 -> libGLESv1_CM.so.1.1.0 ├── libGLESv1_CM.so.1.1.0 ├── libGLESv2.so -> libGLESv2.so.2 ├── libGLESv2.so.2 -> libGLESv2.so.2.0.0 ├── libGLESv2.so.2.0.0 ├── libGL.so -> libGL.so.1 ├── libGL.so.1 -> libGL.so.1.2.0 ├── libGL.so.1.2.0 ├── libxatracker.so -> libxatracker.so.2 ├── libxatracker.so.2 -> libxatracker.so.2.5.0 ├── libxatracker.so.2.5.0 └── pkgconfig
说明:这里dri目录下的内容是和平台相关的(比如i915是intel的,lima和panfrost是mali的,只是支持的代数不一样而已)。T527平台就是选择的panfrost驱动。同时我们也可以看到libGLESv2.so/ libGL.so/ libEGL.so/ libgbm.so等身影,其实他们和ARM官方提供库名字是一致的。不过ARM官方提供的功能更全,而mesa只能算是阉割版本。
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号