深度剖析E680G开发三.移植OPIE操作系统(上)
草木瓜
20060918
一、前言
凡事我图写的文章,往往比较内容纵深,范围却很窄,注重实际操作。原因
很简单,水平有限,还达不到理论的层次,只是对片面的技术作些陈述,至于扩
充,丰富就是别人的事了。移植操作系统看似很玄乎的东西,其实也就是一层窗
户纸。
事实上每每刚听闻一件事,觉得很神秘,实实在在去接触一点,又觉得简单
无比,然再深入的话,却又会觉得内容是深不可测。现实往往是如此滑稽,不过
也只有在这种不断的循环中,人才会进步。
读完这篇文章,你会发现没有谈及技术内容,全是在说“废话”。而我一向认
为说“废话”这很有必要。
二、重要提示
文章难免有疏漏,会在下面地址不断更新:
全系列文章地址:http://blog.csdn.net/liwei_cmg
文章相关的重要资源的下载地址:http://play.younet.com/view.php?tid=18578
三、认识操作系统
操作系统的分类方式是多种多样。如按功能特征分为批处理,分时和实时操作
系统。按应用范围分个人,网络,分步式和嵌入式操作系统。
所有分类都不是绝对的,按我个人理解,偏向于把操作系统作如下划分:
◆普通PC机操作系统
这是我们接触最频繁的一类了,从早期的MS-DOS到Windows 95,Windows 98,
Windows XP以及未来的Windows Vista等,全是微软家族的产品。除此以外Linux
家族的RedHat Linux,Turbo Linux等,苹果的Mac OS X也属于这个范畴。
◆服务器操作系统
包括各类的大型机,小型机操作系统,另外网络操作系统也属于这一类。
如基于UNIX的IBM AIX、AS系列,HP UNIX,Sun Solaris等,基于Linux的IBM
System p5系列等。
◆嵌入式操作系统(Embedded Operating System)
终于说到我们的E680g了。
嵌入式操作系统可简单划分为专用和普通两种。专用嵌入式操作系统(如大名
鼎鼎的VxWorks)应用范围可谓专业。如汽车飞机,工业控制,国际空间站,火星
探险等等,通用就常见的多了,从各家手机的广泛采用的Symbian、种类繁多的
嵌入式Linux以及逐渐没落的Palm,和气势逐渐壮大的Windows CE家族,都是属
于这个分类。
我们的E680g采用的就是嵌入式Linux家族为首的MontaVista Linux操作系统。
四、Linux图形化历程
注:此段文章综合了众多资料,主要引用个人电脑的文章
谈起OPIE,就不能不谈Qt,然而要对Qt有个来龙去脉的认识,需要从Linux
图形化说起。让我们回顾下Linux图形化界面发展的历史。
Linux实际上是以UNIX为模板的,它继承了UNIX内核设计精简、高度健壮的特
点,无论系统结构还是操作方式也都与UNIX无异。Linux本身也是没有图形界面,
只是一个基于命令行的操作系统。
早在Linux之前,Unix的图形界面一向是以麻省理工学院(MIT)的X Window
系统为标准。不过,X Window(请注意不是X Windows)并不是一个直接的图形操
作环境,而是作为图形环境与UNIX系统内核沟通的中间桥梁,任何厂商都可以在
X Window基础上开发出不同的GUI图形环境。MIT目的只在于为UNIX系统设计一套
简单的图形框架,以使UNIX工作站的屏幕上可显示更多的命令。许多UNIX厂商在
X Window原型上开发适合自己的UNIX GUI视窗环境,其中比较著名的有SUN与AT&T
联手开发的“Open Look”、IBM/HP主导下的OSF(Open Software Foundation,开
放软件基金会)开发出的“Motif”。经过多年竞争,Motif最终胜出,成为普遍使
用的界面库。不过,Motif只是一个带有窗口管理器(Window-Manager)的图形界
面库(Widget-Library),而非一个真正意义上的GUI界面。经过协商之后IBM/HP
与SUN决定将Motif与Open Look整合,并在此基础上开发出一个名为“CDE(Common
Desktop Environment) ”的GUI作为UNIX的标准图形界面。
遗憾的是,Motif/CDE和UNIX系统的价格都非常昂贵,而当时微软的Windows发
展速度惊人并率先在桌面市场占据垄断地位,CDE则一直停留在UNIX领域提供给root
系统管理员使用,直到今天情况依然如此。
上个世纪九十年代中期,以开源模式推进的Linux在开发者中已经拥有广泛的
影响力。尽管X Window已经非常成熟,也有不少基于X Window的图形界面程序,
但它们不是未具备完整的图形操作功能就是价格高昂(如CDE),根本无法用于
Linux系统中。如果Linux要获得真正意义上的突破,一套完全免费、功能完善的
GUI就非常必要。
在这时,挪威TrollTech一批程序员抓住机遇推出了Qt,一个跨平台的C++图
形用户界面库。基本上,Qt同X Window上的 Motif、Open Look、GTK等图形界面
库和Windows平台上的 MFC、OWL、VCL、ATL是同类型的东西,但Qt具有优良的跨
平台特性(支持Windows、Linux、各种UNIX、OS390和QNX等)、面向对象机制以
及丰富的API,同时也可支持2D/3D渲染和OpenGL API。
1996年10月,由开发图形排版工具Lyx的德国人Matthias Ettrich发起了KDE
(K Desktop Environment)计划。在当时的同类图形用户界面库产品中,Qt的功能
最为强大,Matthias Ettrich在发起KDE项目时很自然选择了Qt作为开发基础。
KDE本身采用GPL(GNU通用公共许可证)宣言的,但是KDE底层的基础却是Qt。
Qt是一个不遵循GPL的商业软件,一大批自由程序员对KDE项目的决定深为不
满,它们认为利用非自由软件开发违背了GPL的精神,于是GNU拥护者,一批人去
开发Harmonny(Harmony是一个兼容替代库,设计用来在没有Qt的情况下也有可能
运行KDE软件。),试图重写一套兼容于Qt的替代品,另一一批由一个墨西哥程序
员Miguel De Icaza组织下重新开发了一套称为GNOME(GNU Network Object
Enviroment)来替代KDE。
Linux业界老大RedHat不喜欢KDE/Qt的版权,甚至专门派出了几个全职程序员
来加入GNOME的开发工作,于是一场与Motif和Openlook相似的圣战就这么打起来
了。
Trolltech为了KDE曾数次修改Qt的版权,从成立KDE Free Qt 基金会到采用
GPL,可谓是费尽心机,但是GNOME采用的GTK从一开始就是完全的GPL,因此在这个
方面GNOME有一定的优势,加上Qt/KDE采用C++,在当时并不为很多人熟悉,因此
GNOME吸引了更多的自由软件开发者,但是KDE毕竟先走一步,推出的KDE1.1.2也十
分稳定,而当时急忙中推出的GNOME1.0的系统稳定性奇差,有人甚至笑称GNOME1.0
还没有KDE1.0Alpha稳定。
2000年,可谓是风云突变,一个接一个重大的事件先后发生: 首先是一批从
Apple公司出来的工程师成立了一个Eazel的公司替GNOME设计界面,然后是一批
GNOME程序员成立了一个Helix Code公司替GNOME提供商业支持,而大家期待以久的
KDE 2.0也终于发布了,这也是相当庞大的自由软件,除KDE本身,还包括Koffice
套件和集成开发环境Kdevelop等等一大批软件,其主力软件Kounqueror也是第一个
可以同微软的InternetExploer相抗衡的浏览器。
Sun公司,RedHat公司,Eazel公司,Helix Code等一批公司成立了一个GNOME
基金会,Sun还宣布将把重量级办公软件Star office同GNOME集成,Trolltech公司
自然不能坐以待毙,于2000年10月将Qt的free edition变为GPL宣言,彻底解决了
KDE的版权问题,给了GNOME阵营一个有力的回击。
Qt实际上就拥有双重授权:如果对应的Linux发行版采用免费非商业性的方式
进行发放,那么使用KDE无须向TrollTech交纳授权费用;但如果Linux发行版为盈
利性的商业软件,那么使用KDE时必须获得授权。由于TrollTech是商业公司且一直
主导着KDE的方向,双许可方式不失为解决开源与盈利矛盾的好办法。TrollTech宣
称,双许可制度彻底解决了KDE在GPL公约方面的问题,但RedHat并不喜欢,RedHat
不断对GNOME项目提供支持,希望它能够尽快走向成熟,除RedHat之外的其他Linux
厂商暂时都站在KDE这一边,但他们同时也在发行版中捆绑了GNOME桌面。
在2001-2002年,火热一时的Linux运动开始陷入低潮期,几乎所有的厂商都发
现桌面Linux版本不可能盈利,而易用性的不足也让业界不看好Linux进入桌面的前
途。但在服务器市场,Linux发展势头非常迅猛,直接对UNIX和Windows Server造
成威胁。不过,秉承自由软件理念的开发者们并不理会外界的论调,他们一直将
Linux桌面化作为目标,GNOME项目和KDE项目都在这期间获得完善发展。
进入2004年后,KDE与GNOME依然保持快速发展。商业支持方面,RedHat还是
GNOME的铁杆支持者,IBM、SUN、Novell、HP等重量级企业也都选择GNOME,而KDE的
主要支持者暂时为SuSE、Mandrake以及中科红旗、共创开源在内的国内发行商。
2005年,厚积薄发的GNOME开始全面反超,3月份的2.10、9月份的2.12让GNOME
获得近乎脱胎换骨的变化,加之OpenOffice.org 2.0、Firefox 1.5等重磅软件的
出台让GNOME如虎添翼;KDE方面则分别在3月和11月推出3.4和3.5,其中KDE 3.5也
逼近完美境地,我们认为它的水平与GNOME 2.12不相伯仲。但KDE在商业支持方面
每况愈下,Novell在11月宣布旗下所有的商业性发行版将使用GNOME作为默认桌面
(仍会对KDE Libraries提供支持),SuSE Linux桌面版则会对KDE与GNOME提供同
等支持。
到这里,我们发现一个颇富戏剧性的结局:致力于商业化的KDE反而失去了重
量级商业企业的支持。其实道理非常简单—没有哪一家重量级企业喜欢受制于人,
也许KDE的Qt不需要很多授权费,但谁知道TrollTech公司以后会不会漫天要价?
既然有免费的GNOME可以选择,那为什么不呢?
虽然在商业方面存在竞争,GNOME与KDE两大阵营的开发者关系并没有变得更糟,
相反他们都意识到支持对方的重要性。如果KDE和GNOME无法实现应用程序的共享,
那不仅是巨大的资源浪费,而且将导致Linux出现根本上的分裂。事实上,无论是
GNOME的开发者还是KDE的开发者,他们都有着共同的目标,就是为Linux开发最好的
图形环境,只是因为理念之差而分属不同的阵营。KDE与GNOME的商业竞争对开发者
们其实没有任何利益影响(只有TrollTech会受影响),基于共同的目的,KDE与
GNOME阵营大约从2003年开始逐渐相互支持对方的程序—只要你在KDE环境中安装GTK
库,便可以运行GNOME的程序,反之亦然。经过两年多的努力,KDE和GNOME都已经
实现高度的互操作性,两大平台的程序都是完全共享的。
2006年,GNOME与KDE都站在一个全新的起点,获得商业公司和更多自由程序员
支持的GNOME踌躇满志,将超越的目光放在Mac OS X系统。也许你认为Windows
Vista的半透明和三维界面将Linux远远抛在后面,那么我们告诉你这是绝对的误解,
GNOME目前已经可以实现类似的效果,Novell在前几个月就向外界作过详细的演示。
当前的KDE也可支持相当不错的半透明和阴影特效,技术上毫不落后于GNOME。现在,
GNOME项目朝向革命性的3.0版本迈进,KDE则致力于开发同样有重大技术变革的4.0,
这两个成果大概在2007年可进入现实,届时Linux系统将具备更卓越的可用性。也就
是说,Linux桌面应用的全面铺开指日可待,而除了开发者和厂商的努力外,如何向
企业和个人用户推广以及提供培训将是厂商要考虑的主要问题,我们今天恰好站在
这样的一道门槛上。
全球各地有着共同目标的艺术家通过互联网组织到一起,共同为Linux系统
设计一流的视觉界面、系统图标,而所有的自由软件程序员都有一个共同的目标,
那就是开发出一流水准的软件提供给大众使用。这种基于挑战自我、带有浓烈精神
色彩的软件开发模式成为商业软件之外的另外一极。现在,微软面对的并不是那些
只在业余时间鼓捣代码的程序员,而是分布在全球各地、数量庞大、且拥有一流技
术水平的开发者,这些开发者被有效地组织起来,形成一个个有序的协作团队,大
量实力雄厚的商业公司在背后提供支持。
写到这里,我只想说一句,伟大的开源奉献精神!
五、Qt在嵌入式操作系统的发展过程
Qt最初是作为一个跨平台(Win32、Mac、Unix)的C++GUI库开发的。在2000年
TrollTech发布了Qt的嵌入式版本。到目前分为四个版本:Win32版,适用于Windows
平台;X11版,适合于使用了X系统的各种Linux和 Unix平台;Mac版,适合与苹果
MacOSX;embedded版,适合于具有帧缓冲(frame buffer)的Linux平台。
Qt在刚出现的时候,对于Linux和Unix系统,只有构建于Xlib之上的X11版。但
随着Linux操作系统在嵌入式领域的应用日渐广泛,Qt推出了嵌入式的版本Qt-embedded
即Qte。由于嵌入式受限的硬件环境往往难以运行庞大的X服务器,Qt的嵌入式版跳过
了Xlib和XServer,直接操作帧缓冲,很大的提高了速度,缩减了体积。
Qtopia最初是sourceforge.net上的一个开源项目,全称是Qt Palmtop Environment,
是构建于Qte之上一个类似桌面系统的应用环境,包括了PDA和手机等掌上系统常见
的功能如电话簿、日程表等。现在Qtopia 已经成为了Trolltech的又一个主打产品,
为基于Linux操作系统的PDA和手机提供了一个完整的图形环境。
值得注意的是,Qte和Qtopia之间的关系。在版本4之前,Qte和Qtopia是不同的
两套程序,Qte是基础类库,Qtopia是构建于Qte之上的一系列应用程序。但从版本
4开始,Trolltech将Qte并入了Qtopia,并推出了新的Qtopia4。在该版中,原来的
Qte被称为Qtopia Core,作为嵌入式版本的核心,既可以与Qtopia配合,也可以独
立使用。原来的Qtopia则被分成几层,核心的应用框架和插件系统被称为 Qtopia
Platform,上层的应用程序则按照不同的目标用户分为不同的包,如Qtopai PDA,
Qtopia Phone等。
六、OPIE(Open Palmtop Integrated Environment)
OPIE全称为开放掌上电脑集成环境。是基于Qtopia,最类似于桌面领域中的KDE,
是为掌上电脑专门设计的LINUX操作系统。OPIE操作系统完美地支持Motorola的A、E
系统的智能手机使用的硬件设施,并且两者有着相同的LINUX內核模块。OPIE操作系
统可以理解为就是一个界面接口程序。
七、写在最后
通过这些内容我们大体得知,普通PC的Linux操作系统架构如下:
Linux Kernel + XLib + GLib + GNOME GNOME/GTK
Linux Kernel + XLib + Qt + KDE KDE/Qt
而在一般采用Qt嵌入式操作系统的架构如下:
Linux Embedded Kernel + Framebuffer + Qte + Qtopia
我们再来看E680g操作系统的架构:
MontaVista Linux Kernel + Framebuffer + Qte + ezx图形库
这样看来,似乎要移植OPIE操作系统,只需要重新交叉编译一下即可。我们将
在下文做一次实际的完整操作。