笔者最近将cix p1适配了OpenHarmony 6.0r并且提供了oh上的vulkansdk工具。现将成果开源如下:
gitee地址:https://gitee.com/cix_oh/cix_p1_oh
github地址:https://github.com/lbkg/cix_p1_oh
OpenHarmony上vulkan测试样例
提供的vulkansdk工具
编译步骤
javascript
repo init -u https://gitcode.com/openharmony/manifest -b refs/tags/OpenHarmony-v6.0-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
# 搭建环境,/root/OpenHarmony/cixin/temp是oh源码目录
bash ./cix_env.sh /root/OpenHarmony/cixin/temp
# 进入源码目录打补丁
bash ./cix_patch/patch.sh
# 安装依赖
./build/build_scripts/env_setup.sh
source ~/.bashrc
# 下载OpenHarmony 6.0r vulkansdk
git clone -b 6.0_tag https://gitee.com/cix_oh/oh_vulkansdk.git device/soc/cix/sky1/resources/vulkansdk/oh_vulkansdk
rm -rf out && ./build.sh --product-name sky1_evb --ccache
对接OpenHarmony vulkan的思路
1.首先需要GPU驱动库提供vulkan支持。此芯提供的mali库libmail.so已经同时提供了opengl和vulkan的支持

2.创建vulkan的json配置文件,让Vulkan-Loader找到mali库

3.OpenHarmony中vulkan测试样例: https://gitcode.com/openharmony/applications_app_samples/tree/OpenHarmony-v6.0-Release/code/BasicFeature/Native/NdkVulkan
升级适配OpenHarmony 6.0r的思路
1.对于cix p1这款芯片来说,由于笔者已经为其适配了OpenHarmony公版6.6内核。所以升级oh版本第一件事情就是升级OpenHarmony社区内核。然后就是下载6.0r代码,修改board和vendor。
2.其中vendor仓库的修改
- vendor/cix/sky1_evb/config.json中个子系统要更新为6.0r rk3568一样的,需要特别注意
build_selinux和build_seccomp两个字段设置为false,device_stack_size设置为8388608(musl的栈大小 vendor/cix/sky1_evb/preinstall-config更新为6.0r rk3568的,并按需修改vendor/cix/sky1_evb/resourceschedule更新为6.0r rk3568的,并按需修改vendor/cix/sky1_evb/security_config更新为6.0r rk3568的,并按需修改vendor/cix/sky1_evb/updater_config更新为6.0r rk3568的,并按需修改vendor/cix/sky1_evb/window_config更新为6.0r rk3568的,并按需修改
其他的主要就是build仓库的修改,先保证能编译通过,系统能起来。后面再进行深度适配
适配vulkansdk工具的思路
1.vulkansdk包含glslang、vulkan-headers、vulkan-loader、vulkan-validationlayers、vulkan-tools、shaderc等系列的工具。如果编写BUILD.gn,工作量会非常巨大。好在OpenHarmony中提供了交叉编译工具,笔者除了VulkanCapsViewer、Crash Diagnostic Layer、slang这个三个工具没有移植外,其他均交叉编译成功,开源地址:https://gitee.com/cix_oh/oh_vulkansdk
2.此外,由于笔者是直接交叉编译的vulkansdk源码,所以需要在oh下创建/usr/share/vulkan/icd.d/mali.json文件声明mali库。
3.还需要注意的一点是oh和笔者交叉编译的vulkansdk都有libvukan.so和libvulkan_swapchain.so库,所以使用的时候需要将两者做隔离,笔者的做法是将oh的libvukan.so重命名为libvukan_oh.so和libvulkan_swapchain_oh.so。


具体修改请参考
https://gitee.com/cix_oh/cix_p1_oh/tree/6.0.0_tag_kernel_6.6.101_g720/cix_patch/vulkan
往期文档回顾:
1.此芯p1开发板使用OpenHarmony时llama.cpp不同优化速度对比(GPU vs CPU)
2.以此芯p1芯片为例研究OpenHarmony上GPU (Vulkan) 加速在深度学习推理中的价值
3.开源!移植此芯p1芯片驱动到OpenHarmony社区内核上
4.cix p1芯片OpenHarmony社区内核版本从6.6.89升级到6.6.101

