开源操作系统OpenHarmony就要搭配开源图形驱动Mesa

时间过得真快,从2010年在开源社区上开始搞图形驱动,整整过去了12年之久。开源图形驱动的架构并没有特别大的变化,唯一的一大变化就是我在2016年从一家美国公司(AMD)加入到了华为,真正可以为国人操作系统贡献一些自己的绵薄之力。

图形之于我即是一日三餐一般,从07年参加工作到现在,并未间断,是兴趣索然。从底层GPU硬件、图形驱动、操作系统、Benchmark以及游戏等3D大型应用,都留过自己的印记。但是真正够得上挑战的还是图形驱动,因为它需要很深的软硬件基础:它需要你懂GPU的工作原理、需要懂操作系统、编译原理、基本编程语言(C)、需要图形2D/3D编程语言(OpenGL、Vulkan、Xlib等)、需要你懂得设计benchmark、需要你做工具、需要你做性能分析。而这些都仅仅是入门的东西,还需要你啃无数的datasheet、register文档,进入痛苦的代码调试。

但是当你看到显示器被点亮的一瞬间,或者是glxgears这样的3D简单demo运行起来,或者是性能通过ISA优化得到翻倍的时候,一切都觉得很神奇,因为这就是图形所带给你的“所见即所得”的快乐。

过去在AMD曾经工作的近9个年头,曾经有幸和Alex Deucher(开源图形驱动的顶级牛人)共同学习和工作长达7-8年,这个美国人教会了我很多图形的知识,同时也无私地带领我进入到这片未知领域,非常感谢他。至少,在国内,还没有这样的人长时间从事图形驱动的开发,确切讲,是没有机会从事。

历史的东西,我们不再赘述。让我们回到2022年的1月3日,新的一年我决定要做一件事情,一件融合我过去和未来的大事件。

OpenHarmony,一个基于全场景万物互联的智能终端操作系统(OpenHarmony官网)应运而生,至于它的历史和当前状态在这里不做赘述,大家可以点击上面的链接去查看。

在最新的3.1 Beta版本,更新了很多图形的patch,尤其是RenderService的导入,会让OpenHarmony在富设备的表现上一个新的台阶。但是这样强大的开源操作系统,却有一个巨大的隐患,就是图形驱动的支持。我在上周南京参加了润和组织的Dev-Board会议,在会上我看到了很多这样的会面:开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第1张图片
非常刺眼的几个大字“无法使用GPU渲染加速”,目前在诸多芯片和开发板上都是存在的,比如树莓派3B、STM32MP1等。即使是当前已经支持闭源驱动的板子(如RK3568),闭源驱动支持也都还不进入人意,且速度非常缓慢。这件事情,我在过去AMD的日子里是经历过的,AMD曾经有两套驱动(开源&闭源),公司内部也曾经就是否提供开源驱动也争论过,但是最终还是选择了开放。当从今天往回看的时候,可以看到这是一个非常聪明的决定,因为它带动了整个A卡的普及。

而反观我们当前的现状,在移动终端,图形驱动别说开源,就是文档也了了。而OpenHarmony这样一个开源图形操作系统,怎能没有开源图形驱动的支持?!

我和社区Leo讨论过几次,最终决定出手做这个事情,这件事情的意义和价值留给后人去评判。让我们回归技术。

首先,开源Linux图形驱动架构如下:
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第2张图片
这个图是以AMD的Radeon驱动为基础而画,可以简单的把这个图分成2D和3D两个部分,2D的部分是通过Xserver接受X的API绘制指令,然后通过DDX的Radeon驱动并调用到libdrm,然后再通过IOCTL访问到kernel的驱动,并执行;而3D的部分主要是通过Mesa,把OpenGL/Vulkan指令进行翻译(类似高级语言->低级语言的转换),然后通过IOCTL调用到Kernel的驱动。

而当年,我曾经干了一件可以吹一辈子的事儿,就是把Linux的图形驱动移植到了WinCE上,这是我当时的架构图:
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第3张图片
这个动作耗费我将近2年的时间,但是学到了无数的图形领域的知识。

其实,这一套开源图形驱动框架到今天改动也非常少,其中虽然做过一些用户态和内核态驱动的调整,但是最终趋于稳定。而对于移动终端(我们以手机为例),当前主要的GPU厂商主要是ARM、Qualcomm、Apple、Nvidia等厂商,无一例外的是这些厂商目前都是闭源的图形驱动。就这件事情,Linxu Torvalds曾经在一次视频中严重鄙视了一把Nvidia:
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第4张图片
我们今年先说说Mali。Mali GPU在业界的影响力可以说是巨大的,虽然它的GPU一直都比较挫,但是无奈可选择的余地太小。但即使如此,它的GPU驱动居然这么多年,依然还是闭源。虽然说kernel层是开源的,但是真正有价值的user层的驱动却是不开源。我其实想做一样的Torvalds的手势。

但是,没关系,这个世界上从来不缺少救世主,在2021年的9月份,一份消息轰动了业界:
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第5张图片
Mesa Panfrost已经通过了Mali G52的OpenGL ES Khronos的兼容性测试,并且Panfrost已经可以成为商用的驱动了。这个消息无疑是振奋的,另外Alyssa也获得了自由软件基金会 2021 年杰出新自由软件贡献者奖(Outstanding New Free Software Contributor):
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第6张图片
关于Alyssa,我后面还会写一些文章来介绍。

而重点搞定OpenHarmony上的开源图形驱动,有几个动作需要去做,第一个就是kernel,当前OH上一个好消息是大家已经都开始使用最新的5.10的kernel,所以,通过make ARCH=arm64 menuconfig可以配置kernel driver:
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第7张图片
然后交叉编译kernel,make ARCH=arm64 CROSS_COMPILE=“aarch64-linux-gnu-”,得到kernel驱动panfrost.ko:
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第8张图片
下一步是mesa,我们checkout到21.3的分支:
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第9张图片
安装一系列的安装包后,执行命令:meson . build/ -Ddri-drivers= -Dvulkan-drivers= -Dgallium-drivers=panfrost -Dllvm=disabled,编译结果:
开源操作系统OpenHarmony就要搭配开源图形驱动Mesa_第10张图片
得到panfrost_dri.so。

当然有了这个ko和so,下一步就是把对应的kernel替换掉原来开发板里面的老的内核,我们后面文章待续…

你可能感兴趣的:(图形学)