RK3568开发板上应用Mesa 3D

这篇具有很好参考价值的文章主要介绍了RK3568开发板上应用Mesa 3D。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本次采用的开发板为扬帆“竞”开发板,扬帆“竞”采用瑞芯微RK3568(Cortex-A55)四核64位超强CPU,搭载OpenHarmony最新操作系统,主频最高达2.0GHz。采用 Mali-G52 GPU,支持4K、H.265/H.264视频解码。
OpenHarmony最新版本的L2标准版图形子系统相比之前版本有着非常大的改动,使用了全新设计的框架,并使用Render Service替换了原来的Weston。图形栈整体上分为三层,从上到下依次为接口层、框架层和引擎层。设计上更加清晰,可以更加的灵活的适配不同的底层图形库和不同的显示硬件,最大限度的发挥硬件性能而不用影响到整体图形栈。

rk3568 opengl es开窗,3d


框架层的整体功能如下表,框架层的核心就是Render Service渲染服务。

模块 能力描述
Render Servicel (渲染服务) 提供UI框架的绘制能力,其核心职责是将ArkUI的控件描述转换成绘制树信息,根据对应的渲染策略,进行最佳路径渲染。同时,负责多窗口流畅和空间态下UI共享的核心底层机制。
Drawing (绘制) 提供图形子系统内部的标准化接口,主要完成2D渲染、3D渲染和渲染引擎的管理等基本功能。
Animation (动画) 提供动画引擎的相关能力。
Effect (效果) 主要完成图片效果、渲染特效等效果处理的能力,包括:多效果的串联、并联处理,在布局时加入渲染特效、控件交互特效等相关能力。
显示与内存管理 此模块是图形栈与硬件解耦的主要模块,主要定义了OpenHarmony 显示与内存管理的能力,其定义的南向HDI 接口需要让不同的OEM厂商完成对OpenHarmony图形栈的适配。

新的Render Service图形框架默认提供了对OpenGL的支持,并使用API HOOK技术,实现了OpenGL接口和实现的分离,大幅度降低了OpenGL库的适配难度。
扬帆“竞”开发板默认使用的是闭源的libmali-bifrost-g52-g2p0-ohos库,也可以使用开源的Mesa 3D库,实现对OpenGL的支持,在高级图形应用的开发和调试方面非常方便。

使用Mesa库

编译Mesa库

OpenHarmony已经在三方库中集成Mesa库。下载OpenHarmony全量代码,Mesa库在third_party/mesa3d。
进入third_party/mesa3d/目录,OpenHarmony已经提供了编译脚本。其中ohos/build_ohos.py就是针对新图形框架的编译脚本,参考README_zh.md文档,先进行一次全量编译,然后执行。

#python ohos/build_ohos.py </path/to/openharmony> yangfan-j </path/to/openharmony>/third_party/mesa3d

 文章来源地址https://www.toymoban.com/news/detail-761311.html

命令编译出mesa库。

生成Mesa组件

1.在device/soc/rockchip/rk3568/hardware/gpu/目录下新建lib-mesa目录,用于存放Mesa 3D库文件。

#mkdir …/device/soc/rockchip/rk3568/hardware/gpu/lib-mesa

2.将编译生成的Mesa 3D库文件拷贝到lib-mesa目录:

#cp build-ohos/install/lib/libgbm.so.1.0.0 ../device/soc/rockchip/rk3568/hardware/gpu/lib-mesa/
#cp build-ohos/install/lib/libglapi.so.0.0.0 ../device/soc/rockchip/rk3568/hardware/gpu/lib-mesa/
#cp build-ohos/src/egl/libEGL.so.1.0.0 ../device/soc/rockchip/rk3568/hardware/gpu/lib-mesa/
#cp build-ohos/install/lib/libGLESv1_CM.so.1.1.0 ../device/soc/rockchip/rk3568/hardware/gpu/lib-mesa/
#cp build-ohos/install/lib/libGLESv2.so.2.0.0 ../device/soc/rockchip/rk3568/hardware/gpu/lib-mesa/
#cp build-ohos/src/gallium/targets/dri/libgallium_dri.so ../ device/soc/rockchip/rk3568/hardware/gpu/lib-mesa/
#cp build-ohos/install/lib/dri/panfrost_dri.so ../device/soc/rockchip/rk3568/hardware/gpu/lib-mesa/

3.修改device/soc/rockchip/rk3568/hardware/gpu/BUILD.gn

index 7d269ac..690a69d 100644
--- a/rk3568/hardware/gpu/BUILD.gn
+++ b/rk3568/hardware/gpu/BUILD.gn
@@ -47,3 +47,108 @@ ohos_prebuilt_shared_library("mali-bifrost-g52-g2p0-ohos") {
     "libmali.so.1",
   ]
 }
+
+ohos_prebuilt_shared_library("mesa_gbm") {
+  source = "lib-mesa/libgbm.so.1.0.0"
+  install_enable = true
+  install_images = [ chipset_base_dir ]
+  relative_install_dir = "chipsetsdk"
+  subsystem_name = "rockchip_products"
+  part_name = "rockchip_products"
+  symlink_target_name = [
+    "libgbm.so.1",
+    "libgbm.so",
+  ]
+}
+
+ohos_prebuilt_shared_library("mesa_egl") {
+  source = "lib-mesa/libEGL.so.1.0.0"
+  install_enable = true
+  install_images = [ chipset_base_dir ]
+  relative_install_dir = "chipsetsdk"
+  subsystem_name = "rockchip_products"
+  part_name = "rockchip_products"
+  symlink_target_name = [
+    "libEGL.so.1",
+    "libEGL.so",
+    "libGLESv1.so",
+    "libEGL_impl.so",
+  ]
+}
+
+ohos_prebuilt_shared_library("mesa_glapi") {
+  source = "lib-mesa/libglapi.so.0.0.0"
+  install_enable = true
+  install_images = [ chipset_base_dir ]
+  relative_install_dir = "chipsetsdk"
+  subsystem_name = "rockchip_products"
+  part_name = "rockchip_products"
+  symlink_target_name = [
+    "libglapi.so.0",
+    "libglapi.so",
+  ]
+}
+
+ohos_prebuilt_shared_library("mesa_glesv1") {
+  source = "lib-mesa/libGLESv1_CM.so.1.1.0"
+  install_enable = true
+  install_images = [ chipset_base_dir ]
+  relative_install_dir = "chipsetsdk"
+  subsystem_name = "rockchip_products"
+  part_name = "rockchip_products"
+  symlink_target_name = [
+    "libGLESv1_CM.so.1",
+    "libGLESv1_CM.so",
+    "libGLESv1_impl.so",
+  ]
+}
+
+ohos_prebuilt_shared_library("mesa_glesv2") {
+  source = "lib-mesa/libGLESv2.so.2.0.0"
+  install_enable = true
+  install_images = [ chipset_base_dir ]
+  relative_install_dir = "chipsetsdk"
+  subsystem_name = "rockchip_products"
+  part_name = "rockchip_products"
+  symlink_target_name = [
+    "libGLESv2.so.2",
+    "libGLESv2.so",
+    "libGLESv2_impl.so",
+    "libGLESv3_impl.so",
+  ]
+}
+
+ohos_prebuilt_shared_library("libgallium_dri") {
+  source = "lib-mesa/libgallium_dri.so"
+  install_enable = true
+  install_images = [ chipset_base_dir ]
+  relative_install_dir = "chipsetsdk"
+  subsystem_name = "rockchip_products"
+  part_name = "rockchip_products"
+  symlink_target_name = [ "libgallium_dri.so" ]
+}
+
+ohos_prebuilt_shared_library("panfrost_dri") {
+  source = "lib-mesa/panfrost_dri.so"
+  install_enable = true
+  install_images = [ "system" ]
+  subsystem_name = "rockchip_products"
+  part_name = "rockchip_products"
+  symlink_target_name = [
+    "rockchip_dri.so",
+    "libmali.so.0",
+    "libmali.so.1",
+  ]
+}
+
+group("mesa-gpu") {
+  public_deps = [
+    ":mesa_egl",
+    ":mesa_gbm",
+    ":mesa_glapi",
+    ":mesa_glesv1",
+    ":mesa_glesv2",
+    ":libgallium_dri",
+    ":panfrost_dri",
+  ]
+}

4.修改device/soc/rockchip/rk3568/hardware/BUILD.gn,使用Mesa 3D库

index 479847d..e778fb0 100644
--- a/rk3568/hardware/BUILD.gn
+++ b/rk3568/hardware/BUILD.gn
@@ -15,7 +15,8 @@ import("//build/ohos.gni")
 
 group("hardware_group") {
   deps = [
-    "//device/soc/rockchip/rk3568/hardware/gpu:mali-bifrost-g52-g2p0-ohos",
+    #"//device/soc/rockchip/rk3568/hardware/gpu:mali-bifrost-g52-g2p0-ohos",
+    "//device/soc/rockchip/rk3568/hardware/gpu:mesa-gpu",
     "//device/soc/rockchip/rk3568/hardware/isp:isp",
     "//device/soc/rockchip/rk3568/hardware/mpp:mpp",
     "//device/soc/rockchip/rk3568/hardware/wifi:ap6xxx",

修改内核的配置文件

修改内核配置文件,启用panforst驱动。

index 9a9501c..52b3232 100644
--- a/linux-5.10/arch/arm64/configs/yangfan-j_standard_defconfig
+++ b/linux-5.10/arch/arm64/configs/yangfan-j_standard_defconfig
@@ -3622,7 +3622,7 @@ CONFIG_DVB_SP2=m
 #
 # CONFIG_VGA_ARB is not set
 CONFIG_DRM=y
-CONFIG_DRM_IGNORE_IOTCL_PERMIT=y
+# CONFIG_DRM_IGNORE_IOTCL_PERMIT is not set
 CONFIG_DRM_MIPI_DSI=y
 # CONFIG_DRM_DP_AUX_CHARDEV is not set
 # CONFIG_DRM_DEBUG_MM is not set
@@ -3636,6 +3636,8 @@ CONFIG_DRM_FBDEV_OVERALLOC=100
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
 # CONFIG_DRM_DP_CEC is not set
 CONFIG_DRM_GEM_CMA_HELPER=y
+CONFIG_DRM_GEM_SHMEM_HELPER=y
+CONFIG_DRM_SCHED=y
 
 #
 # I2C encoder or helper chips
@@ -3793,7 +3795,7 @@ CONFIG_DRM_DW_MIPI_DSI=y
 # CONFIG_TINYDRM_ST7735R is not set
 # CONFIG_DRM_PL111 is not set
 # CONFIG_DRM_LIMA is not set
-# CONFIG_DRM_PANFROST is not set
+CONFIG_DRM_PANFROST=y
 # CONFIG_DRM_TIDSS is not set
 # CONFIG_DRM_LEGACY is not set
 CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y

修改扬帆“竞”内核补丁

内核补丁需要在Linux系统上使用vim编辑器修改,Windows编辑器修改可能导致编译错误。

index 41a7df5..1a5e5a3 100644
--- a/linux-5.10/yangfan-j_patch/kernel.patch
+++ b/linux-5.10/yangfan-j_patch/kernel.patch
@@ -100948,36 +100948,36 @@ index 000000000..372617fee
 +	};
 +
 +	gpu: gpu@fde60000 {
-+		compatible = "arm,mali-bifrost";
-+		reg = <0x0 0xfde60000 0x0 0x4000>;
++		compatible = "rockchip, rk3568-mali","arm,mali-bifrost";
++		reg = <0x0 0xfde60000 0x0 0x20000>;
 +
-+		interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
++		interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
 +			     <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
-+			     <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
-+		interrupt-names = "GPU", "MMU", "JOB";
++			     <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
++		interrupt-names = "job", "mmu", "gpu";
 +
-+		upthreshold = <40>;
-+		downdifferential = <10>;
++		/* upthreshold = <40>; */
++		/* downdifferential = <10>; */
 +
 +		clocks = <&scmi_clk 1>, <&cru CLK_GPU>;
-+		clock-names = "clk_mali", "clk_gpu";
++		clock-names = "core", "bus";
 +		power-domains = <&power RK3568_PD_GPU>;
 +		#cooling-cells = <2>;
 +		operating-points-v2 = <&gpu_opp_table>;
 +
 +		status = "disabled";
-+		gpu_power_model: power-model {
-+			compatible = "simple-power-model";
-+			leakage-range= <5 15>;
-+			ls = <(-24002) 22823 0>;
-+			static-coefficient = <100000>;
-+			dynamic-coefficient = <953>;
-+			ts = <(-108890) 63610 (-1355) 20>;
-+			thermal-zone = "gpu-thermal";
-+		};
-+	};
-+
-+	gpu_opp_table: opp-table2 {
++		/* gpu_power_model: power-model { */
++		/*	compatible = "simple-power-model"; */
++		/*	leakage-range= <5 15>; */
++		/*	ls = <(-24002) 22823 0>; */
++		/*	static-coefficient = <100000>; */
++		/*	dynamic-coefficient = <953>; */
++		/*	ts = <(-108890) 63610 (-1355) 20>; */
++		/*	thermal-zone = "gpu-thermal"; */
++		/* }; */
++	};
++
++	gpu_opp_table: gpu-opp-table {
 +		compatible = "operating-points-v2";
 +
 +		mbist-vmin = <825000 900000 950000>;


测试和验证

1.查看GPU中断,panforst驱动已经正常工作。桌面显示和操作正常

rk3568 opengl es开窗,3d

2.游戏效果

rk3568 opengl es开窗,3d


测试表明,扬帆“竞”开发板的图形界面使用正常且流畅,基础应用都可以正常运行,体验与使用libmali-g52库基本一致。

 

 

到了这里,关于RK3568开发板上应用Mesa 3D的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RK3568开发环境搭建

    前面我给大家展示了RK3568的开发板,但是并没有对RK3568的芯片资源进行描述,这里简单给大家看下该芯片的资源,具体的请看瑞芯微官网https://www.rock-chips.com/ 对芯片有了写了解之后,下面就开始搭建开发环境,让我们早点感受一下这个芯片的强大之处 Linux下的环境搭建 目的

    2024年02月11日
    浏览(40)
  • RK3568蓝牙程序开发过程

         蓝牙开发可以使用C语言开发或python语言开发,使用的是蓝牙开发库为bluez库。      本文开发使用python语言开发,安装bluez库,可以使用pip install PyBluez来安装。       如果安装不上的话,可以使用sudo apt install python3-bluez来安装。       安装成功后可以通过pip list来查看

    2024年02月13日
    浏览(44)
  • OpenHarmony开发实战:深入了解开发版-RK3568

    RK3568开发板基于Rockchip RK3568芯片,集成双核心架构GPU以及高效能NPU;搭载四核64位Cortex-A55处理器,采用22nm先进工艺,主频高达2.0GHz;支持蓝牙、Wi-Fi、音频、视频和摄像头等功能,拥有丰富的扩展接口,支持多种视频输入输出接口;配置双千兆自适应RJ45以太网口,可满足NV

    2024年04月29日
    浏览(64)
  • RK3568工业开发板工控板说明

    HW356X-GKA是采用中高端的通用型 SOC,一款基于Rockchip公司RK3568处理器的工控主板。主板标配处理器为Cortex®-A55四核,最高主频2GHz的 RK3568 处理器, 内置4GB DDR4内存(最大8GB),32GB eMMC存储 。集成4核 arm架构 A55 处理器和Mali G52 2EE 图形处理器,支持 4K 解码和 1080P 编码集成了大量外

    2024年02月11日
    浏览(59)
  • 瑞芯微RK3568开发:烧录过程

    进入rk3568这款芯片的烧录模式共有3种方式,先讲需要准备的环境要求。 1、配套sdk版本的驱动DriverAssitant_vx.x.x和RKDevTool_Release_vx.x,版本不对应可能无法烧录,建议直接在sdk压缩包里获取; 2、如果正确安装DriverAssitant_vx.x.x,且usb硬件连接完好,电脑端会有主线驱动识别ok的提

    2024年02月15日
    浏览(61)
  • rk3568驱动开发之mipi屏

    屏是嵌入式驱动开发中常见的设备,一般的带屏项目中最开始要调试的,简单记录一下自己在项目开发中的经验过程。所用平台是rockchip的rk3568,android11。 硬件原理图主要看接的是哪个mipi接口,屏的电源控制io,背光控制io,这些需要在设备树中配置的要仔细核对。 PS:以上

    2024年02月12日
    浏览(52)
  • RK系列(RK3568) MIPI屏适配 PWM背光 驱动开发

    平台:Android12 SOC:RK3568 一般拿到MIPI屏 厂家会给一个跑的配置文件  例如我的: 那么可以配置设备树 由于我接的是DSI0 backlight = backlight; 设置背光

    2024年02月07日
    浏览(52)
  • rk3568安卓11系统之开发环境搭建

    目录 前言 一、解压sdk 二、更新系统并安装依赖 1.更新系统 2.安装依赖 三、编译3568 sdk 1.准备编译环境 2.选择产品 3.IO-Domain GPIO电压配置 4.开始编译sdk 5. kernel编译弹出IO-Domain确认对话框 6.编译完成 烧录固件 随着物联网的发展,开发板各式各样,驱动这门技术也越来越重要,

    2024年02月11日
    浏览(107)
  • 瑞芯微RK3568开发:GPIO实践篇

            SOC平台各类GPIO构建原理是大道一统的,在各个诸如状态、数据、中断和屏蔽等寄存器具体含义用法,有少许差异。玩好RK的GPIO,需要先理解这类通用接口的框架。         介绍RK3568的GPIO,认为讲2类重要地址和记录几种编程实践方法即可。 一、2类地址         RK

    2024年02月10日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包