打印

[明升体育] Linux_GUI加快(1)_GUI体系概述

[仿制链接]
166|6
跳转到指定楼层
楼主
开端前的几点阐明:
  • 本文会尽量从初学者的视点去描绘整个Linux整个图形子体系,但因为其复杂性,涉及到的模块比较多,或许会需求一些相关的先验常识;
  • 关于体系的介绍,剖析的侧重点或许不会在于为什么该这样规划,而是在于在现有的显现体系下,咱们能做些什么来适配咱们的意图;

1.前语
GUI作为人机交互信息量最大的一种方法,不管在消费仍是工业级产品上都大行其道。但一同因为它处在整个体系的中心方位,对外需求经过鼠标、键盘 、显现器进行I/O获取和操控,在内需求担任图形的生成,烘托,整个体系复杂度比较高。本文会从以下几个 方面来介绍GUI子体系:
  • 以Linux下的原生GUI子体系为例,概述GUI子体系的概念,软硬件部分在GUI子体系的中的人物及大致构成;
  • 侧重剖析Linux下DRM+KMS的软件完成方法,而且以Xilinx的Zynq-7000 SOPC为例,具体介绍相关片内硬件模块在GUI体系中的人物及完成方法;(因为GPU模块硬件的源码的开源程度不高,不在本文的剖析范围内)
  • 剖析现有GUI框架下,在硬件加快方面,咱们能做的作业,并以十分简略的图画处理为例,给出相应的规划方案;
  • 本文的最终一部分,会在Zynq-7000上面(digilent的Zybo开发板)布置整个Linux+硬件边际提取处理+Qt+HDMI的环境,并给出具体的完成流程;

2.Linux GUI子体系概述
GUI作为人机交互的一种方法,经过其承载的很多信息提高了信息沟通的功率。这儿咱们不介绍鼠标、键盘等输入设备,只介绍输出显现这一子模块。日子中咱们最常见的图形化界面估量便是图画化界面的桌面环境,即窗口体系,(如下图的Ubuntu、Xfce等)。

窗口体系一般都具有以下根本功用:
  • 经过WIMO(Window-视窗、Icon-图标、Menu-选单、Pointer-方针)4个根本元历来完成人机交互;
  • 上述的4个根本元素都能经过第三方的程序来扩展(也便是装置新程序);
在完成方法上,大部分Linux下的窗口体系都是经过X来呼应不同的交互恳求及输出到显现器上。因而,整个运用层的GUI结构如下:


因而,在运用层面上,GUI体系的中心部分是X,X的整体功用一句话描绘如下:经过指定的协议承受本地或长途的鼠标、键盘需求,并切输出相应的窗口画面到显现设备上。细分来讲,X首要由以下4个组件构成:
  • X server:担任软硬件的办理,将输入的软硬件事情经过必定协议转发给X client,将输出的图形制作在屏幕上;
  • X client:每个需求涉及到GUI的App,能够实例化为一个X client,X client首要是呼应X server分发下来的事情,经过处理后,将待制作的图画回传给X Server;
  • X window manager:X window manager作为一个特别的X client,首要担任为X server办理多个X client(一个具体的比方便是对虚拟桌面的办理),起着视窗办理员的人物。常见的X window manager如下:
    • GNOME (GNU Network Object Model Environment);
    • KDE (K Desktop Enviroment)
    • twm (Tab Window Manager)
    • XFCE (XForms Common Environment)
    • Display manager: 供给登陆答应环境以取得X Window的操控;


咱们再从开发者的视点来看一下GUI。以Qt为例,咱们在运用Qt组件进行开发时,一般是运用组件中的各品种库,去呼应各种事情输入(单双击鼠标、键盘操作)以及给出相应的输出到显现器上。其实际作业的时分,这些作业底层都是经过和window system(X)之间的交互完成的。
这些根本事情的呼应,根本的图画单元的制作,是window system经过封装成一个通用的GUI东西集供给给QT(如X的xlib)。关于Qt而言,这个window system能够是X,也能够是QT自行研发的QWS视窗体系。整个运用层的GUI体系则可看作如下:


3.Linux GUI子体系的构成及作业流程
从运用层深化到内核中去。暂不考虑在linux下的GUI,咱们知道,单纯的显现图片的话,整个数据流的走向是这样的:


即依照必定时序时序,将图画信息从内存中输出到显现接口上。若在生成Frame buffer里边的图画数据时不只经过软件memory处理,还用到了硬件加快的话,数据流则变为如下:


其间accelerate logic便是显卡部分(若是SOC的片内GPU模块,则是经过片内高速总线进行数据交互的,若若是独立显卡,一般是经过pci-e高速串行接口进行数据传输的)。把这个数据流走向放入Linux中,数据流和操控流都需求和用户层进行交互,也便是说,Linux下,有必要得有相关的软件驱动给用户层供给相应的API。这也便是DRM(Direct Rendering Manager)和KMS(Kernel Mode Setting)的人物。
Linux原生体系中供给由DRM+KMS构成的DRI(Direct Rendering Infrastructure)中:
  • DRM首要担任担任数据流,即经过软件或硬件,生成方针图画,存储在framebuffer中;
  • KMS首要担任操控流,即针对外置LCD以及指定的显现形式设置,将生成好了的frame数据信息送到呼应display port上(VGA、HDMI等);
Kernel将这两大快的根本API抽出来封装成libdrm供X运用,整个运用层+kernel相关的GUI结构如下图:


整个data flow也替换成了上图的flow1~flow6。关于DRM和KMS的具体介绍咱们会放到这个系列的第2篇,这儿再提一下涉及到3D的GUI。在需求用到3D图形交互的场景,往往对着实时性要求较高,X中的server/client之间的数据协议解析以及数据交互导致的延时是这种场景不能容忍的。因而DRI是支撑这种app跳过X直接和内核沟通的方法的。比方,Qt中能够直接经过opengl相关类库直接调用libdrm中API操控硬件中的Frambuffer软硬件,此刻结构如下:


4.咱们能做些什么
在一个常见的体系研发中,子体系中咱们能做的根本便是适配,适配不同的CPU、适配不同的OS、适配不同的显现设备。而关于专业的GPU研发团队来说,则需求在现有DRI框架下,为自己的GPU逻辑规划专用的驱动,软硬件作业量巨大。作为一个高性能核算实验室,当然要将一些高速核算融进去。在本系列第3篇,咱们将会在Xilinx的Zynq7000系列芯片上,运用其间的PL逻辑资源,规划十分简略的图画处理IP,加快DRM中的Framebuffer数据并经过HDMI显现到LCD上。

原创不易,假如对帖子有疑问,能够重视我的大众号彼此沟通~
大众号:
明升体育异构核算

专心明升体育异构核算常识共享


沙发
| 2019-6-22 16:50 | 只看该作者
求带啊    我也在搞这个    学习阶段
板凳
 楼主 | 2019-6-29 10:04 | 只看该作者
zhangmangui 宣布于 2019-6-22 16:50
求带啊    我也在搞这个    学习阶段

哈哈,我论坛不太活泼,能够在微信大众号上沟通哈
地板
 楼主 | 2019-6-29 10:05 | 只看该作者
zhangmangui 宣布于 2019-6-22 16:50
求带啊    我也在搞这个    学习阶段

哈哈,我论坛不太活泼,能够在微信 -大众号-上沟通哈
5
| 2019-7-4 14:51 | 只看该作者
zhangmangui 宣布于 2019-6-22 16:50
求带啊    我也在搞这个    学习阶段

我看您在论坛上十分活泼,感觉您便是大神呀,大神还要人带?
6
| 2019-7-9 22:30 | 只看该作者
18971591125 宣布于 2019-7-4 14:51
我看您在论坛上十分活泼,感觉您便是大神呀,大神还要人带?

我在学习呢  哈哈   活泼但水平一般   向咱们学习
7
| 2019-7-10 11:55 | 只看该作者
学习
扫描二维码,随时随地手机跟帖
您需求登录后才能够回帖 登录 | 注册

本版积分规矩

我要发帖 投诉主张 创立版块 请求版主

快速回复

您需求登录后才能够回帖
登录 | 注册
高档形式

论坛热帖

封闭

抢手引荐上一条 /6 下一条

在线客服 快速回复 回来顶部 回来列表