- 华为擎云L420笔记本电脑
- 在L410、W515等设备上可能也可行,但我没有可供实验的硬件
- 银河麒麟V10 2303桌面操作系统
- 在统信UOS上可能也可行,但我的试用期已经结束了
- 【更新】UOS 1060上不行,大概是因为某些库的版本太老
- yuzu的源代码
- 可以从GitHub拉取
- 【更新】Suyu也可以
- yuzu运行所需的各种资料
- 请自行解决
从yuzu的官方编译指导可以得知需要GCC v11+、CMake 3.15+才能完成编译,但遗憾的是银河麒麟V10的软件源中提供的版本无法达到这个要求,所以我们需要使用更加新的用户空间软件来完成这一点。
这里我使用琥珀兼容环境(ACE)的书虫兼容模式来达到这个要求,这个软件可以在星火应用商店下载安装。
通过bookworm-run命令,可以进入ACE的Debian 12用户空间。
sudo apt-get install autoconf cmake g++-11 gcc-11 git glslang-tools libasound2 libboost-context-dev libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qtbase5-dev qtbase5-private-dev qtwebengine5-dev qtmultimedia5-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev
切换到yuzu源代码所在文件夹,配置编译CMake项目:
export VCPKG_FORCE_SYSTEM_BINARIES=1
mkdir build
cmake .. -GNinja -DYUZU_USE_BUNDLED_VCPKG=ON -DYUZU_TESTS=OFF
ninja
编译完成后,在项目build/bin文件夹可见yuzu二进制文件,但由于链接了来自Debian用户空间的库,这个yuzu只能在ACE内运行。此时启动yuzu,熟悉的”你没有密钥“弹窗应该会如约出现,这里请自行按照一般方法配置yuzu。
配置完成,细心的读者大略已经发现,yuzu的图像设置中Vulkan只有一个Mesa的软件渲染实现。若是用软件渲染运行游戏,那至少在这个8核心的移动处理器上是不好实现的。但好消息是麒麟9006c的Mali-G78 GPU具备Vulkan 1.2支持,已经足以运行目前版本的yuzu了。此时我们需要在容器内部利用Mali专有用户态驱动程序(libmali.so)来提供Vulkan支持。
首先,我们需要修改ACE bubblewrap的运行脚本,将/dev/mali0这个由内核驱动提供的设备文件暴露到容器内。脚本位于/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bin/bookworm-run。笔者在实验的时候直接修改了这个文件,但实际上这样做大概不是最好的办法,个人建议还是复制这个文件到便于访问的地方,然后将这个位置添加到PATH。
如图所示,添加这个设备绑定。
这个操作完成之后,我们还需要实际把Mali专有用户态驱动程序也暴露到容器内。笔者采取了较为暴力的方法,直接将文件复制到了容器内(容器的根为/opt/apps/cn.flamescion.bookworm-compatibility-mode/files/bookworm-env)但读者也可以采取通过上面的配置文件(添加绑定)的方式来完成。具体需要提供的文件如下:
- /usr/lib/aarch64-linux-gnu/libmali.so
- /etc/vulkan/icd.d/mali_vulkan.json
- /usr/lib/libc_secshared.so
可以使用vulkan-tools包的vulkaninfo命令来查看Vulkan设备情况。若看到了Mali-G78的字样,那么大概算是成功了。
如果读者已经尝试在yuzu使用”Mali-G78“ Vulkan设备运行软件,那么可能会遇到闪退(无法初始化Vulkan上下文)的情况,这大概是因为这个Vulkan实现只能在Wayland应用程序上使用。遗憾的是,笔者的知识水平尚不足以解释这种问题的原因,但这实际上并不影响我们使用yuzu的Vulkan后端。
(在build/bin文件夹)使用以下命令即可使得yuzu(作为一个Qt Widgets应用程序)在Wayland下运行。注意,这样会使得其缩放(在L420上是150%)失效。
QT_QPA_PLATFORM=wayland ./yuzu
此时读者应该已经可以正常运行软件了,但可能又会发现一个问题:

这个SQUARE ENIX标志怎么变蓝了
根据笔者推测,这个问题系蓝色和红色的通道位置发生了交换(也就是RGB和BGR的区别,读者中的数据科学家们可能比较熟悉),很遗憾,我没有找到根治这种问题的方法。也许全屏滤镜可能可以改善问题?
