Rockchip RK3399 - Mali-T864 GPU驱动

本文详细介绍了如何在NanoPC-T4开发板上配置和启用Rockchip RK3399的Mali-T864 GPU驱动。内容包括图像界面卡顿问题的原因,ARM Mail GPU的特性,以及如何在Linux 6.3内核中配置Panfrost驱动,编译内核,烧录并启动内核。此外,还涉及到了mesa库的安装和测试GPU性能的方法。
摘要由CSDN通过智能技术生成

----------------------------------------------------------------------------------------------------------------------------

开发板   :NanoPC-T4开发板eMMC    :16GBLPDDR3 :4GB显示屏    :15.6英寸HDMI接口显示屏u-boot      :uboot 2023.04linux        :6.3、5.2.8----------------------------------------------------------------------------------------------------------------------------

需要注意的是:本篇博客是以linux 6.3版本为主体介绍的,但是内容同样适用于linux 5.2.8版本。

一、图像界面卡顿问题

在前面的文章我们已经移植了在NanoPC-T4开发板上移植了uboot 2023.04、linux 6.3、以及ubuntu 20.04.4根文件系统。然后在使用ubuntu桌面环境的时候,发现了一个问题,随便打开一个网页,视频都加载很慢,同时看到CPU的占用率会急剧升高;

1.1 产生原因

造成这种情况一般由两个原因:

  • 开发板上主控 SoC 的性能比较弱,没有带3D图形加速(即GPU)功能;
  • 开发板上的SoC带了GPU,但是没有用起来;

第一个原因基本是无解的,如果你选的SoC上面没有带GPU,唯一的办法就是尽量去跑轻量级的图形界面,如果想跑debian、ubuntu这种发行版上默认搭配的GNOME或者KDE,这种没有GPU支持,所有的图像合成渲染都要通过CPU来运算,是很难跑流畅的。所以如果你对图形显示功能比较看重,在选开发板的时候一定要查阅与之搭配的主控SoC是否带有GPU。

也有很多人被卡在了第二个关卡,SoC上搭配了强劲的GPU、比如 RK3399,S912,他们都搭载了ARM Mali GPU,但是mainline内核(指的是主线linux内核)却缺少相应的驱动支持,GPU 驱动一般分为两部分:

  • 一小部分在 linux 内核中;
  • 另外一大部分在 userspace,在 userspace的部分向下操作内核中的驱动,向上对应用层提供标准的 OpenGL 接口,这样各种图形显示相关的应用才能通过标准的OpenGL API进行图形渲染加速;
1.2 ARM Mail GPU

Mali GPU IP 提供商ARM公司只开放了内核部分驱动,而且这部分驱动还没有按照linux kernel的规范以DRM的框架去实现,所以它无法被linux mainline接受,还有一个更重要的部分,userspace部分ARM没有开源,只是以库的形式提供给购买了Mali GPU授权的SoC厂商,比如Rockchip,Amlogic。而且这套代码主要是为Android系统设计的,对debian、ubuntu这种系统的兼容性也不好。

看到这里,也许你就想骂ARM了,其实也不能完全怪他们,因为这并不是ARM独创的玩法,其他的GPU供应商也都这样玩,比如 Nvidia、Vivante、Imagination。大神 Linus 为这事还对Nvidia竖过中指呢,怒吼:“Nvidia,F*K you!”。

面对这种状况,很多人为了能够利用GPU加速,就只能使用SoC原厂提供的内核,和他们定制的系统,这种内核和系统一般都比较老。

如果想跑mainline的内核,基本就没法使用GPU加速了,这也是为什么我们目前看到的大部分开发板如果搭载了mainline内核,基本都不会有GPU加速功能,或者直接就不开图形显示功能。

但是也有一部分黑客们不满于这种封锁,他们勇于探索,积极尝试,逆向了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开始;

这里我们将学习如何在运行linux kernrl 6.3的RK3399开发板上开启GPU加速:RK3399 集成了Mali-T864 GPU,所以我们可以利用linux kernel的panfrost驱动 + userspace的mesa来解锁3D图形加速功能。

二、配置Panfrost

关于linux 6.3内核的下载和配置、编译参考:Rockchip RK3399 - 移植uboot 2023.04 & linux 6.3

2.1 配置内核
2..1.1 panfrost GPU驱动

在linux内核根目录下执行make menuconfig命令,进入如下配置:

Device Drivers  --->     
    Graphics support  --->  
        <*> Panfrost (DRM support for ARM Mali Midgard/Bifrost GPUs)

默认编译到内核中或者以模块的形式加载都可以。

2.1.2 驱动代码

驱动位于drivers/gpu/drm/panfrost/文件夹下;

root@zhengyang:/work/sambashare/rk3399/linux-6.3# ll drivers/gpu/drm/panfrost/
总用量 1720
drwxrwxr-x  2 root root   4096 Jun  5 20:58 ./
drwxrwxr-x 64 root root  16384 Jun  5 20:22 ../-rw-rw-r--  1 root root    472 Aug  9  2019 Kconfig
-rw-rw-r--  1 root root    225 Aug  9  2019 Makefile-rw-rw-r--  1 root root   5934 Aug  9  2019 panfrost_devfreq.c
-rw-rw-r--  1 root root    441 Aug  9  2019 panfrost_devfreq.h-rw-rw-r--  1 root root   6427 Aug  9  2019 panfrost_device.c
-rw-rw-r--  1 root root   2678 Aug  9  2019 panfrost_device.h-rw-rw-r--  1 root root  11971 Aug  9  2019 panfrost_drv.c-rw-rw-r--  1 root root  11398 Aug  9  2019 panfrost_features.h
-rw-rw-r--  1 root root   2353 Aug  9  2019 panfrost_gem.c
-rw-rw-r--  1 root root    785 Aug  9  2019 panfrost_gem.h-rw-rw-r--  1 root root  10974 Aug  9  2019 panfrost_gpu.c
-rw-rw-r--  1 root root    586 Aug  9  2019 panfrost_gpu.h-rw-rw-r--  1 root root   3944 Aug  9  2019 panfrost_issues.h
-rw-rw-r--  1 root root  13584 Aug  9  2019 panfrost_job.c
-rw-rw-r--  1 root root   1428 Aug  9  2019 panfrost_job.h-rw-rw-r--  1 root root   9752 Aug  9  2019 panfrost_mmu.c
-rw-rw-r--  1 root root    486 Aug  9  2019 panfrost_mmu.h-rw-rw-r--  1 root root  14759 Aug  9  2019 panfrost_regs.h
-rw-rw-r--  1 root root    880 Aug  9  2019 TODO

驱动入口文件在panfrost_drv.c,在该文件我们可以看到支持的GPU型号;

static const struct of_device_id dt_match[] = {
        /* Set first to probe before the generic compatibles */
        { .compatible = "amlogic,meson-gxm-mali",
          .data = &amlogic_data, },
        { .compatible = "amlogic,meson-g12a-mali",
          .data = &amlogic_data, },
        { .compatible = "arm,mali-t604", .data = &default_data, },
        { .compatible = "arm,mali-t624", .data = &default_data, },
        { .compatible = "arm,mali-t628", .data = &default_data, },
        { .compatible = "arm,mali-t720", .data = &default_data, },
        { .compatible = "arm,mali-t760", .data = &default_data, },
        { .compatible = "arm,mali-t820", .data = &default_data, },
        { .compatible = "arm,mali-t830", .data = &default_data, },
        { .compatible = "arm,mali-t860", .data = &default_data, },
        { .compatible = "arm,mali-t880", .data = &default_data, },
        { .compatible = "arm,mali-bifrost", .data = &default_data, },
        { .compatible = "arm,mali-valhall-jm", .data = &default_data, },
        { .compatible = "mediatek,mt8183-mali", .data = &mediatek_mt8183_data },
        {}
};
MODULE_DEVICE_TABLE(of, dt_match);

static struct platform_driver panfrost_driver = {
        .probe          = panfrost_probe,
        .remove         = panfrost_remove,
        .driver         = {
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Rockchip RK3566是一款由Rockchip推出的高性能应用处理器,其集成了四核ARM Cortex-A55 CPU和ARM Mali-G52 GPU。在移植U-Boot 2023.04时,我们需要考虑以下几个方面的工作: 1. 了解RK3566芯片的硬件架构和技术规格,包括处理器核心、内存控制器、外设接口等。这将有助于理解U-Boot如何与硬件交互,并进行相应的配置。 2. 下载并准备U-Boot 2023.04的源代码。在Rockchip官方网站或开源社区中可以找到最新的U-Boot源代码。将其下载并解压到开发机上。 3. 设置交叉编译环境。因为U-Boot是一个跨平台的项目,所以需要配置适合RK3566的交叉编译器,确保能够正确编译U-Boot源代码。 4. 配置U-Boot。根据RK3566的硬件架构和技术规格,需要进行相应的配置,包括处理器、内存、外设等设置。这些设置在U-Boot的配置文件中进行,可以根据需求进行修改。 5. 编译U-Boot。在配置好U-Boot后,使用交叉编译器编译U-Boot源代码。编译完成后,将生成的U-Boot二进制文件烧录到RK3566的启动设备上,如eMMC或SD卡。 6. 测试U-Boot。将准备好的启动设备插入RK3566开发板中,根据开发板的启动方式,进入U-Boot命令行界面。在命令行界面中可以进行各种操作和调试,如加载内核、启动操作系统等。 7. 调试和优化。在移植和测试U-Boot过程中,可能会出现一些问题和不稳定的情况。需要通过调试和优化来解决这些问题,确保U-Boot的正常运行和稳定性。 总之,移植U-Boot 2023.04到Rockchip RK3566需要了解芯片的硬件架构和技术规格,配置和编译U-Boot源代码,进行测试和调试。这样可以确保U-Boot能够与RK3566正常交互,并为后续的操作系统加载和启动提供基础支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Graceful_scenery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值