需求
如题,需要在openHarmony4.0Release-riscv64荔枝派版本的third_party目录下增加glmark2。
一、库代码获取
由于其他同事已经在别的环境上完成代码适配,可以直接拿过来用。
https://gitee.com/wawanala/glmark2-es2
在third_party目录下直接git clone下载后解压即可。
二、增加配置
参考https://www.51cto.com/article/745922.html
1.build\subsystem_config.json
文件增加以下内容
“glmark2”:{
“path”: “third_party/glmark2”,
“name”: “glmark2”
},
2.productdefine\common\inherit\qemu_standard.json
{
“subsystem”: “thirdparty”,
“components”: [
{
“component”: “musl”,
“features”: []
},
{
“component”: “glmark2”,
“features”: []
}
]
},
thirdparty子系统增加glmark2组件。
本来是打算在vendor\sipeed\lpi4a\config.json文件中增加以上内容,但该文件的最开始以
“inherit”: [ “productdefine/common/inherit/qemu_standard.json”, “productdefine/common/inherit/chipset_common.json” ],
方法配置了包含关系,为了通用性,因此加在了productdefine\common\inherit\qemu_standard.json文件中。
3.build\compile_standard_whitelist.json
“bundle_subsystem_error”:
[
“third_party/glmark2/bundle.json”,
“third_party/glmark2/src/eudev/bundle.json”,
]
白名单中增加配置,以免编译过程中报subsystem_name或part_name不匹配的问题。
三、编译以及修改
版本根目录下运行
./build.sh --product-name lpi4a --ccache --gn-args sparse_image=true --no-prebuilt-sdk
进行编译,为了确认BUILD.gn被成功调用,刚开始可以在文件中增加一些错误等待编译报错。
1.获取并修改依赖库位置
编译过程中报错,首先修改BUILD.gn对应的库文件目录
#source = “//device/soc/iscas/rvbook/hardware/gpu/lib64/libudev.z.so”
source = “//device/soc/sipeed/lpi4a/hardware/gpu/lib64/libudev.z.so”
并在对应目录中增加该库文件:libudev.z.so
文件获取位置:https://isrc.iscas.ac.cn/gitlab/riscv/polyosmobile/ohos_qemu/device_soc_iscas/-/tree/20240303-gpu/rvbook/hardware/gpu?ref_type=heads
2.修改编译报错
编译中代码报错:
修改头文件device\soc\sipeed\lpi4a\hardware\gpu\include\gbm.h内容:
https://isrc.iscas.ac.cn/gitlab/riscv/polyosmobile/ohos_qemu/device_soc_iscas/-/blob/20240303-gpu/rvbook/hardware/gpu/include/gbm.h?ref_type=heads
之后等待编译完成即可。
四、riscv设备上运行结果
五、arm架构设备上运行
用了dayu200开发板跑openharmon的rk3568版本,版本编出来以后刚开始效果如下
报错提示缺libgbm.so,本来打算直接在构建arm的版本,尝试了以下放弃了,挺费工夫的。在openharmony的device\soc下find一下,惊喜发现allwinner\t507\hardware\gpu\lib-mesa目录里有这系列的库文件。直接拿来用。
修改\third_party\glmark2\BUILD.gn
configs = [ “:glmark2_config” ]
deps = [
“:glad”,
“:png”,
“:zlib”,
“:matrix”,
“:libgbm”,
“:libgbm.so.1”,
“:libgbm.so.1.0.0”,
“:libevdev_test”,
“:jpeg-turbo”,
“//third_party/libdrm:libdrm”,
#“//third_party/libjpeg-turbo:turbojpeg_static”,
#“src/eudev:libudev”,
]
并增加打包
ohos_prebuilt_shared_library(“libgbm”) {
relative_install_dir = “chipsetsdk”
#source = “//device/soc/iscas/rvbook/hardware/gpu/lib64/libgbm.so”
source = “//device/soc/sipeed/lpi4a/hardware/gpu/lib64/libgbm.so”
install_images = [ chipset_base_dir ]
subsystem_name = “glmark2”
}
ohos_prebuilt_shared_library(“libgbm.so.1”) {
relative_install_dir = “chipsetsdk”
source = “//device/soc/rockchip/rk3568/hardware/gpu/lib64/libgbm.so.1”
install_images = [ chipset_base_dir ]
subsystem_name = “glmark2”
install_enable = true
}
ohos_prebuilt_shared_library(“libgbm.so.1.0.0”) {
relative_install_dir = “chipsetsdk”
source = “//device/soc/rockchip/rk3568/hardware/gpu/lib64/libgbm.so.1.0.0”
install_images = [ chipset_base_dir ]
subsystem_name = “glmark2”
install_enable = true
}
编译完成后上设备运行效果如下:
下图显示使用的时候应该还是有些问题的,应该是需要增加mesa3d的arm库打包并在glmark2那里进行链接。
附dayu200使用方法。
https://gitee.com/hihope_iot/docs/tree/master/HiHope_DAYU200/%E7%83%A7%E5%86%99%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%8C%87%E5%8D%97
吐槽一下在linux环境的烧录方法貌似没写明白,导致我每次都得把镜像文件拷贝到windows下进行操作,很费时间。
还有,我试了下这个commit在4.0版本不能直接用。
https://gitee.com/zleoyu/device_soc_rockchip/commit/4467466a50adca43f26a77912cab710901f909e4
六、记录
openharmony的sig组貌似也搞出了glmark2,有时间可以再搞下来尝试一把,先记录下。
https://segmentfault.com/a/1190000044169250
https://gitee.com/honglianglin/glmark2_2/tree/master
七、尝试编译移植适配了OHOS的glmark2
git clone https://gitee.com/honglianglin/glmark2_2.git
1.x86架构
在x86架构下的ubuntu环境中直接配置、编译、安装。
meson setup build -Dflavors=drm-gl,drm-glesv2,wayland-gl,wayland-glesv2,x11-gl,x11-glesv2
ninja -C build
ninja -C build install
缺库的时候直接apt install安装即可。
安装完后直接运行,效果如下:
2.arm64架构
期间遇到了挺多问题的,慢慢道来。
step1:
构建arm64虚拟机
#创建一个虚拟fs文件系统
$sudo qemu-debootstrap --arch arm64 bullseye /mnt/data/arm64 http://deb.debian.org/debian/
#进入到文件系统
$sudo chroot /mnt/data/arm64/
#退出文件系统
$exit
也可以使用qemu或者docker。
在debain虚拟机中安装gnu、x11、libjpeg等库,除了gnu以外的其他库也可以在meson配置报错的时候安装。工具链用clang应该也可以。
step2:
编写交叉编译配置文件
参考中的链接直接拿来用的:arm64.txt
在ubuntu宿主机中进行meson配置、编译、安装。注意,我缺库的时候安装是在debain的虚拟机中进行的。但安装的很慢,配置了源,开了代理都不行,不知道啥原因。最开始是尝试全部在debain虚拟机中进行的,但安装工具链的时候报错了。。。也没查出原因。
meson setup build -Dflavors=drm-gl,drm-glesv2,wayland-gl,wayland-glesv2,x11-gl,x11-glesv2 --cross-file arm64.txt
ninja -C build
ninja -C build install
报错解决:
gnu的头文件没找到,修改配置路径即可。
按照错误提示,从debain虚拟机中将对应库文件放到宿主机对应目录。
编译安装成功,确认是arm64架构。
运行:
宿主机中效果:
虽然会有报错,但glmark2在宿主机上是可以直接运行的。
虚拟机中效果:
原因不知道,可能是虚拟机缺少模拟的GPU设备?解决中。后续还需要移植到rk3568上,目前还不知道方案,后续更新。。。。
step3:
打包进vendor.img烧录到rk3568进行测试(也可以通过hdc)。
先将vendor.img从windows拷贝到ubuntu,执行以下操作将glmark2打包进vendor.img。
root@znvhwd:/home/ptg# mount vendor.img mmm
root@znvhwd:/home/ptg# cd mmm/bin/
root@znvhwd:/home/ptg# cp /usr/local/bin/* ./
root@znvhwd:/home/ptg/mmm/bin# ls
clash elf2dmp glmark2-drm glmark2-es2-drm glmark2-wayland hdf_devmgr markdown-it repo
tsserver cmark glmark2 glmark2-es2 glmark2-es2-wayland hdf_devhostispserver pygmentize tsc
root@znvhwd:/home/ptg/mmm/bin# umount /home/ptg/mmm
umount: /home/ptg/mmm: target is busy.
root@znvhwd:/home/ptg/mmm/bin# cd …
root@znvhwd:/home/ptg/mmm# cd …
root@znvhwd:/home/ptg# umount /home/ptg/mmm
将vendor.img重新拷贝到windows,重新烧录整个rk3568版本(测试发现单独烧录vendor.img不可用,版本起来后vendor目录为空)。
仍然是缺少mesa库导致运行错误,缺少权限,并且仍然有canvas报错。
Error: Failed to create GBM device
Error: main: Could not initialize canvas
打算再开个小坑写下怎么把ohos里的mesa3d构建出来的,搞定后我会贴一下链接。
https://blog.csdn.net/qqq1112345/article/details/137261573
参考
https://blog.csdn.net/vviccc/article/details/126104486文章来源:https://www.toymoban.com/news/detail-848933.html
总结
本文为个人笔记,文中的部分超链接其他人可能没有权限打开。
本文仅限于记录增加已经适配好的第三方库文件,不涉及库的编译体系、代码、依赖关系的修改等高科技内容。文章来源地址https://www.toymoban.com/news/detail-848933.html
到了这里,关于openHarmony4.0Release-riscv64荔枝派版本新增glmark2三方库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!