GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>系统教程 > OpenHarmony富设备移植指南(6.3)GPU调试经验分享

OpenHarmony富设备移植指南(6.3)GPU调试经验分享

来源:Ghost系统之家浏览:时间:2023-07-25 09:24:08

OpenHarmony富设备移植指南(6.3)GPU调试经验分享

作者:Diemit 2023-03-23 16:02:07系统 OpenHarmony 树莓派4的GPU驱动组成比较复杂,在Linux的gpu驱动目录中drm目录下存放着vc4和v3d两个目录,vc4既包含Display驱动也包含GPU驱动,主要用于树莓派3及之前的SoC;而v3d则只包含gpu驱动,专用于树莓派4。

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

​​https://ost.51cto.com​​

本人使用树莓派4和小米6进行OpenHarmony适配GPU时产生过许多问题,这里回顾一下我移植GPU的过程,同时也做一些总结和经验分享,希望大家看过之后能少走一些弯路。

1、树莓派4GPU移植

树莓派4的GPU驱动组成比较复杂,在Linux的gpu驱动目录中drm目录下存放着vc4和v3d两个目录,vc4既包含Display驱动也包含GPU驱动,主要用于树莓派3及之前的SoC;而v3d则只包含gpu驱动,专用于树莓派4。由于vc4和v3d的Display硬件差异不大,为了让树莓派4最大化利用vc4现有的Display驱动,树莓派驱动的开发者并没有分离代码,所以树莓派的GPU驱动需要同时启用vc4和v3d。同时,我在查阅mesa3d的文档中有关v3d的描述中也有类似的说明,原文如下:

The V3D Mesa drivers communicate directly with the V3D kernel DRM driver for scheduling GPU commands. Additionally, on the Raspberry Pi 4, the kernel uses theVC4 DRM driver for display support, so Mesa exposes a vc4_dri.so using thekmsrohelpers to do behind-the-scenes buffer management between the two kernel drivers, while executing rendering on the V3D kernel module.

查资料时我看到树莓派的mesa3d驱动还需要kmsro,当时我不太理解,经过好几天的网上搜索,最终抱着不确定的心态,使用了以下的参数编译mesa:

-Dplatforms=ohos -Degl-native-platform=ohos -Ddri-drivers= -Dgallium-drivers=v3d,vc4,kmsro \-Dvulkan-drivers= -Dgbm=enabled -Degl=enabled -Dcpp_rtti=false -Dglx=disabled -Dtools= -Ddri-search-path=/vendor/lib/chipsetsdk

在复制编译好的lib文件加入编译框架,并在config.json中设置启用gpu。

"graphic_standard_feature_ace_enable_gpu = true",

编译烧录之后运行黑屏,受到SIG-OpenGfxDrv群里的大神指导,调试gpu可以先设置cpu合成,gpu渲染的模式,即保持config.json中设置启用gpu,同时修改foundation/graphic/graphic_2d/rosen/modules/render_service/core/pipeline/rs_base_render_engine.cpp中的NeedForceCPU函数,强制使用cpu合成。

//bool forceCPU = false;bool forceCPU = true;

再次编译,烧录运行,发现屏幕能点亮,但是显示异常,经过各种探索,仍然无法解决,第一次移植失败。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

经过断断续续的查找资料,对比验证,找到了验证gpu工作的方法,就是通过opengl的api调用一个简单的gpu绘图程序,结果仍然撕裂,这时我基本确定问题不在编译参数了。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

接口能调用成功,但是显示异常,这种bug不会报错,没有图形相关经验的我根本定位不到原因,最终我想到树莓派4有安卓的移植项目,随后查到安卓也是用mesa3d,然后我找到了两个树莓派4移植项目, 【lineage-rpi】和【android-rpi】,对比了两个仓中的mesa3d代码之后,终于给我在【android-rpi】中发现了关键代码,树莓派4适配安卓仅仅修改了下面这些地方:

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

然后再看OpenHarmony的mesa3d的代码,之前我对比过platform_ohos.c跟platform_android.c的区别,差异是有,但是总体比较类似,同时我也发现了注释中有说明platform_ohos是基于platform_android修改。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

经过对比,我把android-rpi对mesa的修改手动同步到了OpenHarmony的mesa中,修改如下。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

经过重新编译,烧录,测试例子终于能够正常显示,前后历时四个多月,从3.2beta3跨到了3.2beta4。

cpu合成+cpu渲染组合下,调用OpenGLApi进行三角形的绘制:

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

启用GPU渲染后,能够感知到帧率有提升,打个比方,cpu合成+cpu渲染在竖屏旋转下只有7帧/秒,cpu合成+gpu渲染下能达到14帧/秒,有提升但是仍然卡顿严重,经过多方求教仍未解决问题。

在初步打通gpu调用之后,夜里脑子仍在思考着问题的解决办法,不断排列组合,最终想到了3.2beta4的一个公告内容,RS侧支持GPU合成,然后又联系到了几个月前我看到过的一个关于gpu的issue,描述到了【graphic_standard_feature_rs_enable_eglimage】这个参数,最后爬起来把这个参数设置成了true,编译烧录一套走起,最后居然给干成了,流畅度可感知的达到了60fps那种流畅。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

通过树莓派4适配GPU的经历,我总结出GPU适配的思路如下:

1.不启用GPU功能,在CPU合成+CPU渲染的环境下,确认GPU驱动正常工作。

foundation/graphic/graphic_2d/rosen/modules/render_service/core/pipeline/rs_base_render_engine.cpp中的NeedForceCPU中修改强制cpu合成//bool forceCPU = false;bool forceCPU = true;vendor/raspberrypi/rpi4/config.json中设置不启用gpu"graphic_standard_feature_ace_enable_gpu = false",

2.启用部分GPU功能,在CPU合成+GPU渲染的环境下,确认GPU能正确渲染。

foundation/graphic/graphic_2d/rosen/modules/render_service/core/pipeline/rs_base_render_engine.cpp中的NeedForceCPU中修改关闭cpu合成//bool forceCPU = false;bool forceCPU = true;vendor/raspberrypi/rpi4/config.json中设置启用gpu"graphic_standard_feature_ace_enable_gpu = true",

3.启用GPU合成+GPU渲染,加速OpenHarmony图形显示。

foundation/graphic/graphic_2d/rosen/modules/render_service/core/pipeline/rs_base_render_engine.cpp中的NeedForceCPU中还原关闭cpu合成bool forceCPU = false;vendor/raspberrypi/rpi4/config.json中设置启用gpu,同时启用gpu合成"graphic_standard_feature_ace_enable_gpu = true","graphic_standard_feature_rs_enable_eglimage = true"

同时OpenHarmony开源的GPU移植也可以参考安卓方面的移植。

2、小米6GPU移植

小米6的gpu是Adreno 540,经过网上搜索资料mesa驱动对应的名字是freedreno,所以编译参数对应为:

-Dplatforms=ohos -Degl-native-platform=ohos -Ddri-drivers= -Dgallium-drivers=freedreno \-Dvulkan-drivers= -Dgbm=enabled -Degl=enabled -Dcpp_rtti=false -Dglx=disabled -Dtools= -Ddri-search-path=/vendor/lib64/chipsetsdk

但是编译烧录之后运行简单的测试gpu程序始终无法运行,signal 11程序崩溃了。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

通过/data/log/faultlog/temp下崩溃日志确认build_id_find_nhdr_callback存在问题。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

通过在函数内部加print打印的方式,对比分析之后确认是offset计算不正确,最后我意外发现了OpenHarmony的【third_party_libunwind】有修改过build-id,经过查看pr提交发现了以下关键代码,原来是oh的编译框架在编译出的elf文件头增加了一个非标准的note段,mesa使用标准的方式去解析note内容导致偏移量计算出错,需要处理一下偏移量问题,然而mesa3d这个开源gpu驱动长久没人维护了,这个问题一直没有暴露出来,这给我碰到了。。。同步修改之后解决调用崩溃问题。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

同时接口调用也能正常显示了。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

但是当我进行移植第二步,CPU合成+GPU渲染时黑屏,无法显示内容,又是一番折腾,加打印然后调试,最后发现关键代码,freedreno中有强制设置对齐。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

在hilog中发现Assertion failed。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

查看源码发现a5xx系的头文件中有pitch的验证,【&0x3f】相当于判断能否被64整除。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

然后我往前找到buffer设置的某个地方尝试着把pich强制64对齐,终于能显示出图像。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

不黑屏了,但是仍然显示不正常,很明显能感知到是长度没有对齐导致错位了。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

最终在SIG-OpenGfxDrv群里的lhl大神指导下,修改display适配层中的WIDTH_ALIGN参数为64,成功解决显示问题。

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

#创作者激励#OpenHarmony富设备移植指南(6.3)GPU调试经验分享-开源基础软件社区

确认CPU合成+GPU渲染显示能正常工作之后,启用GPU合成+GPU渲染,成功运行,小米6终于适配GPU成功。

树莓派4和小米6的GPU适配,从代码量来说,适配代码真的很少,但是又异常困难,在此记录一下我走过的坑,希望我走过的坑,后来者不用再掉下去。

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

​​https://ost.51cto.com​​

责任编辑:jianghua 来源:51CTO 开源基础软件社区 树莓派4GPU调试

推荐系统

  • 电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    语言:中文版系统大小:2.98GB系统类型:Win8

    电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有

  • 微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    语言:中文版系统大小:5.13GB系统类型:Win11

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化  1、保留 Edge浏览器。  2、隐藏“操作中心”托盘图标。  3、保留常用组件(微软商店,计算器,图片查看器等)。  5、关闭天气资讯。 

  • Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    语言:中文版系统大小:4.75GB系统类型:Win11

    Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户