相关的GMAE
创办于1990s的知名Linux桌面环境项目GNOME也正式参与嵌入式与行动装置开发领域。GNOME是相当知名且具影响力的Open Source /Free Software Project,如今GNOME Project正式成立GNOME Mobile & Embedded Initiative后,可预期Embedded Linux / GUI发展与应用将出现重要转折。
GNOME Mobile & Embedded Initiative(GMAE)所提供的基础架构自然是基于GNOME原本的桌面技术,目前,已经可以在GMAE网站上看到GNOME Mobile Platform的初步架构图!从技术面而言,GNOME架构在 Xorg/Glib/D-Bus的环境上,UI toolkit & widgets采用GTK+。
GNOME Mobile Platform 针对手机应用也选出几套free soft-ware:

许多open source/free software经过近10年(或超过)发展,终将迈向成熟,陆续看到一些重量级的软件推出重要版本,紧接著embedded Linux hackers也针对embedded system的应用为open source/free software进行定制化,显见embedded Linux应用正快速扩张,并且开发模式也在快速改变。客户化、集成与优化会是重要的工作。
GNOME Desktop经过定制优化成为GNOME Mobile Platform后,对Linux手机的开发产生了重大影响。从技术角度来看,许多发展中或是成熟的Linux mobile phone软件(例如:OpenMoko)项目非常多都是基于GTK+,而GMAE的成立也对相关项目产生相当大的助力:
- 强化GTK+,为相关的手机项目打下稳定的基础建设。
- 整合GNOME desktop至手机
- 以GNOME Mobile Platform为分支的商业性质open source/free software project,能更健全地与GNOME desktop或是GMAE developers 协同发展。
- GNOME Mobile Platform基础架构 (Xorg/Glib/D-Bus),让整合与发展更快速。
OpenMoko开源技术的应用
开源项目以数10万计,我们以OpenMoko架构图上所使用到的开源技术,来介绍Linux手机技术使用到哪里些开源项目。基于OpenMoko架构图,重要的开源技术如下:
Host端:toolchain、glib、openembedded。
Target端:Linux kernel、Kdrive、GTK+、D-Bus、udev、BlueZ、gsmd。
Toolchain
Linux的开发工具(toolchain)也使用在手机系统的开发上。Linux 的开发工具基础为GCC及GLIBC。
GCC是GNU Compiler Collection的缩写,也就是许多编译器的收集,目前支持的程序语言有:C、C++、Objective-C、Fortran 、Java、Ada。GCC是 Richard Stallman所创立的GNU计划中最重要的作品之一,GCC提供自由软件发展的高质量编译器。早期的GCC是以C、C++、Objective C为主,故称为GNU C Compiler;GCC一直发展到现在,已收集了各种不同语言的编译器,因此改名为GNU Compiler Collection。
GLIBC是GNU的C标准程序库,C程序库可分为2大类:system call的界面:提供程序函数供应用程序调用,以间接调用Linux sytem call。常用的函数:例如标准之C函数。
glibc又称为libc6,目前的glibc,对I18N(国际化)与L10N(本地化)有较佳的支持。除此之外,GLIBC也符合许多标准与规格,让使用GLIBC的程序可以更容易移植到其它UNIX平台。这些标准包括:ISO C、POSIX、SVID、XPG、Berkeley Unix、GNU Extension等。
嵌入式图形系统
目前,针对Linux手机与移动设备的应用来说,有GTK+、Qt、Enlightenment 3大嵌入式图形界面解决方案:
GTK+全名为The GIMP Toolkit,这是一套跨平台的widget(图形元件)程序库,用来建立图形化界面(GUI)。OpenMoko平台就是采用GTK+做为解决方案,此外,上述所提的GMAE也是采用GTK+。GTK+原本是GNOME桌面系统的核心,但近年来己经成功走入嵌入式系统应用。GTK+采取LGPL授权,是100%的FOSS项目,不受任何商业限制,因此,未来移动设备的图形界面应用上,将会是非常重要的解决方案。
Qt是由Trolltech公司所发展的跨平台widget程序库,Qt的授权模式分为GPL与QPL 2种。Qt/Embedded则是专门针对嵌入式系统所发展的特殊版本。
Enlightenment或简称为e,是一个知名的windows manager。Enlightenment项目,分为3个部分:DR16、DR17与EFL(Enlightenemtn Foundation Libraries)。Enlightenment目前并没有实际的Linux手机平台,但由于Enlightenment己经不再只是一个window manager,还支持”desktop shell”的技术,因此EFL具备高弹性的图形界面客户化能力,近来也受到不少重视。

图说:Linux / GTK+ 的开放源码手机解决方案
OpenEmbedded
Root filesystem即是”小型的Linux系统”,root filesystem里头存放Linux的系统架构(filesystem hierarchy)、指令、工具、应用程序、shared libraries、驱动程序等。以手工方法建立 root filesystem 耗时又耗力,因此,必须导入”build system”。
传统的build system大多建立在Makefile与script的体系上,因此有以下的缺点:
(1)无法有效解决套件间的相依(dependency)问题。
(2)对多平台(architecture)的支持缺乏弹性。
(3)跨平台编译时,可能需要修改configure.in设定档。
(4)有时必须将套件 (package) 的source code一起打包,无法设计成由网络下载。
目前最具代表性的build system是OpenEmbedded,OpenEmbedded展示了先进的"Linux distribution for embedded system"做法。OpenEmbedded采用BitBake来做套件的cross compilation与管理,BitBake使用 .bb files与bbclass来建立root filesystem。
Linux Kernel
Linux是一个操作系统核心的实体,Linux kernel加上其它必要的系统工具 (utilities) 与其它应用程序码的Linux操作系统则称为Linux system,一般认为标准的称呼为GNU/Linux (system),这是因为Linux system使用的系统工具大多是GNU的程序码。
目前仍在使用本的kernel版本可分为4大分支:
1. Kernel 2.0.x:已经停止发展的早期版本。
2. Kernel 2.2.x:已经停止发展的早期版本。
3. Kernel 2.4.x:重要的版本分支,目前仍广为使用中,因此仍然持续有驱动程序与处理器架构相关程序码的更新。
4. Kernel 2.6.x:重要的Linux kernel里程碑,许多新技术、新观念、驱动程序支持与操作系统架构都在此版本实作,是目前更新最频繁的版本分支。
目前(2005年)的最新kernel版本为2.6.x系列,由于kernel的开发者很早就已经转移重心至2.6系列,因此2.4系列的版本分支也将渐渐停止发展。许多2.4版本里的重大bug也只在2.6系列版本做修正。
2.4系列的kernel仍普遍使用于嵌入式系统中,但缺点是驱动程序的支持较不足;2.6系列的kernel是目前最流行的分支,这个系列的kernel加入许多新技术的实作,当然也包含对嵌入式系统的支持,并且具备较完整的驱动程序。
Glib
就程序码内部的组织来说,以往我们经常重新定义一些基本的东西,并透过这些're-defidition'的巨集或函数(亦称为wrapper function)来撰写程序。有时,也能透过重新定义的方式,将框架(framework)的实体隐藏起来。这种技巧,大量被应用在许多软件项目中。
Glib是GTK+计划下的”副产品”,Glib原本主要是给GTK+与GNOME 使用,不过,现在也有越来越多应用程序开始使用Glib开发软件。Glib就本质来看,他提供一套重新定义过的data type、event loop框架、thread 框架、及对象(object)系统。
Glib以一种”宏观”的方式,提供C语言一套高度可移植性、简单易学且通用的工具库(toolkit)。由于Glib实在太优异了,除了GTK+与 GNOME 本身外,也有非常多的Free/Open Source Software也开始采用Glib开发软件。
KDrive
KDrive也被叫做TinyX,顾名思义,这是一个小型的X server实体,主要是针对embedded Linux的应用的版本。
有别于xorg-server里的其它X server,KDrive并不基于以往的XFree86程序码,而是由Keith Packard所作的新版本;目前,KDrive已被应用在许多embedded system项目中。例如,OpenMoko的framework就是使用 KDrive。
KDrive另外1个特色是,他并不是像典型的X server是在动态时期加载设定,而是在编译时间就做好参数设定。
Xorg-server从7.1开始,已经将KDrive整合进来,只要下载xorg-server 7.1或更新版本的原始码,里头就包含KDrive。KDrive在embedded Linux的应用中,底层部分大多是透过native framebuffer(fbdev、/dev/fb)来做图形的显示。
D-Bus
使用D-Bus取代传统的IPC,并与外部工具做整合。D-BUS本身属于low-level的library(libdbus),实际上,采取glib binding(dbus-glib)来编写程序简化工作。
D-BUS是一种'message bus',未来将取代传统IPC的使用。传统IPC编程,必须将程序架构成monolithic process,因此在process的行为控制,以及application间整合上,都具一定的难度,非常不易于编写”系统”。
引进D-BUS技术后,传统的monolithic process被区分为”pieces of D-BUS services”,每个服务,都可以透过”D-BUS patch”来寻找并调用(invoke);透过D-BUS所建立的框架(framework)或是架构,解决了以往难以整合各种应用程序的困境。此外, D-BUS目前也透过kobject与kernel做整合,如此一来,D-BUS便能轻易整合kernel、application与 desk-top,真正解决以往”系统整合”所遇到的障碍。
udev
/dev目录下摆放所谓的设备文件(device file),在Linux系统底下,硬件都是文件的观念,硬件设备或是子设备都被表示成一个文件。早期我们必须手动在/dev目录下建立所有的文件系统, kernel 2.6透过一个工具叫udev来”动态”产生所需的文件系统。
BlueZ
BlueZ是Linux kernel的Bluetooth protocol stack。
gsmd
Linux手机是Embedded Linux的重要应用项目之1,要能具备”手机”的功能,最基本的规格之一当然就是要支持GSM(Global System for Mobile Communications)标准,也就是我们称之为2G的移动电话标准。
GSM系统使用一种称之为GSM modem的装置(也就是我们耳熟能详的”调制解调器”)来做电话的”外拨(dial out)”与”接听(answer)”功能。因此,Linux手机要能打电话与接听电话,必须将target device外接 GSM modem,并透过GSM modem的指令集(AT command)来对GSM modem下拨号或接听指令。
GSM modem与target device是以UART(RS-232)界面连接,因此需要一个与GSM modem沟通的RS-232通讯程序。在此次OpenMoko开放的源程序里头,就包含一个GSM modem的通讯管理程序,称为gsmd(GSM daemon);此外,gsmd也包含libgsmd的API程序库供开发者使用。
|