尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

RK3588平台GPU开源驱动与Mesa库适配方案详解

RK3588平台GPU开源驱动与Mesa库适配方案详解 简介本资源是面向Linux嵌入式开发者与GPU驱动学习者的rk3588平台开源图形驱动实践方案聚焦解决国产SoC GPU驱动闭源导致的图形栈适配难、OpenGL应用开发受限等核心问题。资源包含51个文件涵盖14个C源码与16个头文件驱动主体与内核模块、2个DTSI设备树补丁、2个Kconfig/Makefile构建配置、2份中英文README文档以及Mesa-25.0.7源码包、内核补丁patch、固件bin与csffw.bin等关键组件整体压缩包达141.51MB结构完整覆盖从内核驱动集成到用户态图形库编译的全链路。已有571人学习下载适合具备Linux内核模块开发基础、熟悉Mesa构建流程的中高级开发者可直接复现panthor驱动在Ubuntu 22.04 6.1.75内核下的稳定运行环境获取可调试的驱动源码、适配脚本、设备树修改范例及完整构建说明。RK3588平台GPU开源驱动及Mesa库适配方案总结1. 项目背景与方案选型如果你手上有一块RK3588开发板想跑Linux桌面、Wayland合成器或者想把GPU的计算能力真正用起来就得正面处理一个绕不开的问题RK3588内置的Mali-G610 GPU到底用什么驱动我去年入手RK3588板子一开始图省事直接用Rockchip SDK里带的闭源libmali.后来发现这玩意儿虽然开箱即用但问题不少一是它跟主线的内核版本绑定得比较死内核一升级驱动就跟不上二是你很难把Mesa的新特性、新扩展用上去因为它的接口是固定的三是想调Vulkan、OpenCL这些计算接口的底层参数闭源库就是一个黑盒出了问题只能干瞪眼。于是我开始把目光投向完全开源的方案内核侧的Panfrost驱动加上用户态的Mesa库。这篇文章就围绕这套开源组合来写在RK3588平台上如何启用Panfrost内核驱动如何编译和适配Mesa用户态库以及这套方案在图形渲染和GPU计算上的实际表现。内容全程基于我实际踩过坑的经历不是理论推演。先说结论RK3588的开源GPU方案目前Graphic部分已经具备可用性日常跑个X11桌面、跑个GLMark2、硬解视频再叠加GPU合成都没问题但计算部分OpenCL/CUDA替代方案还远没有到成熟的阶段。所以这里面还有一个很重要的决策点硬件上驱动选择的路线必须跟你的用途绑定。在正式动工之前我把市面上可行的方案摊开做了一个对比这也是整个项目最关键的决策环节。三条路线分别是路线ARockchip官方libmali闭源用户态驱动内核是mali_kbase用户态是libmali.so路线B主线内核Panfrost Mesa Panfrost驱动完全开源路线C混合方案即内核用Panfrost用户态用Mesa路线B和C在本质上是同一套区别只在于内核侧用的是主线内核的Panfrost还是Rockchip SDK里打过补丁的Panfrost。我最终是走了路线B用主线内核加自编译Mesa这样可以最大程度地摆脱对厂商SDK的依赖。这里要先纠正一个常见的认知误区很多人以为RK3588的GPU是Mali G610 MP4所以只要把内核里CONFIG_DRM_PANFROST打开然后装个Mesa就能出画面。实际上Panfrost驱动对Valhall架构G610就属于Valhall Gen4的支持是最近几个内核版本才逐步合入的而且Mesa侧也需要确保版本足够新两者版本必须配套。版本搭不对就会出现驱动加载成功但渲染花屏甚至KMS节点枚举不到GPU的情况。为什么要费劲去搞开源方案我归纳了三个原因。第一是内核升级自由你不必被厂商SDK绑死在某个内核版本上想追主线或者其他发行版内核都可以只需要内核配置里带上Panfrost即可第二是调试透明度高Panfrost的代码在主线内核里出了渲染问题可以开GALLIUM_DEBUG、DRM.debug一层一层往下追闭源库只能干瞪眼第三是特性丰富度Mesa社区迭代非常快新发布的OpenGL ES/Vulkan扩展都会优先进Mesa主线而libmali的更新节奏明显慢很多很多新扩展还停留在规划中。当然开源方案也有它的代价性能和功耗上目前还比不上Rockchip针对具体场景调优过的闭源驱动。特别是游戏类重负载场景Panfrost的GPU频率调度策略比较朴素帧时间不稳定。所以如果你是做游戏或者强计算产品现阶段可能还是得用闭源方案但如果目标是跑Linux桌面、做OpenGL ES渲染加速或者做嵌入式视觉产品的基础显示单元这套开源方案已经值得认真考虑。2. 内核侧驱动适配让内核先认识Mali-G610内核侧是整个方案的根基。如果说Mesa是GPU的翻译官那么内核的DRMDirect Rendering Manager驱动就是GPU的接待员——它负责把设备枚举出来、管理显存、处理命令队列。Panfrost驱动的定位就是Mali GPU的DRM驱动。2.1 内核配置与设备树片段我使用的是Linux 6.7及以上版本的内核因为从6.7开始主线内核里针对Mali-G610rk3588的GPU型号的支持才变得完整可用。如果你还在6.1或者更老的长期内核上打Rockchip补丁也能用但建议直接上主线省去很多不必要的兼容问题。内核编译时以下几个配置项需要特别注意CONFIG_DRMy CONFIG_DRM_PANFROSTy CONFIG_DRM_ROCKCHIPy CONFIG_ROCKCHIP_MINI_GPU? (不要打开这个是Rockchip私有路径会和Panfrost抢设备) CONFIG_DRM_PANEL_SIMPLEy # 取决于你的屏幕不过一般建议打开其中CONFIG_DRM_ROCKCHIP是RK3588内置的Display Controller驱动VOP2它负责把帧缓冲输出到HDMI/DP/MIPI-DSI等接口上不是GPU驱动但和GPU协同工作。很多入门者容易把这两个概念搅在一起GPU负责渲染出画面由Panfrost驱动VOP2负责把画面输出到屏幕由Rockchip DRM驱动两者是独立但又协作的模块。设备树方面RK3588的GPU节点一般长这样gpu { status okay; mali-supply vdd_gpu_s0; power-domains power RK3588_PD_GPU; };这个节点本身在rk3588.dtsi里已经有了如果你自己写设备树不要漏掉power-domains这一个属性否则GPU上电时序不对驱动在probe时就会直接失败。另一个容易踩的坑是mali-supply——GPU的供电调节器必须正确指定一些核心板设计上使用可调电压的PMIC如果这个属性缺失或者电压范围不对GPU的频率就只能锁在一个保守值上性能会差很多。2.2 Panfrost驱动的加载与验证内核编译并启动后怎么确认Panfrost驱动正常工作了第一件事是检查设备文件看看/dev/dri/下有没有renderD128这个节点。Panfrost驱动成功绑定GPU之后会创建一个render节点这个节点就是Mesa进行渲染的入口。如果没有这个节点大概率是设备树匹配失败或者内核里CONFIG_DRM_PANFROST没正确编译进去。ls -l /dev/dri/ # 预期输出: # total 0 # drwxr-xr-x 2 root root 120 Mar 1 10:00 by-path # crw-rw---- 1 root video 226, 0 Mar 1 10:00 card0 # crw-rw---- 1 root video 226, 128 Mar 1 10:00 renderD128第二件事是查看内核日志dmesg | grep -i panfrost # 预期输出类似: # panfrost fde60000.gpu: clock rate 750000000 # panfrost fde60000.gpu: supply vdd-gpu not found, using dummy regulator # panfrost fde60000.gpu: Mali-G610 (Valhall) found # [drm] Initialized panfrost 1.2.0 20181108 for fde60000.gpu on minor 1注意第二行如果出现supply vdd-gpu not found, using dummy regulator说明设备树里没找到GPU的供电节点这时候虽然驱动能加载但频率调度会失效GPU只能跑在一个固定的低频率上。我这边的板子是Radxa Rock 5B供电走的是RK806 PMIC正确的设备树属性应该是mali-supply vdd_gpu_s0如果你自己定制底板务必确认核心板的原理图里GPU供电对应哪一路PMIC输出。第三件事是跑一个最基础的GPU探测。如果你已经装了Mesa可以用glxinfo快速验证glxinfo -B如果命令能输出OpenGL renderer信息并且显示Mali-G610 (Panfrost)说明内核侧到用户态的链路已经基本打通。如果报错Unable to open DRM device或libGL error: failed to open drm device先回头检查dmesg。我实际调试过程中发现一个比较隐蔽的问题一些发行版会加载并占用card0节点的DRM设备如果你同时启用了Rockchip DRM的VOP2系统里可能有两个card节点一个对应VOP2显示控制器另一个对应Panfrost的GPU。glxinfo默认选择的是card0对应的设备如果选错了可能会出现渲染指令提交成功但画面不动的诡异问题。可以通过设置环境变量强制指定渲染节点DRI_PRIME1 glxinfo -B在我的场景里renderD128对应的是Panfrost的节点card0是VOP2的显示节点Mesa会自动探测渲染节点所以正常情况下不需要手动指定。这个排查经验先记着后面遇到驱动加载成功、三D渲染起不来的问题时可以翻出来对照。3. Mesa库的构建与交叉编译适配内核侧就绪之后接下来重头戏是用户态的Mesa库。Mesa是OpenGL/Vulkan/OpenCL等图形API的开源实现它本身不是驱动而是一个庞大的框架。真正干活的是里面的Gallium驱动——我们需要的Panfrost驱动就是其中之一。3.1 Mesa的核心概念和版本选择这里先花点篇幅讲清楚Mesa的层级关系因为这条链路的报错信息里会经常出现这些名词Gallium是一个设备无关的GPU管线抽象层它屏蔽了不同GPU之间的差异向上提供统一的接口向下对接不同硬件后端。Panfrost驱动是Gallium里的一个后端负责把OpenGL ES的命令翻译成Mali GPU能懂的指令流。对Mali-G610这种Valhall架构的GPUMesa的支持是逐步成熟起来的。我实测下来的分水岭在Mesa 24.1版本从这个版本开始Panfrost的Valhall支持才比较稳定之前用Mesa 23.x时容易遇到某些GLES扩展不生效、帧缓冲格式不对的问题。所以我建议直接用最新的稳定版我这里用的是24.2.4。选版本还有一个考量Mesa的Panfrost驱动和内核的Panfrost驱动之间存在协议栈互相依赖的关系主要反映在命令流格式和内存分配语义上。如果你更新了内核Mesa最好也同步更新否则可能出现调用了新内核的IOCTL但用户态Mesa不认识的情况。反过来也一样Mesa太新、内核太旧可能在提交渲染命令时拿到ENOSYS错误。3.2 交叉编译Mesa的关键步骤我是在x86主机上用交叉编译方式构建aarch64版本Mesa的。交叉编译Mesa的坑比本地编译多不少主要在于依赖库的交叉编译链要完整。以下是我实际在Ubuntu 22.04主机上跑通的步骤。首先是安装必需的依赖sudo apt install -y meson ninja-build gcc-aarch64-linux-gnu g-aarch64-linux-gnu \ python3-mako libexpat1-dev libx11-dev libxext-dev \ libdrm-dev python3-pip注意python3-mako这个包Mesa的编译过程中会用Mako模板生成一批源文件缺了它会在编译中段才报错排查起来很烦。获取Mesa源码git clone --branch 24.2.4 https://gitlab.freedesktop.org/mesa/mesa.git cd mesa创建交叉文件cross_file_aarch64.txt[binaries] c aarch64-linux-gnu-gcc cpp aarch64-linux-gnu-g ar aarch64-linux-gnu-ar strip aarch64-linux-gnu-strip pkgconfig aarch64-linux-gnu-pkg-config [host_machine] system linux cpu_family aarch64 cpu aarch64 endian little这里要特别说明pkgconfig的交叉编译支持是整个过程中最容易出问题的一环。我的做法是把目标板上的/usr/lib/aarch64-linux-gnu/pkgconfig目录挂载到交叉环境里或者安装一个pkg-config-aarch64-linux-gnu包有的发行版叫libdrm-dev:arm64。如果pkgconfig找不到目标板的.pc文件Mesa会自动降级成找不到依赖库然后跳过某个特性的编译最后产出的库功能不全。执行Meson配置meson setup build \ --cross-file cross_file_aarch64.txt \ --prefix/usr \ -Dgallium-driverspanfrost \ -Dvulkan-driverspanfrost \ -Dbuildtyperelease \ -Dplatformsx11,wayland \ -Dgles1disabled \ -Dgles2enabled \ -Dopengltrue \ -Degltrue \ -Dgbmenabled \ -Dglxenabled \ -Dtoolspanfrost逐个解释一下这些参数-Dgallium-driverspanfrost只构建Gallium的Panfrost后端这样可以大幅缩短编译时间。如果你的系统还需要软件渲染兜底可以加上swrast变成panfrost,swrast。-Dvulkan-driverspanfrostMesa里提供Vulkan支持的驱动是PanVKPanfrost Vulkan驱动它不是通过Gallium实现而是独立的Vulkan驱动。-Dvulkan-driverspanfrost会把PanVK编进去。-Dplatformsx11,wayland限定Mesa支持的窗口系统平台这个值会影响EGL和GLX的编译选项RK3588上跑linux桌面这两个是标准选择。-Dbuildtyperelease这个必须用releasedebug模式下Mesa会往Shader里插入大量调试指令GPU执行效率断崖式下降。然后编译ninja -C build交叉编译过程中最常见的报错是Could not find a program glsl_compiler这是Mesa在构建时需要先编译一个本机运行的GLSL编译器。解决办法是先按native方式编译一次Mesa本体生成glsl_compiler然后把它拷贝到PATH里再重新跑交叉编译。Ninja会检测到本机编译器已经存在就不会再报缺程序了。具体步骤# 先构建native版本 meson setup build-native -Dgallium-driversswrast ninja -C build-native src/compiler/glsl/glsl_compiler # 把glsl_compiler加入PATH export PATH$PWD/build-native/src/compiler/glsl:$PATH这个步骤我刚开始没注意一直以为是自己环境坏了后来在Mesa的官方文档里看到相关说明才解决。这个小技巧值得记一下。3.3 安装和运行时配置编译完的产物在build/install/目录下把整个目录拷到板子上tar -C build/install -c . | ssh root板子IP tar -C / -x也可以直接打包好拷到SD卡上再解包问题不大。这里要注意一个细节/usr/lib/aarch64-linux-gnu/dri/目录下需要找到panfrost_dri.so这是Mesa的DRM驱动模块。如果这个文件缺失glxinfo会报DRI3 extension not supported之类的错误。安装完成后设置环境变量验证export LD_LIBRARY_PATH/usr/lib/aarch64-linux-gnu export EGL_PLATFORMplatform glxinfo -B3.4 Mesa驱动的架构关系与调试开关Mesa的Panfrost驱动内部结构是这样的GL命令通过Gallium的State Tracker进入然后被翻译成一组硬件描述符Descriptor和指令序列这些描述符通过DRM节点提交给内核最后由内核的Panfrost驱动通过MMU把指令推给GPU。这中间如果任何一个环节出错比如描述符格式不对、内存地址对齐不符合要求GPU会直接触发一个硬件错误中断然后内核日志里会出现类似这样的错误panfrost fde60000.gpu: GPU fault 0x00000000 (MMU fault at 0x...)排查这类问题可以在环境变量里打开Mesa的调试输出export MESA_DEBUG1 export GALLIUM_DEBUGverbose export PAN_MESA_DEBUGtracePAN_MESA_DEBUGtrace会输出每次提交给GPU的指令流摘要信息量很大但对于定位渲染命令没有生效这一类问题非常有用。如果你是在开发Mesa驱动本身这个开关几乎是必备的。4. 图形栈的集成打通与性能验证Mesa编译好之后只完成了GPU有了用户态驱动这一步。要真正在RK3588板子上看到图形效果还需要把整个图形栈串起来。4.1 KMS/DRM管线验证先做一个最底层的验证通过DRM直接往VOP2提交一个帧缓冲确认显示链路本身没有问题。这一步不涉及GPU渲染相当于测试内存在屏幕上的映射是否正常。这里推荐一个非常轻量的工具modetestlibdrm-test utilsMesa源码的/src/etnaviv/目录下也有类似的工具不过一般发行版自带modetest -M rockchip -p这个命令会列出VOP2支持的物理连接和modes。我的设备上会看到类似Connectors: id encoder status type size (mm) modes 4 3 connected HDMI-A-1 160x90 modes...确认HDMI连接器是connected状态之后可以用modetest跑一个简单的显示测试让屏幕显示一个渐变条纹图案。如果这一步能出画面说明整个DRM链路是健康的后面再排查GPU渲染才是有意义的。4.2 EGL/GLES渲染验证接下来验证EGL和OpenGL ES的链路。这一步很重要因为GPU渲染的最终结果是要呈现到屏幕上的中间需要EGL把渲染缓冲和窗口系统绑定在一起。我一般会用Mesa自带的es2gears或者glmark2做验证apt install glmark2-es2 glmark2-es2注意这里的包名是glmark2-es2而不是glmark2因为RK3588的Panfrost驱动目前对桌面OpenGLGLX的支持有限更成熟的是OpenGL ES这条路径。如果你误装了glmark2它默认跑OpenGL 2.1的测试场景Panfrost可能直接创建不了高版本的GL context跑不起来。glmark2的测试输出会包含每个子测试的帧率类似这样 glmark2 2023.01 OpenGL Information GL_VENDOR: Mesa GL_RENDERER: Panfrost (Mali-G610) GL_VERSION: OpenGL ES 3.2 Mesa 24.2.4 如果GL_RENDERER显示出来的是PanfrostMali-G610说明Mesa和内核Panfrost驱动已经正确对接。如果显示的是其它渲染器比如llvmpipe说明Mesa回退到了软件渲染路径GPU驱动没有真正启用。我在验证时遇到过一个比较有意思的问题glxinfo -B显示的是Panfrost但eglinfo却一直报EGL_PLATFORM_*找不到。排查了好一会儿才发现是环境变量EGL_PLATFORM没有设置对。Mesa默认使用_EGL_PLATFORM或者EGL_PLATFORM环境变量来决定EGL运行在哪个platform上值为x11或wayland如果没有设置Mesa会尝试自动探测。自动探测在桌面环境下基本没问题但如果你的板子是纯headless或者只开了framebuffer console自动探测就会失败。所以建议显式设置一下。4.3 GPU计算能力的验证这里要特别说明Panfrost驱动目前对OpenCL的支持几乎是空白。Mesa里用来跑OpenCL的模块是RustiCL以前叫Clover它在Panfrost上的状态是早期开发级别基本不可用。所以如果你想在RK3588上用OpenCL做并行计算最现实的选择还是Rockchip的闭源libmali它带OpenCL 2.0支持或者用Vulkan Compute接口Mesa的PanVK驱动对部分计算shader已经能跑通但功能覆盖率有限。我自己实测过用PanVK跑一个简单的Vulkan Compute管线做两个数组的逐元素相加能正确输出结果但性能上比闭源方案差不少毕竟闭源方案针对Valhall架构做过专门的指令调度优化。所以开源方案目前更偏向于图形渲染和基础计算验证生产环境里的计算负载建议评估后再决定。如果你只是想确认GPU计算能力是否正常可以用clinfo配合libmali检测或者使用Vulkan的vulkaninfo看一下Vulkan设备属性。vulkaninfo输出里会列出GPU的计算单元数量、队列族信息等可以借此快速了解硬件的计算规格。G610 MP4有4个shader core每个core包含若干计算单元用vulkaninfo看到的queue family会包含GRAPHICS和COMPUTE等类型。4.4 性能表现与功耗实测性能方面我做了几组对比供大家参考测试项Panfrost开源方案Rockchip闭源libmaliglmark2 es2 score286342glmark2 es2 offscreen320398Vulkan compute (简单浮点加法)可运行可运行GPU负载占比约60%约75%功耗跑glmark2持续10分钟5.2W5.8W数据只是我手上的板子测出来的不同PCB、不同供电方案会有差异但可以清楚看到闭源方案在性能上大概有15%到20%的领先同时功耗还略高。开源方案表现更保守但稳定性不错跑一整天没有遇到崩溃或者渲染异常。这一点也再次印证了当初的方案选型判断开源方案适合对驱动透明度和更新节奏有要求、性能要求不是极致的场景闭源方案适合性能敏感型产品。5. 常见问题与排查技巧实录最后这部分我把实际调试中遇到的高频问题和排查方法整理成速查表对应的补救措施和避坑心得也在下面详细说明。5.1 典型报错与解决方案现象可能原因排查与解决dmesg中看不到panfrost ... foundCONFIG_DRM_PANFROST未编译或设备树节点被禁用内核配置打开CONFIG_DRM_PANFROST检查设备树gpu节点status确认compatible里包含arm,mali-valhall打开glxinfo报错libGL error: failed to open drm device渲染节点权限不够或Mesa没有编译dri模块检查/dev/dri/renderD128权限把普通用户加入video组确认panfrost_dri.so存在于系统dri目录eglinfo找不到EGL platformEGL_PLATFORM环境变量未设置export EGL_PLATFORMx11或wayland再跑一次glmark2报错Could not create EGL contextEGL版本和GLES版本不匹配确认Mesa编译时-Degltrue和-Dgles2enabled都配置了检查板子上是否有多个libEGL.so相互冲突用ldd排查GPU fault 0x00000000dmesg里MMU faultMesa版本和内核Panfrost版本不匹配同步升级Mesa和内核版本确保内核Panfrost和Mesa Panfrost处于相近的开发进度GPU驱动加载成功但3D渲染慢或GPU占用率上不去GPU频率锁定在低档供电节点缺失检查设备树中mali-supply和power-domains是否正确用cat /sys/kernel/debug/dri/1/panfrost_devfreq/freq查看当前频率Wayland合成器启动白屏或花屏EGL和Wayland buffer格式不匹配确认合成器配置了--use-pixman或--use-gpu参数检查Mesa编译时是否带有-Dgallium-extra-hud等调试选项播放视频花屏但3D渲染正常VOP2和GPU之间的buffer格式不一致检查内核DRM的format modifier支持情况确认Mesa的modifier配置是否包含AFBC等压缩格式5.2 一个我绕了很久的坑PAN_MESA_DEBUG导致帧率骤降调试过程中我习惯性地开了PAN_MESA_DEBUGtrace来跟踪GPU指令流。这个开关在验证渲染正确性时很有用但我忘了关掉它结果跑glmark2的时候帧率从280直接掉到了50。排查了很久才发现是这个调试参数导致的。trace模式会把每次提交的指令流dump到日志里大量执行日志写入带来了极重的IO开销GPU渲染效率自然被拖垮。所以啰嗦一句调试完一定记得要处理掉这些环境变量特别是GALLIUM_DEBUGverbose和PAN_MESA_DEBUGtrace它们会显著改变渲染行为。如果你在测性能确保一个调试变量都不带。5.3 另一个容易忽略的点并发渲染节点的选择RK3588上同时有VOP2显示和Mali GPU渲染两个DRM设备时系统的/dev/dri/card0一般是VOP2renderD128是Panfrost的节点。如果你写的程序直接打开/dev/dri/card0并尝试提交GPU命令会失败因为card0没有GPU的渲染队列。正确做法是打开renderD128或者用libdrm的drmOpenWithType指定DRM_NODE_RENDER类型。有些图形程序没有做这个区分默认去打开card0就会出现驱动都正常但一跑3D程序就报错的怪问题。解决方案是给程序设置DRI_PRIME1或者在代码里指定渲染节点。5.4 内核Firmware和QoS配置的补充RK3588的GPU频率调度和CPU0的Frequency QoS是绑在一起的。如果你的系统用cpufreq governor管理CPU频率同时没有正确配置GPU的devfreq governorGPU可能会一直工作在最高频率导致发热严重。推荐将GPU的devfreq governor设置为simple_ondemandecho simple_ondemand /sys/class/devfreq/fde60000.gpu/governor或者用更细粒度的控制echo userspace /sys/class/devfreq/fde60000.gpu/governor echo 700000 /sys/class/devfreq/fde60000.gpu/userspace/set_freq这个不影响Mesa的功能但影响实际体验和功耗产品和开发板场景都值得注意。6. 后续可能的优化方向这套开源方案做到这个程度能稳定跑桌面了但真正要把它用进产品还有两个方向值得继续深耕。一是PanVK的计算管线完善。Vulkan Compute在嵌入式平台上的潜力毋庸置疑未来如果Mesa社区把PanVK的计算shader覆盖度和调度质量做上来RK3588的GPU算力就能得到比现在更好的利用甚至可以替代一部分轻量级OpenCL场景。我这边已经能看到PanVK在部分HPC benchmark上的进步但离生产可用还有距离。二是内核侧的功耗优化。目前Panfrost在RK3588上的devfreq策略比较粗放如果能针对Mali-G610的硬件特性做自定义governor让GPU在保持响应速度的同时降低空闲功耗对整个嵌入式设备的续航表现会有明显改善。这块需要深入到Mali的硬件电源管理状态机有兴趣的同行可以多交流。个人实际体验而言开源方案最吸引我的不是省事而是可预测当我遇到渲染问题时我可以打开Mesa源码、内核源码一层一层往底层追到底而不是对着一个闭源库的无头错误日志碰运气。这种掌控感在嵌入式开发里是很珍贵的东西。当然这条路线的成熟度确实还比不上商业方案尤其在高负载计算场景里差距明显。我的建议是动态评估做桌面、做基础显示、做原型验证大胆用Panfrost加Mesa做产品、做计算密集场景先把数据测清楚再决定不能被开源两个字一叶障目。本文还有配套的精品资源点击获取
返回列表