本文主要介绍Open Harmony如何接入开源图形驱动,在OpenHarmony上使能开源GPU。我们使用的基线版本是基于openharmony的闭源驱动+kernel4.19+Weston(旧框架)。
1)基线版本是RK分支的OpenHarmony版本,选用此版本的原因是,该版本使能了闭源的GPU。
2)拉取代码,并进行编译与烧录,确定基线版本可以正常点亮。
拉取OH代码(我使用的是Ubantu20.0.4):
$ repo init -u https://gitee.com/openharmonyrk/manifest -b master -m rk.xml --no-repo-verify
$ repo sync -c
$ repo forall -c 'git lfs pull'
安装依赖工具,编译器,并进行编译,
$ sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev genext2fs liblz4-tool libtinfo5 lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby
$ sudo apt install openjdk-17-jre-headless
$ bash build/prebuilts_download.sh
$ ./build.sh --product-name rk3568 --ccache
编译完成后如下:
编译完成后进行烧录,生成的镜像文件在\out\ohos-arm-release\packages\phone\images,烧录时依次选择对应的固件,点击执行耐心等待下载完成即可
由于RK分支使用的是4.19的内核,1.10后主干才支持kernel5.10,因此编译kernel5.10需要采用的是Master 1.10以后的版本,拉取代码和编译的过程同上,此处不再描述(只有本小节使用的是主干1.10以后的版本,其它小节均使用的是RK分支版本)。编译完成后进入kernel 5.10源码路径\out\kernel\src_tmp\linux-5.10,进行如下操作:
打开.\out\kernel\src_tmp\linux-5.10\arch\arm64\boot\dts\rockchip\rk3568.dts进行修改,适配开源panfrost。diff如下:
修改后如下:
gpu: gpu@fde60000 {
compatible = "rockchip, rk3568-mali", "arm,mali-bifrost";
reg = <0x0 0xfde60000 0x0 0x20000>;
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "job", "mmu", "gpu";
clocks = <&scmi_clk 1>, <&cru CLK_GPU>;
clock-names = "core", "bus";
operating-points-v2 = <&gpu_opp_table>;
#cooling-cells = <2>;
power-domains = <&power RK3568_PD_GPU>;
status = "disabled";
};
进入到linux-kernel5.10的目录后,cd到对应的目录\out\kernel\src_tmp\linux-5.10,执行make menuconfig ARCH=arm64,在graphic support中启用panfrost,
然后在Direct Rendering Manager取消选择Ignore drm ioctl permission,然后保存退出配置。
执行 ./make-ohos.sh TB-RK3568X0进行编译。
首先通过git clone下载最新的mesa21.3.3版本。git clone https://gitee.com/xfan1024/oh-buildroot-mesa3d.git
首先后台启动weston:
mkdir /tmp/xdg
XDG_RUNTIME_DIR=/tmp/xdg
weston --tty 1 &
glmark2-es2-wayland
如果看到屏幕上有正常的渲染画面,即验证panfrost驱动与kernel5.10驱动可以在weston中正常工作。
PS:如果未正常工作,可以尝试以下步骤:
cd到out/kernel/src_tmp/linux-5.10/drivers/gpu/drm
修改drm_ioctl.c,搜索关键字DUMB,将0修改为DRM_RENDER_ALLOW, 如下:
再次尝试启动glmark2即可
配置项 |
---|
文件名 |
output/target/usr/lib/libEGL.so.1 |
output/target/usr/lib/libGLESv1_CM.so.1 |
output/target/usr/lib/libGLESv2.so.2 |
output/target/usr/lib/libgbm.so.1 |
output/target/usr/lib/libglapi.so.0 |
output/target/usr/lib/dri/ panfrost_dri.so |
将这些二进制文件拷贝到\device\rockchip\hardware\gpu |
修改\device\rockchip\rk3568,增加“//device/hihope/hardware/gpu:libgallium_dri”, 如下图:
import("//build/ohos.gni")
print("rk3568_group in")
group("rk3568_group") {
deps = [
"//device/rockchip/hardware/gpu:libgallium_dri"
]
修改\device\rockchip\hardware\gpu\BUILD.gn为:
import("//build/ohos.gni")
import("//build/ohos/ndk/ndk.gni")
mesa3d_common_prebuilts = [
"libgbm.so.1",
"libEGL.so.1",
"libglapi.so.0",
"libGLESv1_CM.so.1",
"libGLESv2.so.2",
]
mesa3d_common_deps = []
foreach(file, mesa3d_common_prebuilts) {
target = "mesa3d-common-$file"
ohos_prebuilt_shared_library(target) {
source = file
subsystem_name = "hdf"
part_name = "hdf"
install_enable = true
}
mesa3d_common_deps += [ ":$target" ]
}
group("mali-bifrost-g52-g2p0-wayland") {
deps = mesa3d_common_deps
}
ohos_prebuilt_shared_library("libgallium_dri") {
source = "libgallium_dri.so"
part_name = "rockchip_products"
install_enable = true
symlink_target_name = [
"panfrost_dri.so",
"rockchip_dri.so",
]
}
修改third_party/weston/libweston/renderer-gl/egl-glue.c
增加weston_check_egl_extension(extensions, “EGL_ANDROID_native_fence_sync”)
如下图:
打开/foundation/graphic/standard/frameworks/surface/src/producer_egl_surface.cpp,这里强制进行缓存送显避免出现白屏的情况,如下图:
修改base/startup/init_lite/ueventd/etc/ueventd.config文件,增加card1和rendD129的权限,在该文件中加上:
/dev/dri/card1 0666 0 1003
/dev/dri/renderD129 0666 0 1003
最终重新编译./build.sh --product-name rk3568 --cccahe,重新烧录system.img
版权声明:本文为CSDN博主「zleoyu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zleoy/article/details/122721370