在OpenHarmony上适配图形显示【1】——确认drm是否正常
·
笔者最近在调试OpenHarmony图形显示部分,现将经验分享如下。在开始分享之前笔者希望读者提前阅读一下内容便于理解一下内容。
- OpenHarmony图形HDI基础适配及点屏(笔者会在此篇文章基础上做知识点的补充)
文章写作环境
- OpenHarmony 5.0.0和5.0.3版本
- dayu200 rk3568
1.drm驱动测试
在适配OpenHarmony的图形显示之前,需要测试设备屏幕drm内核态驱动是否正常。这里有两种方法,第一种是使用libdrm的modetest,第二种是自行编写测试代码测试。
(由于modetest命令测试设备比较受限,笔者推荐使用第二种)
1.1 使用libdrm的modetest,使用atomic方式测试drm接口成功,才能确保HDI正常使用。
笔者在给出5.0.0至5.0.3版本中modetest的编译方法
ohos_executable("modetest") {
sources = [
"//third_party/libdrm/tests/modetest/buffers.c",
"//third_party/libdrm/tests/modetest/cursor.c",
"//third_party/libdrm/tests/modetest/modetest.c",
"//third_party/libdrm/tests/util/format.c",
"//third_party/libdrm/tests/util/kms.c",
"//third_party/libdrm/tests/util/pattern.c",
]
cflags_c = [
"-Wno-unused-variable",
]
include_dirs = [
"//third_party/libdrm/tests",
"//third_party/libdrm/tests/util",
"//third_party/libdrm/tests/modetest",
]
deps = [
"//third_party/libdrm:libdrm",
]
install_images = [ "system" ]
install_enable = true
part_name = "xxxxxxx"
}
1.2 当soc提供的drm内核态驱动为非标准实现,或者modetest中找不到drm设备时,这时候需要自行编写modetest atomic方式样例去测试drm内核态驱动是不是ok的
其中rk、树莓派、amd显卡这些是可以使用modetest命令进行测试的。
1.笔者使用的是这里的开源样例
https://github.com/dvdhrm/docs/tree/master/drm-howto
2.然后把样例加入编译
ohos_executable("modeset_atomic") {
sources = [
"drm-howto/modeset-atomic.c",
]
cflags_c = [
"-Wno-error",
"-Wno-initializer-overrides"
]
deps = [
"//third_party/libdrm:libdrm",
]
install_images = [ "system" ]
install_enable = true
part_name = "xxxx"
}
3.编译好之后,执行测试用例,注意,不能有其他进程占用/dev/dri/card0
节点!!!
# 查看/sys/kernel/debug/dri/0/clients观察那几个服务占用了/dev/dri/card0,然后全部关掉
cat /sys/kernel/debug/dri/0/clients
command tgid dev master a uid magic
allocator_host 577 0 n y 3041 0
composer_host 578 0 y y 3036 0
composer_host 578 0 n n 3036 0
render_service 624 128 n n 1003 0
bootanimation 623 128 n n 1003 0
m.ohos.systemui 1579 128 n n 10009 0
render_service 624 0 n n 1003 0
m.ohos.launcher 1755 128 n n 20010017 0
# 关闭render service和composer_host
service_control stop render_service
service_control stop composer_host
service_control stop allocator_host
4.最后执行开源样例即可
./modeset_atomic
5.运行效果
2.总结
1.libdrm的modetest不是所有设备上都能使用它进行测试,一些非标准实现drm的设备需要自行编写测试样例进行测试
2.执行测试用例的时候注意不要有服务占用/dev/dri/card0
节点
3.参考资料
更多推荐
所有评论(0)