本文档主要介绍图形基础适配及点屏。
环境说明:
OHOS版本: 适用3.2-Beta3及以上
内核版本: linux-5.10
硬件环境: Dayu200-rk3568及其它硬件
一、图形驱动测试
OH现有框架主要支持两种显示框架,drm和FB。目前OH上主流采用drm框架。
drm驱动是显卡驱动的一种架构。相比FB架构,DRM更能适应当前日益更新的显示硬件。比如FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等,而这些功能DRM原生都支持。同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。
1.1 drm驱动测试
在用户态,drm提供了libdrm库,并提供了modetest测试程序,来测试drm驱动是否完成了基础适配。
在OpenHarmony的第三方库libdrm自带了modetest,但默认没有参考编译,编译方法如下:
1.1.1 环境搭建
1、 为 modetest 添加 BUILD.gn:
ini
import("//build/ohos.gni")
ohos_executable("modetest") {
sources = [
"buffers.c",
"cursor.c",
"modetest.c",
]
cflags = [
"-Wno-pointer-arith",
]
include_dirs = [
"../",
".",
]
configs = [ "//third_party/libdrm:libdrm_config" ]
public_configs = [ "//third_party/libdrm:libdrm_public_config" ]
deps = [
"//third_party/libdrm:libdrm",
"//third_party/libdrm/tests/util/:util",
]
public_deps = []
install_images = [
"system",
"updater",
]
part_name = "graphic_standard"
subsystem_name = "graphic"
}
2、添加其它依赖:third_party\libdrm\tests\util\BUILD.gn
ini
import("//build/ohos.gni")
ohos_static_library("util") {
sources = [
"format.c",
"kms.c",
"pattern.c",
]
cflags = []
include_dirs = [
"../",
".",
]
configs = [ "//third_party/libdrm:libdrm_config" ]
public_configs = [ "//third_party/libdrm:libdrm_public_config" ]
deps = [
"//third_party/libdrm:libdrm",
]
public_deps = []
}
3、加入编译框架,添加到graphic依赖项:
diff
foundation/graphic/graphic_2d/bundle.json
diff --git a/bundle.json b/bundle.json
index 755e6d2..f1bb7ef 100755
--- a/bundle.json
+++ b/bundle.json
@@ -56,6 +56,8 @@
"group_type": {
"base_group": [
"//third_party/libpng:libpng",
+ "//third_party/libdrm/tests/util:util",
+ "//third_party/libdrm/tests/modetest:modetest",
"//foundation/graphic/graphic_2d/interfaces/kits/napi:napi_packages",
"//foundation/graphic/graphic_2d/rosen/modules/composer:libcomposer",
"//foundation/graphic/graphic_2d/rosen/modules/composer/native_vsync:libnative_vsync",
4、有个报错,提示这个未使用,注释的就好了
ini
third_party\libdrm\tests\util\pattern.c:988
// void *mem_base = mem;
5、开始编译并下载。生成的文件在/system/bin下
1.1.2 测试效果
6、执行modetest.
首先把render_service停止
arduino
service_control stop render_service
-------------欲知详情,请移步LAVAL社区----------- laval.csdn.net/64c7a6439a1...