第一章linux下GUI程序的设计与实现的发展概况.docx
《第一章linux下GUI程序的设计与实现的发展概况.docx》由会员分享,可在线阅读,更多相关《第一章linux下GUI程序的设计与实现的发展概况.docx(29页珍藏版)》请在冰点文库上搜索。
第一章linux下GUI程序的设计与实现的发展概况
第一章linux下GUI程序的设计与实现的发展概况
1.1linux操作系统的的背景和发展过程
1991年,芬兰大学生LinusTorvalds编写了一个小的操作系统核,这就是Linux的前身,LinusTorvalds也由此成为了Linux之父。
LinusTorvalds将Linux系统的源代码在Internet上公布,使Linux的发展受到了众多计算机高手的鼎力相助,Linux从而不断地增加新的特性,不断地提高稳定性。
现在,Linux已经成为一个非常流行的操作系统。
Linux是遵从GPL协议。
也就是说,只要遵从GPL协议,就可以免费得到它的软件和源代码,并对它进行自由地修改。
但对一般用户来说,对Linux的源代码进行编译和安装是难度很高的工作。
所以,一些公司介入Linux的业务,它们将Linux操作系统与一些重要的应用程序打包,并提供较方便的安装界面。
这些公司所提供的产品一般称为Linux的发布版本。
目前比较著名的Linux发布版本有以下几种:
RedHat—最著名的Linux服务提供商。
SlackWare—历史比较悠久的发行版本。
SUSE—在欧洲知名度较大。
TurboLinux—在亚洲用户较多。
该公司汉化做得很出色。
Debain—完全由Linux社区的计算机高手维护的发布版本。
XteamLinux—冲浪平台公司推出中国第一套汉化发布版本。
BluePoint—核汉化技术比较引人注目。
红旗Linux—中科院软件所和北大方正推出的发布版本。
Linux操作系统是UNIX操作系统的一种克隆系统。
Linux操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱:
UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。
下面主要根据这五个基本线索来追寻一下Linux的开发历程,它的酝酿过程,最初的发展经历。
首先分别介绍其中的四个基本要素(UNIX、MINIX、GNU和POSIX,Internet的重要性显而易见,所以不用对其罗嗦),然后根据Linux的创始人LinusToravlds从对计算机感兴趣而自学计算机知识,到心里开始酝酿编制一个自己的操作系统,到最初Linux核0.01版公布,以与从此如何艰难地一步一个脚印地在全世界hacker的帮助下最后推出比较完善的1.0版本这段时间的发展经过,也即对Linux的早期发展历史进行详细介绍。
Linux操作系统是UNIX操作系统的一个克隆版本。
UNIX操作系统是美国贝尔实验室的肯·汤普逊Ken.Thompson和丹尼斯·里奇DennisRitchie于1969年夏在DECPDP-7小型计算机上开发的一个分时操作系统。
当时KenThompson为了能在闲置不用的PDP-7计算机上运行他非常喜欢的星际旅行(Spacetravel)游戏,在1969年夏天乘他夫人回家乡加利福尼亚渡假期间,在一个月开发出了unix操作系统的原型。
当时使用的是BCPL语言(基本组合编程语言),后经DennisRitchie于1972年用移植性很强的C语言进行了改写,使得UNIX系统在大专院校得到了推广。
MINIX系统是由AndrewS.Tanenbaum(AST)开发的。
AST是在荷兰Amsterdam的Vrije大学数学与计算机科学系统工作,是ACM和IEEE的资深会员(全世界也只有很少人是两会的资深会员)。
共发表了100多篇文章,5本计算机书籍。
AST虽出生在美国纽约,但是是荷兰侨民(1914年他的祖辈来到美国)。
他在纽约上的中学、M.I.T上的大学、加洲大学Berkeley分校念的博士学位。
由于读博士后的缘故,他来到了家乡荷兰。
从此就与家乡一直有来往。
后来就在Vrije大学开始教书、带研究生了。
荷兰首都Amsterdam是个常年阴雨绵绵的城市,而对于AST来说,这最好不过了,因为这样他就可以待在家里摆弄他的计算机了。
MINIX是他1987年编制的,主要用于学生学习操作系统原理。
到91年时版本是1.5。
目前主要有两个版本在使用:
1.5版和2.0版,当时该操作系统在大学使用是免费的,但其它用途不是,当然目前都已经是免费的,可以从许多FTP上下载。
对于Linux系统,他表示对其开发者Linus的称赞。
但他认为Linux的发展有很大原因是因为他为了保持minix的小型化,能让学生在一个学期就能学完,而没有接纳全世界许多人对Minix的扩展要求。
因此这激发了Linus编写Linux。
Linus正好抓住了这个好时机。
作为一个操作系统,MINIX并不是优秀者,但它同时提供了用C语言和汇编语言写的系统源代码。
这是第一次使得有抱负的程序员或hacker能够阅读操作系统的源代码,在当时这种源代码是软件商一直小心地守护着的。
GNU计划和自由软件基金会(theFreeSoftwareFoundation-FSF)是由RichardM.Stallman于1984年一手创办的。
旨在开发一个类似Unix、并且是自由软件的完整操作系统:
GNU系统。
(GNU是"GNU'sNotUnix"的递归缩写,它的发音为"guh-NEW"。
)各种使用linux作为核心的GNU操作系统正在被广泛的使用。
虽然这些系统通常被称作"Linux",但是严格地说,它们应该被称为GNU/Linux系统。
到上世纪90年代初,GNU项目已经开发出许多高质量的自由软件,其中包括有名的emacs编辑系统、bashshell程序、gcc系列编译程序、gdb调试程序等等。
这些软件为Linux操作系统的开发创造了一个合适的环境,是Linux能够诞生的基础之一。
以至于目前许多人都将Linux操作系统称为"GNU/Linux"操作系统。
POSIX(PortableOperatingSystemInterfaceforComputingSystems)是由IEEE和ISO/IEC开发的一簇标准。
该标准是基于现有的UNIX实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。
它是在1980年早期一个UNIX用户组(usr/group)的早期工作的基础上取得的。
该UNIX用户组原来试图将AT&T的系统V和BerkeleyCSRG的BSD系统的调用接口之间的区别重新调和集成,从而于1984年产生了/usr/group标准。
1985年,IEEE操作系统技术委员会标准小组委员会(TCOS-SS)开始在ANSI的支持下责成IEEE标准委员会制定有关程序源代码可移植性操作系统服务接口正式标准。
到了1986年4月,IEEE就制定出了试用标准。
第一个正式标准是在1988年9月份批准的(IEEE1003.1-1988),也既以后经常提到的POSIX.1标准。
1989年POSIX的工作被转移至ISO/IEC社团,并由15工作组继续将其制定成ISO标准。
到1990年,POSIX.1与已经通过的C语言标准联合,正式批准为IEEE1003.1-1990(也是ANSI标准)和ISO/IEC9945-1:
1990标准。
POSIX.1仅规定了系统服务应用程序编程接口(API),仅概括了基本的系统服务标准,因此期望对系统的其它功能也制定出标准。
这样IEEEPOSIX的工作就开始展开了。
在1990年,刚开始有十个批准的计划在进行,
有近300多人参加每季度为期一周的会议。
着手的工作有命令与工具标准(POSIX.2)、测试方法标准(POSIX.3)、实时API(POSIX.4)等。
到了1990年上半年已经有25个计划在进行,并且有16个工作组参与了进来。
与此同时,还有一些组织也在制定类似的标准,如X/Open,AT&T,OSF等。
在90年代初,POSIX标准的制定正处在最后投票敲定的时候,那是1991-1993年间。
此时正是Linux刚刚起步的时候,这个UNIX标准为Linux提供了极为重要的信息,使得Linux的能够在标准的指导下进行开发,能够与绝大多数UNIX系统兼容。
在最初的Linux核代码中(0.01版、0.11版)就已经为Linux与POSIX标准的兼容做好了准备工作。
在0.01版的核/include/unistd.h文件中就已经定义了几个有关POSXI标准要求的常数符号,并且在注释中就写到"ok,这也许是个玩笑,但我正在着手研究它呢"。
1991年7月3日在comp.os.minix上发布的post上就已经提到了正在搜集POSIX的资料。
(当然此时还不存在Linux这个名称,当时Linus的脑子里想的可能是FREAX,FREAX的英文含义是怪诞的、怪物、异想天开等)。
其中透露了他正在进行Linux系统的开发,并且在Linux最初的时候已经想到要实现与POSIX(UNIX的国际标准)的兼容问题了。
1981年IBM公司推出享誉全球的微型计算机IBMPC。
在1981-1991年间,MS-DOS操作系统一直是微型计算机上操作系统的主宰。
此时计算机硬件价格虽然逐年下降,但软件价格仍然是居高不下。
当时Apple的MACs操作系统可以说是性能最好的,但是其天价没人能够轻易靠近。
到1991年,GNU计划已经开发出了许多工具软件。
最受期盼的GnuC编译器已经出现,但还没有开发出免费的GNU操作系统。
即使是MINIX也开始有了,需要购买才能得到源代码。
而GNU的操作系统HURD一直在开发之中,但并不能在几年完成。
对于Linus来说,已经不能等待了。
从1991年4月份起,他开始酝酿并着手编制自己的操作系统。
刚开始,他的目的很简单,只是为了学习Intel386体系结构保护模式运行方式下的编程技术。
但后来Linux的发展却完全改变了初衷。
1991年初,Linus开始在一台386sx兼容微机上学习minix操作系统。
通过学习,他逐渐不能满足minix系统的现有性能,并开始酝酿开发一个新的免费操作系统。
根据Linux在comp.os.minix新闻组上发布的消息,我们可以知道他逐步从学习minix系统到开发自己的Linux的过程。
从1991年的4月份开始,Linus几乎花了全部时间研究386-minix系统(hackthekernel),并且尝试着移植GNU的软件到该系统上(GNUgcc、bash、gdb等)。
并于4月13日在comp.os.minix上发布说自己已经成功
地将bash移植到了minix上,而且已经爱不释手、不能离开这个shell软件了。
第一个与Linux有关的消息是在1991年7月3日在comp.os.minix上发布的(当然此时还不存在Linux这个名称,当时Linus的脑子里想的可能是FREAX,FREAX的英文含义是怪诞的、怪物、异想天开等)。
其中透露了他正在进行Linux系统的开发,并且在Linux最初的时候已经想到要实现与POSIX(UNIX的国际标准)的兼容问题了。
在Linus的下一发布的消息中(1991年8月25日comp.os.minix),他向所有minix用户询问"Whatwouldyouliketoseeinminix?
"("你最想在minix中见到什么?
"),在该消息中他首次透露出正在开发一个(免费的)386(486)操作系统,并且说只是兴趣而已,代码不会很大,也不会象GNU的那样专业。
开发免费操作系统这个想法从4月份就开始酝酿了,希望大家反馈一些对于minix系统中喜欢那些特色不喜欢什么等信息,由于实际的和其它一些原因,新开发的系统刚开始与minix很象(并且使用了minix的文件系统)。
并且已经成功地将bash(1.08版)和gcc(1.40版)移植到了新系统上,而且再过几个月就可以使用了。
最后,Linus申明他开发的操作系统没有使用一行minix的源代码;而且由于使用了386的任务切换特性,所以该操作系统不好移植(没有可移植性),并且只能使用AT硬盘。
对于Linux的移植性问题,Linus当时并没有考虑。
但是目前Linux几乎可以运行在任何一种硬件体系结构上。
到了1991年的10月5日,Linus在comp.os.minix新闻组上发布消息,正式向外宣布Linux核系统的诞生(Freeminix-likekernelsourcesfor386-AT)。
这段消息可以称为Linux的诞生宣言,并且一直广为流传。
因此10月5日对Linux社区来说是一个特殊的日子,许多后来Linux的新版本发布时都选择了这个日子。
所以RedHat公司选择这个日子发布它的新系统也不是偶然的。
Linux操作系统刚开始时并没有被称作Linux,Linus给他的操作系统取名为FREAX,其英文含义是怪诞的、怪物、异想天开等意思。
在他将新的操作系统上载到ftp,funet。
fi服务器上时,管理员AriLemke很不喜欢这个名称。
他认为既然是Linus的操作系统就取其谐音Linux作为该操作系统的目录吧,于是Linux这个名称就开始流传下来。
在Linus的自传《JustforFun》一书中,Linus解释说:
"坦白地说,我从来没有想到过要用Linux这个名称发布这个操作系统,因为这个名字有些太自负了。
而我为最终发布版准备的是什么名字呢Freax。
实际上,核代码中某些早期的Makefile-用于描述如何编译源代码的文件-文件中就已经包含有"Freax"这个名字了,大约存在了半年左右。
但其实这也没什么关系,在当时还不需要一个名字,因为我还没有向任何人发布过核代码。
而AriLemke,他坚持要用自己的方式将核代码放到ftp站点上,并且非常不喜欢Freax这个名字。
他坚持要用现在这个名字(Linux),我承认当时我并没有跟他多争论。
但这都是他取的名字。
所以我可以光明正说我并不自负,或者部分坦白地说我并没有本位主义思想。
但我想好吧,这也是个好名字,而且以后为这事我总能说服别人,就象我现在做的这样。
"--LinusTorvalds《Justforfun》第84-88页。
1.2Linux的优点
1完全免费
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。
这是其他的操作系统所做不到的。
正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变。
这让Linux吸收了无数程序员的精华,不断壮大。
2完全兼容POSIX1.0标准
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。
这为用户从Windows转到Linux奠定了基础。
许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
3多用户、多任务
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。
多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
4良好的界面
Linux同时具有字符界面和图形界面。
在字符界面用户可以通过键盘输入相应的指令来进行操作。
它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。
在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。
5丰富的网络功能
互联网是在Unix的基础上繁荣起来的,Linux的网络功能当然不会逊色。
它的网络功能和其核紧密相连,在这方面Linux要优于其他操作系统。
在Linux中,用户可以轻松实现网页浏览、文件传输、远程登陆等网络工作。
并且可以作为服务器提供WWW、FTP、E-Mail等服务。
6可靠的安全、稳定性能
Linux采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。
Linux由于需要应用到网络服务器,这对稳定性也有比较高的要求,实际上Linux在这方面也十分出色。
7支持多种平台
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。
此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。
2001年1月份发布的Linux2.4版核已经能够完全支持Intel64位芯片架构。
同时Linux也支持多处理器技术。
多个处理器同时工作,使系统性能大大提高。
1.3 Linux的桌面环境
Linux有一套简便易学的图形用户接口(GUI),用户使用鼠标就可以完成大多数工作。
在Linux中,GUI由窗口系统,窗口管理器,工具包和风格等几个部分组成。
窗口系统用于组织显示屏上的图形输出,窗口管理器用于对窗口的操作如最小化等,工具包是用于编程界面的库,风格是应用程序的用户界面。
现在,Linux下的桌面环境主要包括KDE和Gnome两种。
KDE(KDesktopEnvironment)桌面环境目的是提供一个开放源代码的图形用户接口和开发环境。
KDE一度成为许多Linux发布版本的首选桌面环境。
但是,KDE是基于QT库的。
Qt最初并不遵从GPL协议。
所以,将KDE建立在QT之上是一件危险的事,它将依赖于开发QT库的公司。
所以,后来的Linux发行版本中加入了Gnome主面环境。
Gnome是GNUNetworkObjectModelEnvironment(GNU,网络对象模型环境)的缩写。
Gnome的发展很快,已成为一个强劲的GUI应用程序开发框架,可以在任何一种UNIX系统下运行。
Gnome使用的图形库是Gtk+构件库,它是基于LGPL协议的。
Gnome的界面与KDE的界面类似,熟悉KDE的用户无需学习就能够使用Gnome。
所以,Gnome现在已经成为大多数Linux发布版本的首选桌面环境。
Gnome是一个集成桌面环境,也是一个应用程序开发框架,由很多的函数库组成。
即使用户不运行Gnome桌面环境,用Gnome编写的应用程序也可运行,但是这些应用程序是可以很好地和Gnome桌面环境集成的。
Gnome的开发结构使我们可以开发一致和易用的应用程序。
第二章linux下GUI的程序设计与实现的方法
2.1QT编程的概述
在嵌入式系统领域,有不少GUI系统,如QNXPhotonMicroGUI等,可是具体到嵌入式Linux领域又有哪些可供选择的GUI系统呢。
在嵌入式环境底下,GUI系统的整体构架跟PCDesktop相去不远,例如绘图函数库、字型、事件处理等也都是嵌入式GUI系统所要面临的。
但是嵌入式系统本身由于体积小、资源少的特点,所以在整体设计上必须较为严谨,必须考虑的条件更多,有时很像又回到了Dos下编制程序的年代,对于软件所占的存储量有时可以说是锱铢必较。
Unix环境下的图形视窗标准为XWindowSystem(以下简称X标准),Linux是类Unix系统,所以顶层运行的GUI系统是兼容X标准的XFree86系统。
X标准大致可以划分XServer、GraphicLibrary(底层绘图函数库)、Toolkits、WindowManager、Internationalization(I18N)等几大部分。
虽然X架构不错,但却不怎么适用于嵌入式环境,因为实际工作起来实在太过于庞大,因此许多嵌入式LinuxGUI系统会把上述几点合并,甚至全部绑到一起,当然这样同时也会失去很多弹性与扩展功能,但为了适应于嵌入式系统,这也是一个解决问题的方法。
本文下面就介绍一下现存的主流嵌入式Linux下GUI解决方案。
主流解决方案介绍
Qt/Embedded
Qt是Trolltech这家商业公司所开发的一个跨平台FrameWork环境,在X环境下可以看作是一套功能完整的用户界面工具包,它采用类似C的语法,并且具备物件导向功能。
跨平台的特性可以让使用Qt编写的软件,在MicrosoftWindows95/98/2000、MicrosoftWindowsNT、MacOSX、Linux、Solaris、HP-UX、Tru64(DigitalUNIX)、Irix、FreeBSD、BSD/OS、SCO、AIX等许多平台上执行。
虽然是商业公司的产品,但是Qt走的却是开源路线,并遵循同样的游戏规则,提供免费下载,全部都是开放源代码,非商业用途亦采用GPL的宣告,著名的OpenSource“KDE”项目便是采用Qt所开发的。
Trolltech也针对嵌入式环境推出了“Qt/Embedded”产品。
与桌面版本不同,Qt/Embedded已经直接取代掉XServer与XLibrary等角色,所有的功能全部整合在一起。
Qt/Embedded同样具有跨平台的特点,省掉了不少移植软件的功夫,这样的概念和Java十分接近。
同时它还采用模块化设计,其最大的好处是有弹性,Qt/Embedded号称最小可以缩到800Kb左右,最多可以长到3Mb(forIntelx86),这样的弹性也让Qt/Embedded更适合在嵌入式环境下生存。
QPE的主界面
另外,Trolltech公司还推出了针对PDA软件的整体解决方案QPE(QtPlamtopEnvironment)。
它从底层的GUI系统、WindowManger、SoftKeyboard到上层的PIM、浏览器、多媒体等,全部都考虑进去了。
其主界面如图1所示,部包括地址簿、计算器、世界时间、时间设置、记事本、终端、文件浏览器、帮助、媒体播放器、图像浏览器、文本编辑器等。
相对其他GUI来说,Qt/Embedded应该说是肥美型的产品,功能丰富,但能消化它的东西只能是高端产品,32MB存是运行它的最小要求。
因此,如果开发的产品不是高端的信息终端类产品,不应优先考虑Qt/Embedded。
GtkFB自从Qt推出了嵌入式版本之后,虽然GTK+并非商业公司所发展,但也加紧脚步推出了GtkFB方案,其宗旨就是要为嵌入式系统推出一套基于GTK+的GUI解决方案。
与Qt/Embedded类似,GtkFB也跳过X层直接与FrameBuffer沟通,因此也具有Qt/Embedded的几项优点,不过由于不是商业软件,在发展的速度上较为缓慢。
2.2QT编程的特点
这个版本的主要特点是可移植性较好。
因为Qt是KDE等项目使用的GUI支持库,所以许多基于Qt的XWindow程序可以非常方便地移植到Qt/Embedded版本上。
因此,自从Qt/Embedded以GPL条款发布以来,就有大量的嵌入式Linux开发商转到了Qt/Embedded系统上,如国的Mizi公司。
但是,由于它是基于C类库的,所以和其他GUI相比系统消耗资源较大。
因此说Qt/Embedded是肥美型的产品,功能丰富,一般用于手持式高端信息产品。
,OpenGUI运行速度非常快。
它支持32位的机器,能够在多种操作系统下运行,主要用来在