导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

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

    T Series
    1
    1
    124
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • E
      embfly LV 5 最后由 编辑

      本文中涉及到产品的实际操作,该操作都是在盈鹏飞嵌入式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产品功能图:
      AHD-X527功能图.jpg

      一、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
      9d7c0876-b543-4859-8396-630336ee52a7-image.png

      63933c11-3cfb-42a0-b626-111fd6e4b895-image.png

      二、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。

      5bb2cc8d-80a2-4b81-9e38-81d53cb51601-image.png

      a4f9cd01-f635-4bf2-9c04-b31eaee46a72-image.png

      注意看下G57可以跑到850Mhz,后续介绍T527 GPU使用的时候,全部把这个限制在700MHZ。
      以下是RK3576的GPU的具体参数
      b86185b4-4780-4720-ba41-2ae1c06a607f-image.png

      77bcc885-2abb-41c2-8002-d013b8b579fe-image.png

      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 进行图形渲染加速。其 结构图 简单参考如下: 
      图1.jpg

      在linux系统上使用OpenGL ES或者OpenCL接口,需要添加libmali库以及头文件, libmali有不同的版本(x11,gbm,wayland),提供了opengles,egl,opencl接口

      图2.jpg

      但是 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 开始

      图3.jpg

      2.3、GPU驱动使用方案
      2.3.1、方案一:使用官方闭源的GPU驱动

      (闭源的驱动可以通过下面途径获取到)

      通过ARM官方的SDK编译下载,需要在buildroot中使能 valhall-mali,
      (全志公司已经编译好了,不需要我们再编译了,并且已经集成到了SDK中)

      e8a20cbc-3512-4f35-b897-9268bcf8cb76-image.png

      图8.jpg.png

      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)-编译选项。
      aa2b7159-bda2-45fc-93f7-960bbd777eeb-image.png

      注意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内核版本的
      图3-1.jpg
      进一步深究,这个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只能算是阉割版本。

      1 条回复 最后回复 回复 引用 分享 0
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策