[Topic DIscussion] GXDE成功在盘古m900上跑起GPU加速了
Tofloor
poster avatar
gfdgd_xi
deepin
Ecological co-builder
6 hours ago
Author

在不断的折腾下,终于成功在盘古m900上跑起GPU加速了,glmark2 成功认到了 GPU Mali-G52 r1
image.png

image.png

之前一直尝试折腾闭源驱动,从 rk 的仓库里弄了 mali 用户态的驱动,一直跑不起来,开源驱动也一直没跑起来,直到某天突发奇想,想到了解法

折腾的思路如下:
我们可以拿到盘古m900下能运行的最新版本为 5.4.18,而从 5.2 开始则引入了 Mali GPU 的开源驱动 Panfrost,且非常幸运的是这个 5.4 内核是有启用 Panfrost 模块的,意味着我们完全可以使用 Panfrost 替代闭源模块调用 GPU
于是我一开始尝试手动 modprobe panfrost ,但最后依旧没调起来

image.png

但是,在 opensuse 的文档可以了解到,盘古m900对应的 GPU G52 是在 5.10 及以后的内核才支持,但现在只有 5.4 内核且没有内核源码,这也就意味着我们修改内核

image.png

那有办法解决吗?在 opensuse 的 wiki 开头提到了个 patch(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72ef7fe96fd20d3d0e538e165b393819f99870ad ),而这个 patch 的内容及其简单,只是添加了个 compatible,那这就意味着只要有较新的 mesa,原先未受支持的内核版本里的 panfrost 也可以驱动盘古m900,而 GXDE 是基于 Debian13 做的,mesa 版本是支持的,所以我们可以尝试用此方法驱动 gpu

image.png

image.png

现在就遇到了新的问题,我们没有内核源码,不能手动合并这个 patch 怎么办?我们可以注意到 /sys/firmware/fdt 文件是存在的,那就可以意味着我们可以提取到设备树来绕过这个问题

image.png

设备树和 /sys/firmware/fdt 是什么,这里就让 ai 解释下吧
设备树简单说就是一份 “硬件清单”。系统内核启动时看不懂五花八门的硬件,所以需要这张清单来告诉它:“板子上接了哪些设备、地址在哪、怎么用”。它专门解决 ARM 等嵌入式平台硬件不统一的问题。

/sys/firmware/fdt
它是这份“硬件清单”在系统运行时的 “原始备份”。内核开机时吃了什么数据,就把原始数据原样复制一份存到这个路径里。

于是我们尝试提取设备树,并反编译得到源文件 dts

sudo dtc -I dtb -O dts /sys/firmware/fdt > pangum900.dts  # 需要 root 权限

然后用文本编辑器查找 gpu 相关字段,然后你会发现这个字段

image.png

和前面 patch 的地方有些关联,查询资料可知,只有在设备 compatible 字段与源码 panfrost 字段一致时,才会启用 panfrost
所以我们很容易想到,我们可以修改设备树里的这个字段到 panfrost 清单里有的
然后我们浏览 5.4.18 源码 drivers/gpu/drm/panfrost/panfrost_drv.c 文件(https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/gpu/drm/panfrost/panfrost_drv.c?h=v5.4.18 )的相关源码,可以看到支持的 compatible
于是我们将设备树里的 compatible 改成相关设备即可,然后编译回 dtb 即可

image.png

image.png

然后怎么调用设备树呢?这个机器是有 uefi + grub 的,所以我们只需要在 grub 里点 e 参考下面添加 devicetree 条目即可(dtb 文件推荐复制到 /boot 目录方便调用),如想以后都这样可以修改 grub.cfg

linux	/boot/vmlinuz-5.4.18-hw15-pangu root=UUID=19a2ef24-1772-44f2-8f6c-da65d6bdfa44 ro  quiet splash resume=UUID=f03d355e-4360-46bf-8208-29c0d6eaf034 DEEPIN_GFXMODE=$DEEPIN_GFXMODE console=tty
	devicetree /boot/dtb-5.4.18-hw15-pangu
	initrd	/boot/initrd.img-5.4.18-hw15-pangu

但是,你现在进系统你会发现还是不认 gpu,怎么办,用 lsmod 你会发现 panfrost 并没有驱动起来,所以我们可以尝试禁用原先闭源 mali 驱动然后设置自动开启 panfrost 驱动,所以我们这么改

/etc/modules-load.d/ 下新建个配置文件,内容为 panfrost 自动启用 panfrost 模块
/etc/modprobe.d/ 下新建个配置文件,内容为 blacklist mali_kbase 禁用闭源 mali 驱动
然后输入命令并重启机器加载调好的设备树,应该就能正常驱动起来了

sudo update-initramfs -u

glmark2 也可以认到 GPU 了
chrome 也可正常硬解了
(桌面环境推荐搭配 Wayland 使用,会比 x11 流畅很多)
image.png

Reply Favorite View the author
All Replies
avatar
神末shenmo
deepin
Spark-App
Q&A Team
6 hours ago
#1

哎,马良GPU就没那么幸运了...

Reply View the author
avatar
gfdgd_xi
deepin
Ecological co-builder
6 hours ago
#2

仅做技术分享,侵删

Reply View the author
avatar
𰻞𰻝面
deepin
4 hours ago
#3

能不能给ARM电视盒子做个适配,比如E900V22C,它刷入armbian后有一个安装deepin的选项,但我从来没成功过

Reply View the author