一文带你玩转全志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-4GBytes 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 - 2*4-lane/4*2-lane/ 4+2*2-lane;
[*] 操作系统的支持,可预装Android13/LINUX 5.15/Ubuntu 22.04;
[*] 尺寸为146X119MM
AHD-X527产品功能图:
一、A527/T527处理器简介:T527是八核64位Cortex-A55 处理器,采用全新ARMv8.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 60fpsH.265/H.264/VP9视频解码和1080P 60fps H.265/H.264视频编码;NPU:2.0Tops算力(特定型号支持),支持INT8/INT16混合操作。此外,兼容基于一系列框架的网络模型,如TensorFlow/MXNet/PyTorch/Caffe可轻松转换T527支持PCIE/USB3.0/HDMI/MIPICSI/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的Pixelfillrate是1.7G,而RK3576是5.1G。看似小小的区别,其实区别很大。当然了,如果是GPU的代差上看,RK3576是老了一代,Mali其实是ARM的Mali系列IP核,ARM maligpu目前有四大架构,每一代架构在性能上都有提升和更高效的能耗管理: (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-g772.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驱动(闭源的驱动可以通过下面途径获取到)(1) 通过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只能算是阉割版本。
这个就是内核不太行,不然做个nas我觉得应该是很主流的东西
页:
[1]