打印
[ARM入门]

一文带你玩转全志T527的GPU(1)-盈鹏飞嵌入式

[复制链接]
942|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
embfly|  楼主 | 2025-7-21 14:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本文中涉及到产品的实际操作,该操作都是再盈鹏飞嵌入式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接口);
  •      支持2I2C(其中一路支持掉电唤醒)2PWM(应用于背光);
  •      支持双路千兆以太网;
  •      支持3G/4G通信;
  •      支持2UART(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 这里不得不提RK3576RK3576也是8核处理器,它使用大小核异构形式,RK3576虽然也是使用Mali-G52,但是它是使用G52 MC3

注意看下G57可以跑到850Mhz,后续介绍T527 GPU使用的时候,全部把这个限制在700MHZ 以下是RK3576GPU的具体参数

RK3576的处理单元是3个,而T527的处理单元只有一个。T527Pixelfillrate1.7G,而RK35765.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)第四代微架构Valhall2019年退出,主要系列有:mali-g57, mali-g77
2.2、GPU驱动

Mali GPU 驱动一般分为两部分:一小部分在 Linux内核中,另外一大部分在 userspace,在 usercapce 的部分向下操作内核中的驱动,向上对应用层提供标准的 OpenGL 接口,这样各种图形显示相关的应用才能通过标准的 OpenGL API 进行图形渲染加速。其结构图 简单参考如下:
linux系统上使用OpenGL ES或者OpenCL接口,需要添加libmali库以及头文件, libmali有不同的版本(x11gbmwayland),提供了opengleseglopencl接口
但是 mali GPU IP 提供商 Arm 公司只开放了内核部分驱动,而且这部分驱动还没有按照 linux kernel 的规范以 Drm 的框架去实现,所以它无法被 linux mainline 接受;usersapce 部分,Arm 没有开源,只是以库的形式提供给购买了 mali GPU 授权的 SOC 厂商,比如 RockchipAmlogic
面对这种状况,很多人为了能够利用 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 系列的叫做panfrostUsersacpe 部分的开源库叫做 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区分32883288w-编译选项。
注意gbm是配置drm使用的memory机制,如果不是3.10kernel,不要用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.19kernel版本还没有支持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目录下的内容是和平台相关的(比如i915intel的,limapanfrostmali的,只是支持的代数不一样而已)。T527平台就是选择的panfrost驱动。同时我们也可以看到libGLESv2.so/libGL.so/ libEGL.so/ libgbm.so等身影,其实他们和ARM官方提供库名字是一致的。不过ARM官方提供的功能更全,而mesa只能算是阉割版本。


32730687de39c0a716.png (180.61 KB )

32730687de39c0a716.png

23985687de46dafb2b.png (288.46 KB )

23985687de46dafb2b.png

使用特权

评论回复

相关帖子

沙发
yangjiaxu| | 2025-7-30 11:46 | 只看该作者
这个就是内核不太行,不然做个nas我觉得应该是很主流的东西

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

5

帖子

0

粉丝