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

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

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

首先,开源Linux图形驱动架构如下:

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

而当年,我曾经干了一件可以吹一辈子的事儿,就是把Linux的图形驱动移植到了WinCE上,这是我当时的架构图:

这个动作耗费我将近2年的时间,但是学到了无数的图形领域的知识。

其实,这一套开源图形驱动框架到今天改动也非常少,其中虽然做过一些用户态和内核态驱动的调整,但是最终趋于稳定。而对于移动终端(我们以手机为例),当前主要的GPU厂商主要是ARM、Qualcomm、Apple、Nvidia等厂商,无一例外的是这些厂商目前都是闭源的图形驱动。就这件事情,Linxu Torvalds曾经在一次视频中严重鄙视了一把Nvidia:

我们今年先说说Mali。Mali GPU在业界的影响力可以说是巨大的,虽然它的GPU一直都比较挫,但是无奈可选择的余地太小。但即使如此,它的GPU驱动居然这么多年,依然还是闭源。虽然说kernel层是开源的,但是真正有价值的user层的驱动却是不开源。我其实想做一样的Torvalds的手势。

但是,没关系,这个世界上从来不缺少救世主,在2021年的9月份,一份消息轰动了业界:

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:

然后交叉编译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替换掉原来开发板里面的老的内核,我们后面文章待续…

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

  1. [BBS]搭建开源论坛之Jforum搭配开源CKEDITOR

    本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/47946065 使用默认的编辑器的时候,格式都无法保 ...

  2. 一文读懂开源项目 OpenHarmony2.0 开源项目 OpenHarmony 是什么

    一图胜万语,开发者拿到OpenHarmony 2.0代码后跑起来的样子 OpenHarmony是自主研发.不兼容安卓的全领域下一代开源操作系统. 开放原子开源基金会(简称"基金会" ...

  3. 刘敏:优麒麟开源操作系统运营实践 | DEV. Together 2021 中国开发者生态峰会

    内容来源:2021 年 6 月 5 日,由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满落幕.会上,优麒麟开源社区运营负责人刘敏发表了主题为<优麒麟开源操作系统运营实践 ...

  4. OpenHarmony开源图形驱动SIG周例会二 Panfrost使能润和DAYU200(RK3568)

    上周六(1.8)开源图形驱动SIG开工会后,我们把目标锁定在润和DAYU200的开发板(基于瑞芯微RK3568),GPU为Mali G52(Bifrost架构),要使能Panfrost驱动,并且支持O ...

  5. 中国市场到底有多少国产开源操作系统?

    老有人说国产的操作系统比用户都多,这里给各位老哥盘点一下国产的开源操作系统,包括但不限于服务器操作系统.桌面操作系统.物联网及边缘操作系统.嵌入操作系统式... 排名不分先后,如果有人知道其它国产的开 ...

  6. 鸿蒙开源源码,基于鸿蒙系统开源项目OpenHarmony源码静态分析

    #ifndef __scc #define __scc(X) ((long) (X)) // 转为long类型 typedef long syscall_arg_t; #endif #define _ ...

  7. 一文带你看懂物联网开源操作系统

    物联网.开源.操作系统是目前IT业界的热门词汇,也正是这三个词汇构成了物联网开源操作系统.那么,对于物联网开源操作系统,你了解有多少呢?我们今天带大家一起走近物联网操作系统,同时介绍10款经典的物联网 ...

  8. 阿里马涛:重新定义云时代的开源操作系统 | 人物志

    作者 | Just 出品 | CSDN(ID:CSDNnews) 随着云计算的发展,以及Linux平台的不断发展和生态系统的不断完善,越来越多的企业.云服务提供商都将Linux作为其数据中心的首选操作 ...

  9. 开放原子开源基金会OpenHarmony开发者大会2023圆满举办

    4月19日,以"开源正当时,共赢新未来"为主题的开放原子开源基金会OpenHarmony开发者大会2023(以下简称"大会")成功举办. 本次大会由开放原子开源 ...

最新文章

  1. Python基础(11)--面向对象1
  2. 限制IP 访问 Oracle 的方法
  3. R语言--查看数据类型+类型判断
  4. Unable to load the Wrapper's native library because none of the following files及解决方法
  5. 产品经理整理PRD时,需要注意哪些点
  6. 你还在为20倍的连麦成本发愁吗?
  7. java jframe添加按钮_JFrame窗口中如何加按钮啊?(JDK)
  8. std::map用法
  9. CentOS经常使用文件操作命令[百度博客搬家]
  10. 创建featureclass,为它赋别名,并移动到数据集下
  11. Halcon图像预处理与形态学(图像的几何变换)
  12. linux 内核源码学习
  13. tensorflow 张量
  14. DDOS hulk,rudy
  15. IT男的魔都10年及N次面试 - 如何在500强升职顺便搞定漂亮MM
  16. Android 显示历史搜索记录
  17. python回合制游戏教程_3. Molten从零开始做独立游戏-python学习
  18. linux界面安装weblogic12c,Linux安装WebLogic12c
  19. ImageWarping--反距离加权插值(IDW)方法实现及报告
  20. 离职当天,删库跑路,京东到家程序员被判刑

热门文章

  1. mysql中distinct与join,INNER JOIN DISTINCT与MySQL
  2. TCP四次挥手及其相关问题
  3. 解决Elasticsearch查询默认最大值返回10000
  4. 基于Python的中文反义词识别判定工具(词典 + Word2Vec + jieba)
  5. yolov4 火灾检测,烟雾检测、 古文预训练语言模型等AI开源项目分享
  6. 电子表格软件与一站式BI的区别
  7. android 购物车加减列表,Android 购物车加减功能的实现代码
  8. js函数改变html样式,JavaScript改变CSS样式的方法汇总
  9. C语言字符串查找替换
  10. Android通过adb添加电池用户白名单