Moblin基础学习
from: http://blog.csdn.net/moblin/archive/2009/03/31/4038565.aspx
当Moblin的资料都没有怎么学习,弱弱地问了一下Intel,moblin 2 和linux kernel的关系?
Intel给的答复如下:Moblin 是一个全局解决方案,实际上是提供了完整的内核,应用,用户界面,服务,节能方案等,是一个带动移动互联网终端软件系统新技术的演进平台,Moblin v2.0 包含了对Ubuntu and Fedora的支持Moblin 中的Linux kernel是专门针对 英特尔®凌动™处理器对上游的Linux kernel优化过的,优化的部分也同时还回上游的Linux kernel tree。
Intel作为CPU的硬件供应厂商,我们理解他搞出来的Moblin和Linux kernel,先有一个Linux BSP的概念。BSP,Borad Support Package。下面是来自网络共产主义的信息:
BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。
例如Linux中的网卡驱动,是在space.c中声明该网络设备,再把网卡驱动的一些函数加到dev结构中,由函数ether_setup()来完成网卡驱动的安装。
Linux系统有两大主要部份:带设备驱动程序的Linux核心;以及根文件系统,包括系统所需的全部支持应用程序、服务和库。
除了驻留在目标板上的OS组件外,还需要制作一个由GNU Compiler Collection构成的交叉编译环境,为库和二进制程式(binutils)提供支持。
虽然几乎每一个组件都可在网上找到,但在硬件或设备驱动程序支持、整合测试信息、交叉编译指南或软件兼容性方面却很难收集到太多信息。尽管开发者可从网 上免费下载各种组件以配置嵌入式Linux操作系统,但每个组件在版本、支持、稳定性和测试等方面的状态则需要开发者自己决定。
如果我们通过给出不同的BSP,是否就可以适配下面多样的硬件。在Moblin的网站上是这样写道的:Moblin的核心即Moblin core,即他的Common Layer,层次结构如下。
| User Interface(UI), User Interaction model |
| Moblin Core (Common Layer) |
| Linux Kernel, driver |
我们可以将BSP也归入到最下以层,或者放置在更底一层。如果我们的MID都是基于Intel的X86主板,BSP可能不需要多种的适 配,但是如果我们需要往手机方向发展,需要适配多种的硬件,就需要涉及多个BSP。而Intel给出的Moblin 2,他根据芯片的特点,给出他们的BSP,并通过Moblin core这一层向用户提供一些lib,例如可以通过硬件来进行codec的处理。
Moblin给出的不是那么独立的层次话,Intel必然提供BSP,也可能涉及一些driver,并且通过在Linux kernel上面的Moblin Core一层,来提供芯片优化的一些功能,也提供Moblin社区封装的API。
Moblin Core是在Gnome Mobile的平台上建立。我以前玩Linux,提交的都和图像没有关系,连Xwindows都不用启动,开机后直接进入文本命令行,所以这方面了解得很少,需要学习一下,按照管理,进入共产主义网络来寻找答案。
共产地址:
http://topic.csdn.net/t/20061030/16/5119702.html
http://402s.blogspot.com/2006/11/guilinux.html
严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用 GNU工程各种工具和数据库的操作系统(也被称为GNU/Linux)。基于这些组件的Linux软件被称为Linux发行版。一般来讲,一个Linux 发行套件包含大量的软件,比如软件开发工具,数据库,Web服务器(例如Apache),X Window,桌面环境(比如GNOME和KDE),办公套件(比如OpenOffice.org),等等。GNU组件可以运行于Linux内核之上。整 个内核是基于GNU通用公共许可,也就是GPL( General Pubic License)的,但是Linux内核并不是GNU 计划的一部分。
一、linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的:
图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相当于当年的DOS和WINDOWS 3.0 一样,windows 3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样XFree只是 linux下的一个应用程序而已。不是系统的一部分,但是X的存在可以方便用户使用电脑。WINDOWS 95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows 了,但linux却不一样,没有图形界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器。这也WINDOWS和linux 的重要区别之一。
二,X是协议,不是具体的某个软件:
X是协议,就像HTTP协 议,IP协议一样。这个概念很多初学者甚至学习 LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容时他就联接到X服务器,开始用X协议和服务器交谈。比如一个X应用程序要在屏幕 上输出一个圆,X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的”画”的动作,比如这个圆如何生成,用什么显卡的驱动程 序去指挥显卡完成等等工作是由X服务器来完成的。X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱 的应用程序先生,我发现鼠标被按下了,您有什么指示吗?协议是需要具体的软件来实现的,这就是下面我要讲的:
三,X和XFree86的关系:
有了协议就需要具体的软件来实现这个协议。Xfree86就是这样一个去根据法规实现协议的”交警”。实现X协议的软件也并不只有 XFree86,XFree86只是实现X协议的一个免费X服务器软件。商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务 器软件。甚至可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示。
在LINUX上最常用的是XFree86(现在的linux发行版都用Xorg了)。苹果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议 图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很多大型三维图形设计软件都是在苹果平台上的原因。
既然是协议,那么肯定和平台无关的,因此可以让X应用程序显示在任何装有X服务器的远程计算机上。甚至显示在装有Xnest服务器的windows系统 上。只不过在大多数情况下,X应用程序都用本机的X服务器,然后X服务器将显示结果输出到本机的显示器。这也是很多人不理解X是一种协议的原因。
四,X和X11R6又是什么关系?
不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录。X11R6 实际上是X Protocol version 11 Release 6(X协议第11版第六次发行)的意思。不同版本的X协议是不能通信的,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6。 另外XFree86 3.3.6 XFree86 4.3.6等这些版本是实现X协议的软件XFree86的版本号。
五,X服务器和WM(window manager 窗口管理器)之间是什么关系。
平时大家起动图形界面是怎么启动的呢? 如果一开始就进入图形界面,可打开一个XTERM输入init 3,就可以安全的回到字符界面。
先输入以下命令: # startx 起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境。你可以最大化,最小化,移动,关闭窗口等。
按ctrl+alt+backspace反回字符界面。输入:#xinit,再次启动图形界面,你看到一个XTERM。而且不能移动。但是你可以在这个 XTERM中输入命令打开X应用程序,如果我输入:#mozilla 打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框。
为什么同样一个X应 用程序会有这样的不同呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了 KDE,如果你用GNOME就起动了GNOME。但是你用xinit起动图形界面的时候却没有起动WM。现在你明白窗口管理器的作用了吗?他的作用就是最 大化,最小化,移动,关闭窗口等。而这些不是X服务器来负责完成的。
如果你用xinit起动图形界面并在xterm中输入twm, 看看会有什么?xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一 个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征。如果你不输入twm 而输入gnome-session就可以起动GNOME 或者输入startkde起动KDE。
六,关于KDE和GNOME
KDE和 GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单, KDE是K Desktop Environment的缩写。他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等。
GNOME是GNU Network Object Model Environment的缩写。和KDE一样,也是一个功能强大的综合环境。
另外在其它UNIX系统中,常常使用CDE作为这样一个环境。
其它的小型窗口管理器有: window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器。REDHAT9中有window maker 但是默认不安装,大家可以装来试试。只要xinit再wmaker & 就可以用windowmaker了。
七,linux图形界面层次关系总结
linux本身–>X服务器<-[通过X协议交谈]->窗口管理器(综合桌面环境)–>X应用程序。
八、XFCE:Moblin选择XFCE作为桌面
先到网上科普一下Xfce。
Xfce是一款适用于多种 *NIX 系统的轻量级桌面环境。它被设计用来提高您的效率,在节省系统资源的同时,能够快速加载和执行应用程序。 —— Olivier Fourdan, Xfce 创始人
Xfce是个完全的自由软件。Xfce的每个独立组件按BSD许可证、GNU通用公共许可证或GNU库通用公共许可证之一进行发布。
Xfce建基在GTK+ 2.x之上。它使用Xfwm作为窗口管理器。Xfce有点像另一个商业的桌面环境CDE,不过在新版本中已经有较大分别了。Xfce同时为程序设计者提供 开发框架。除了Xfce本身,还有第三方的程序使用Xfce的程序库,如文字编辑器 – Mousepad,多媒体播放程序 – xfmedia 与终端机模拟器 – Terminal emulator。
Xfce 4.4 体现了传统 UNIX 哲学中的模块化和可复用性。它包含一系列的组件,这些组件一起提供了一个桌面环境的全部功能。所有组件都被独立打包,您可以自行选择安装各组件来构件一个 属于您自己的最佳工作环境。它主要是由鼠标设定,而它的设定档通常不会被普通用户看到。
Xfce 与 KDE、GNOME 相比是一个更为轻量的桌面环境,目前有些 Linux 发行版已将其作为默认的桌面环境,如 Xubuntu、Zenwalk 等。4.4.2版本是在2007年12月2日发行的。08年9月,发布了4.6得阿尔法测试版本。
但是对于某些MID,需要构建自己炫耀的桌面,可以直接在GTK+2.x上进行开发,定制自己的桌面环境。而Moblin的资料是这么说的:在Moblin 2中使用了Xfce作为它的轻载桌面,但是在框架接口中,UI使用了GTK。
九、GTK和QT
继续在网络共产主义进行科普学习。
GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以你可以用它来开发开源软件、自由软件,甚至是封闭源代码的商业软件,而不用花费任何钱来购买许可证和使用权。这样的库太多了,windows 平台上有mfc、vcl等等,linux平台上更是层出不穷,而且好多都具备跨平台功能,比如Qt、wxWidgets、FLTK等等。gtk与这些库的 不同点在于其完全使用C语言开发的。
GTK 被称为 GIMP 工具包是因为最初写它是用来开发 GIMP (GNU 图像处理程序) 的,但是它现在已经被用于很多软件项目了,包括 GNOME (GNU 网络对象模型环境)。GTK 是在 GDK (GIMP Drawing Kit) 和 gdk-pixbuf 的基础上建立起来的,GDK 基本上是对访问窗口的底层函数 (在 X 窗口系统中是 Xlib) 的一层封装,gdk-pixbuf 是一个用于客户端图像处理的库。GTK 实质上是一个面向对象的应用程序接口 (API)。尽管完全用C写成的,但它是基于类和回调函数 (指向函数的指针) 的思想实现的。
gtk+ 的作者之一 Perter Mattis说他原来开发的gtk包含了三套函数库, libglib、libgdk,和libgtk,这些库没有采用面向对象机制,因而无法实现构件的 复用,而且消息机制是使用标准的回调机制实现的,而非现在的gtk+所提供的信号机制。“+”是用来区分原始版本和新版本的。gtk+ 依然是完全使用C语言开发的,但在设计上灵活运用了面向对象设计(OOD)思想。
gtk+允许软件开发人员用简单的方式说出自己想要的东西, 不会用所谓的正规方式给开发人员带来负担。在Windows下用过MFC的人们大都体验过 2/3的编程时间是在写GUI,写到最后都忘记了自己的角色是做应用程序的,而不是GUI开发者。CSDN的VC版里,N多牛人在炫他们的GUI技术,可 他们从来不会去问:这个常用的组件为什么微软不为我们做好,直接调用呢?我很讨厌在写程序中,跌入GUI的陷阱里。如果我们所写的程序真的很有用,即使做 成CUI式的,也会被很多人所喜欢。『这段话实在太合乎我的胃口了。从开 发应用来讲,我更喜欢做server而不太喜欢client,其中有一个重要的原因就是界面问题,而且领导通常会对界面指手画脚,比实现的功能更为关心, 而且不同的领导喜欢不同的风格,而他们的人生历练,和市场的普通认可不一样。同一个领导也是多变,因此对了迎合领导的需求,已经疲惫不堪。』
gtk+是可移植的,而且具有多种语言前端,譬如C++、Perl、Python、TOM、Ada95、Free Pascal、Eiffel、JAVA,以及C#等等。在选定gtk+以前,我考虑很长时间是不是在下个项目的GUI程序开发中应该用大名鼎鼎的Qt,比 较了好久,我放弃了Qt。虽然目前Qt的可移植性与易用性都优于gtk+,但C++的实现,让它过于笨重了,而且它的主要开发工作是在03年C++标准颁 布之前进行的,与标准C++的兼容性实在是个问题。gtk+是C语言开发的,而C语言标准长期以来几乎没有变化,Qt要适应C++标准,应该要大动了。举 个简单的例子吧,我们使用标准C++所提供的字串类型呢,还是去用Qt自己实现的?另外,与gtk+所遵循的版权协议相比,Qt要开发商业程序依然价格不 菲。我觉得Qt的缺点就是过于大而全了。『这 样看C和C#的关系。我前段时间开始用C++编程,在VC上,有个很麻烦的问题,同时给出的XML解析器lib,不能在VC6(当然这个版本老点)编译通 过,出现一堆错误。我又不想重新安装VC,最后花了点时间自己写了个XML解析器,更为轻载,而不利用VC带的特别的*.h或者lib,就两个2百多行的 小程序,替代了同时数十个文件的东东。因为我其实只是个C&JAVA的程序员。C++确实很少碰到。所以GTK较之QT,也更为适合我的胃口』
QT不是完全免费的(如果你的软件是商业的你就必须付费)我比较喜欢gtk,功能齐全,界面华丽,但相关文档太少。Qt是一个多平台的C++图形用户界 面应用程序框架,由挪威 TrollTech 公司出品。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。自1996年Qt 进入商业领域开始,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。Qt支持Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等操作系统, Qt的跨平台特性,是选择Qt的一个非常重要的原因。对于相同功能的软件,我们无须针对不同的操作系统编写不同程序,只需将相同的代码针对不同的环境编译 即可。QT支持 2D/3D 图形渲染,支持 OpenGL。
GTK-QT 主题引擎软件. 该软件基于GTK主题引擎,并使用QT风格编绘桌面,换句话说,该软件可以将GTK下的程序变为QT模式。如果你使用 KDE 桌面环境,那么需要这个 GTK-QT 主题引擎以让 GTK 应用程序的外观在 KDE 下保持一致。该主题引擎将应用所有的 Qt 设置到 GTK 应用程序,并直接使用 Qt 样式。
相对于 GTK+,QT 很早就实现了 OpenGL Widget。

