linux图形界面学习

WINDOWS系统内核代码绝大部分是用 C 语言编写的

另外很少的一小部分是用 C++ 编写的

其余那些需要直接与系统硬件进行通信部分(如:interrupt trap handler )或是对性能极端敏感的部分(如:context switching)等不容易在 C 代码中进行的
是用汇编语言编写的


linux内核:


C、VB+汇编:

    差不多。Linux的设计就是内核是汇编和C,高层用C/Perl/Python/Java什么的,

高级语言如何编译的:
    使用编译器,编译器一般是用C语言写的,比如gcc,用上一版本的编译器给这一版本的gcc进行编译。

如何实现操作系统对不同硬件不同指令系统的适应:
    使硬件和操作系统实现松耦合,集中平台相关的代码,比如内存管理,进程管理,再在上边做一层抽象。可以参见 Linux 内核的设计。




---------------------------------------我是分割线--------------------------------------------

一、在这之前你必须要了解: 

1.linux是基于Unix

2.塞班Symbian、苹果max os等系统的最底层也是unix

3.linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序  

 实现的

4.XwindowXfree中的X是协议,不是具体的某个软件

5.linux图形界面层次关系:linux本身-->X服务器<-[通过X协议交谈]->窗口管

 理器(综合桌面环境)-->X应用程序


一、linux图形界面的实现只是linux下的应用程序实现

图形界面(GUI)并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相当于当年的DOS和Windows 3.0一样,Windows 3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别(GUI)的系统,不是独立的操作系统。同样XFree只是linux下的一个应用程序而已,不是系统的一部分,但是X的存在可以方便用户使用电脑。Windows 95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器。这也WINDOWS和linux的重要区别之一.


1.1 X Window 

X Window从逻辑上分为三层:X ServerX ClientX协议。

最底层的X ServerX服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将它交给X ClientX客户端)作出反馈,而由X Client传来的输出信息也由它来负责输出;

层的X Client则提供一个完整的GUI界面,负责与用户的直接交互(KDEGNOME都是一个X Client

X协议则是衔接X ServerX Client的通讯协议它的任务是充当这两者的沟通管道。尽管UNIX厂商采用相同的X Window,但终端的X Client并不相同。

XFree86X Window系统的一个开源的实现。它主要运行于Unix以及类Unix操作系统上。XFree86在显示硬件(鼠标、键盘以及显卡)与桌面环境(也就是窗口管理器)之间提供了一个Client/Server接口。


二、Linux 图形领域的高级函数库 

2.1 Xlib及其他相关函数库 
  在X Window系统中进行图形编程时,可以选择直接使用XlibXlib实际是对底层X协议的封装,可通过该函数库进行一般的图形输出。如果你的X Server支持DGA,则可以通过DGA扩展直接访问显示设备,从而获得加速支持。对一般用户而言,由于Xlib的接口太原始而且复杂,因此一般的图形程序选择其他高级一些的图形库作为基础。比如GTKQT 等等。这两个函数同时还是一些高级的图形用户界面支持函数库。由于种种原因,GTKQT等函数库存在庞大、占用系统资源多的问题,不太适合在嵌入式系统中使用。这时,你可以选择使用 FLTK,这是一个轻量级的图形函数库,但它的主要功能集中在用户界面上,提供了较为丰富的控件集。


三、面向嵌入式Linux系统的图形用户界面
3.2 OpenGUI
  OpenGUIhttp://www.tutok.sk/fastgl/)在Linux系统上存在已经很长时间了。最初的名字叫FastGL,只支持256色的线性显存模式,但目前也支持其他显示模式,并且支持多种操作系统平台,比如 MS-DOSQNX Linux等等,不过目前只支持x86硬件平台。OpenGUI也分为三层。最低层是由汇编编写的快速图形引擎;中间层提供了图形绘制API,包括线条、矩形、圆弧等,并且兼容于 BorlandBGI API。第三层用C++编写,提供了完整的GUI对象集。 
  OpenGUI采用LGPL条款发布。OpenGUI比较适合于基于x86平台的实时系统,可移植性稍差,目前的发展也基本停滞。 

3.3 Qt/Embedded
  Qt/Embedded是著名的Qt库开发商TrollTechhttp://www.trolltech.com/)发布的面向嵌入式系统的Qt版本。因为QtKDE等项目使用的GUI支持库,所以有许多基于Qt X Window程序可以非常方便地移植到Qt/Embedded版本上。因此,自从Qt/EmbeddedGPL条款形势发布以来,就有大量的嵌入式Linux开发商转到了Qt/Embedded系统上。比如韩国的Miz 公司,台湾省的某些嵌入式Linux应用开发商等等。 
  不过,在笔者看来,Qt/Embedded还有一些问题值得开发者注意: 
1)目前,该系统采用两种条款发布,其中包括GPL条款。对函数库使用GPL条款,意味着其上的应用需要遵循GPL条款。当然了,如果要开发商业程序,TrollTech也允许你采用另外一个授权条款,这时,就必须向TrollTech交纳授权费用了。 
2Qt/Embedded是一个C++函数库,尽管Qt/Embedded声称可以裁剪到最少 630K,但这时的Qt/Embedded库已经基本上失去了使用价值。低的程序效率、大的资源消耗也对运行Qt/Embedded的硬件提出了更高的要求。 
3Qt/Embedded库目前主要针对手持式信息终端,因为对硬件加速支持的匮乏,很难应用到对图形速度、功能和效率要求较高的嵌入式系统当中,比如机顶盒、游戏终端等等。 
4Qt/Embedded提供的控件集风格沿用了PC风格,并不太适合许多手持设备的操作要求。 
5Qt/Embedded的结构过于复杂,很难进行底层的扩充、定制和移植,尤其是那个用来实现signal/slot机制的著名的moc文件。 
  因为上述这些原因,目前所见到的Qt/Embedded 的运行环境,几乎是清一色基于StrongARMiPAQ。 
注:目前,Qt/Embedded已经增加了对DirectFB驱动的支持,因此具有了图形加速能力,其性能也大大地得到提高。


三、关于linux两大图形界面KDEGnome 

KDE早于Gnome出现,但是KDE基于的Qt是不遵循GPL开源协议的,Qt是一个跨平台的C++图形用户界面库 ,它是挪威TrollTech公司的产品(2008年底被NOKIA收购)。 Qt具有优良的跨平台特性(支持WindowsLinux、各种UNIXOS390QNX等)、面向对象机制以及丰富的API,同时也可支持2D/3D渲染和OpenGL API。在当时的同类图形用户界面库产品中,Qt的功能最为强大.但底层的基础 Qt却是一个不遵循GPL的商业软件,这就给KDE上了一道无形的枷锁并带来可能的法律风险。一大批自由程序员对KDE项目的决定深为不满,它们认为利用非自由软件开发违背了GPL的精神。于是这些GNU的狂热信徒兵分两路:其中一部分人去制作Harmonny,试图重写出一套兼容Qt的替代品,这个项目虽然技术上相对简单,但却没有获得KDE项目的支持;另一路人马则决定重新开发一套名为“GNOMEGNU Network Object Environment的图形环境来替代KDE

GNOME选择完全遵循GPLGTK图形界面库为基础,因此我们也一般将GNOMEKDE两大阵营称为GNOME/GTK和 KDE/Qt。与Qt基于C++语言不同,GTK采用较传统的C语言 ,虽然C语言不支持面向对象设计,看起来比较落后,但当时熟悉C语言的开发者远远多于熟悉C++的开发者。加之GNOME/GTK完全遵循GPL版权公约,吸引了更多的自由程序员参与。

四、linux/unix基于window的图形显示处理原理 

X Window从逻辑上分为三层:最底层的X ServerX服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将它交给X ClientX客户端)作出反馈,而由X Client传来的输出信息也由它来负责输出;最外层的X Client则提供一个完整的GUI界面,负责与用户的直接交互(KDEGnome都是一个X Client),而衔接X ServerX Client的就是“X Protocol(X通讯协议)”、它的任务是充当这两者的沟通管道。尽管UNIX厂商采用相同的X Window,但终端的X Client并不相同。

五、QtGTK KDEGNOME的关系 

简单来说:为了方便开发人员编写X clients,就有了Xlib来封装X协议;Xlib不够方便,于是就有了qtgtk,它们提供了很多窗口控件(widgets)。
为了方便用户 ,就出现了gnomekde等桌面管理系统。一般来说,linux用户看到的界面就是其中之一了。gnome用的是gtk库,kde用的是qt

六、X协议的Client端有时谁实现的呢?

XFree86是X协议的服务器软件(注以软件的形式实现),但Client端更多的是方便程序员更方便的使用X协议与服务器端的XFree86交互,故就产生了一个Xlib库,封装了X协议内容,如果你还觉得直接使用Xlib不方便,于是就产生了QT和GTK,对Xlib进一步封装,提供了很多控件,可以可视化的使用X协议更方便程序员的开发

Xlib、QT、GTK直接关系如下图:

GTK、KDE、Gnome、XWindows 图形界面

QT是直接使用xlib库的,GTK不能直接使用xlib,而是使用更低层的函数库GDK和Glib。这种结构使得Gtk可以更方便地移植到其它系统上,或使用与XWindows系统无关的图形库。


------------------------------------------我是分割线---------------------------------------------

在目前发行版本中,LInux Mint,Debian等仍使用GNOME 2.x作为默认桌面环境。

目前,Fedora 15等发行版本采用GNOME 3 作为默认桌面环境。

许多发行版本如OpenSUSE, PCLinuxOS和 Mandriva等皆采用KDE作为默认桌面环境。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值