
Openharmony之GPU Mesa3D移植二(render 新框架)
本文主要介绍在OpenHarmony上,基于RK3568移植开源GPU Mesa3D图形驱动,使用openharmony v3.1-Release 版本,该版本使用了新框架,内核使用了kernel 5.10.79版本,并使用render_service替换了Weston。
1、下载源码
创建编译openharmony的docker,安装依赖,下载源码
mkdir oh31re
cd oh31re/
podman run --name hm-31re -it -v ./:/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.9 /bin/bash
git config --global user.name “test”
git config --global user.email “test@com.cn”
git config --global credential.helper store
安装依赖:
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
chmod a+x /usr/local/bin/repo
apt-get update && apt-get install -y 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 lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby libssl-dev
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
下载源码,并编译:
repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Release --no-repo-verify
repo sync -c
repo forall -c ‘git lfs pull’
bash build/prebuilts_download.sh
./build.sh --ccache --product-name rk3568
编译成功,刷机后,能进入系统,也能进入图形,当前版本使用的是闭源GPU驱动,所以使用起来也是很流畅的。
2、编译mesa 3D库
进入容器:
podman exec -it hm-31re bash
下载源码:
git clone https://gitee.com/openharmony-sig/third_party_mesa3d.git
安装依赖:
apt-get install -y meson cmake llvm
python3 -m pip install meson==0.62.0
python -m pip install --upgrade pip
pip install mako atomic markupsafe
编译依赖库expat:
./build.sh --ccache --product-name rk3568 --build-target expat
编译mesa 3D:
cd third_party_mesa3d/
python ohos/build_ohos.py /home/openharmony/ rk3568 /home/openharmony/third_party_mesa3d/
拷贝库文件到device/hihope/hardware/gpu
cp build-ohos/src/egl/libEGL.so.1.0.0 …/device/hihope/hardware/gpu/
cp build-ohos/install/lib/libGLESv1_CM.so.1.1.0 …/device/hihope/hardware/gpu/
cp build-ohos/install/lib/libGLESv2.so.2.0.0 …/device/hihope/hardware/gpu/
cp build-ohos/install/lib/libgbm.so.1.0.0 …/device/hihope/hardware/gpu/
cp build-ohos/install/lib/libglapi.so.0.0.0 …/device/hihope/hardware/gpu/
cp build-ohos/src/gallium/targets/dri/libgallium_dri.so …/device/hihope/hardware/gpu/
cp build-ohos/install/lib/dri/panfrost_dri.so …/device/hihope/hardware/gpu/
注意,使用编译mesa库需要把third_party_mesa3d放到openharmony源码中。
3、修改内核配置
1)修改内核dtb
修改out/kernel/src_tmp/linux-5.10/arch/arm64/boot/dts/rockchip/rk3568.dtsi适配开源panfrost,如下:
并拷贝到device/hihope/rk3568/目录下:
cp out/kernel/src_tmp/linux-5.10/arch/arm64/boot/dts/rockchip/rk3568.dtsi device/hihope/rk3568/rk3568.dtsi
2)修改device/hihope/rk3568/kernel/build_kernel.sh
3)修改内核config
修改kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig
4、修改openharmony代码
1)修改base/startup/init_lite/ueventd/etc/ueventd.config
增加card1和rendD129的权限,在该文件中加上:
2)修改device/hihope/hardware/display/src/display_gralloc/display_gralloc_gbm.c
3)修改foundation/ace/ace_engine/adapter/ohos/build/product_config.gni
4)修改 foundation/graphic/standard/graphic_config.gni
5)修改 foundation/graphic/standard/BUILD.gn
6)修改device/hihope/hardware/gpu/BUILD.gn
7)修改device/hihope/rk3568/BUILD.gn
5、编译
./build.sh --ccache --product-name rk3568
6、刷机
刷机后,render_service正常起来了,图形也正常启动,panfrost驱动也正常,点击界面,流畅不卡顿。
7、问题
1)编译mesa库的时候报错ld.lld: error: unable to find library -lexpat
解决办法:
该问题是缺少依赖expat,需要编译expat
./build.sh --ccache --product-name rk3568 --build-target expat
2)编译mesa库的时候报错如下:
解决办法:
该问题是meson版本过低导致,升级该版本解决问题
python3 -m pip install meson==0.62.0
3)编译mesa库的时候报错如下:
解决办法:
该问题是缺少mako依赖,安装该包即可,具体如下:
python -m pip install --upgrade pip
pip install markupsafe
pip install mako
4)编译问题
移植完mesa驱动后,编译报错如下:
解决办法:
该问题原因主要是mesa3d库的软连接导致的,需要修改gn让软连接实体so,并且添加上so的软连接,具体参考第4节中6)修改device/hihope/hardware/gpu/BUILD.gn。
5)刷机后,能进系统,但是图形起不来
解决办法:
ps命令查看发现render_service 服务没有起来,判断是该服务导致的,
该问题是mesa3d库有问题,可能是使用的mesa3d库是ohos/build_wayland_and_gbm.py编译出来的,即使用老框架支持的,在新框架中需要使用ohos/build_ohos.py编译的mesa3d库,具体编译方法请参考第2节编译mesa 3D库。
6)安装atomic报错
pip install atomic,安装错误提示如下:
解决办法:
修改~/.bashrc文件,添加如下配置:
然后再执行如下命令:
最后重新安装atomic,安装成功。
文章转载自作者:易阳天
