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

news/2024/10/18 12:26:01/

时间过得真快,从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会议,在会上我看到了很多这样的会面:无法使用GPU渲染加速
非常刺眼的几个大字“无法使用GPU渲染加速”,目前在诸多芯片和开发板上都是存在的,比如树莓派3B、STM32MP1等。即使是当前已经支持闭源驱动的板子(如RK3568),闭源驱动支持也都还不进入人意,且速度非常缓慢。这件事情,我在过去AMD的日子里是经历过的,AMD曾经有两套驱动(开源&闭源),公司内部也曾经就是否提供开源驱动也争论过,但是最终还是选择了开放。当从今天往回看的时候,可以看到这是一个非常聪明的决定,因为它带动了整个A卡的普及。

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

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

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

而当年,我曾经干了一件可以吹一辈子的事儿,就是把Linux的图形驱动移植到了WinCE上,这是我当时的架构图:
Linux驱动移植到WinCE上
这个动作耗费我将近2年的时间,但是学到了无数的图形领域的知识。

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

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

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

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


http://www.ppmy.cn/news/383893.html

相关文章

虚拟化服务器采用amd芯片,AMD和Intel比拼芯片辅助虚拟化

【IT168 专稿】在过去的近20年间,X86处理器的核心指令集没有什么变化,但AMD和Intel却在处理器中加入了许多创新功能,如64位内存扩展技术、图像处理指令、浮点运算指令以及多核心技术等等。这两年,AMD和Intel又在CPU中加入了芯片辅助虚拟化技术,这一创新有望将虚拟化从梦想…

OpenCV识别图形以及常用函数处理

前言 识别图形 常用函数介绍 前言 OpenCV在图像处理与计算机视觉方面有很多通用算法。因此可以用来人脸识别、图形识别、文字识别等等。对于复杂一点识别的可能还涉及到大量的识别训练,最后的匹配比较分类等等。后续可能会介绍文字识别、人脸识别等等。 图形识别 …

学计算机AMD不支持软件,解决系统提示“AMD安装程序无法正确识别AMD显卡硬件”的方法...

驱动在电脑中的作用是很重要的,它可以帮助电脑运行软件。很多用户在安装系统或是更改软件的时候会出现一些错误,例如下图中的提示:AMD安装程序无法正确识别AMD显卡硬件。这个故障并不是很好解决,不过小编还是找到了解决的方法&…

matlab图形编辑,matlab绘制图形plot属性编辑

matlab绘制图形plot属性编辑 matlab绘制图形plot属性编辑 使用plot绘制图形函数,设置其中的图形参数,包含线条颜色,粗细,线条类型。 x=1:15; y=x.^3; 方法一 是在plot中直接加入图形的参数属性,如下 设置图形线条颜色 h=plot(x,y,r); 或者 h=plot(x,y,color,red); 设置图…

arch linux对32amd,AMDGPU (简体中文)

翻译状态:本文是 AMDGPU 的翻译。上次翻译日期:2019-09-02。如果英文版本有所更改,则您可以帮助同步翻译。 amdgpu 是 AMD Radeon 显卡的开源图形驱动。 选择正确的驱动 请参考Xorg#AMD选择合适的显卡驱动,这个页面包含 AMDGPU 和 AMDGPU PRO的说明。 驱动不支持的显卡用户…

计算机图形学介绍

计算机图形学各个领域的目标或许不同,但最终的形式都是渲染(即绘制)在二维的显示设备上的图像。下面是一个简单(可能并不完全)的分类: 计算机图形学-领域及分支: 1 绘制 1.1 真实感绘制(非实时) 1.1.1 光线追踪(Ray-tr…

图形API的简单了解

本文图片来自:http://www.rastertek.com/choosing.html 大多数人都希望学习图形API,以便他们可以构建自己的3D或2D图形引擎。但是,随着最近发布的许多新API的选择,使用哪种API并非一帆风顺,尤其是某些API是专门为专业用户设计的。…

centos是arm还是amd_amd系列cpu安装linux

如何在 Linux 上安装 Intel 微代码固件 linux 的内核可以在引导时更新 cpu 固件,而无需 bios 更新。 处理器的微码保存在内存中,在每次启动系统时,内核可以更新这个微码。 这些来自 intelamd 的微码的更新可以去修复 bug 或者使用补丁来防范 bug。 如果你是一个 linux 系统管…