"); //-->
iPhone与Google Android都是大家耳熟能详的产品与平台,对OpenMoko还略显陌生,但这是一个源自台湾本土的开放手机平台,本文将针对此平台的概念,及开放源码的应用解决方案深入解析。
Google Android平台于2007年公开后,「开放式手机平台」以及「开放源码手机平台」的概念开始被广泛的讨论。所谓的开放源码(open source)手机是一个完全采用开放源码成果或自由软件(FOSS-free & open source software)的整合平台,因为使用者界面(UI)是手机的重要项目与卖点,因此这些平台都包含专属的 UI framework。
开放手机的概念
继个人计算机后,下一波将会是手机的竞争,但目前手机平台还是处于封闭状态。若有一天手机软件不再被硬件装置限制时,硬件装置的重要性将会逐渐消弱,因为软件开发者可以尽情在同一个硬件装置上客制化、或修改软件,而不需要重新购买新的手机。
1个使用手机的观念转变是「为什么我不能客制化或自由修改我的手机」
每当我们需要特定的新功能时(new feature),就必须重买1支新的手机,虽然我们可能已经习惯于这样的手机通则,但从技术面的角度来说,这是多么令人感到不解的事。假如,能有一个开放的平台,能让我们随心所慾客制化手机软件,或是能自由地更换布景主题,这不是一件令人愉快的事情吗?
这就是未来的手机新生态观念(open mobile ecosystem),即以使用者(end-user)为导向,由使用者自行客制化、或为使用者客制化的手机生产方式。
对于开放手机平台的概念来说,可以从开发者以及使用者的角度来讨论。对开发者(developer)而言,一个完全开放的手机平台可以提供「自由修改」的自由、乐趣与弹性。这表示,由系统级别(如:bootloader、device driver)到应用程序级别(application),都可以被自由修改。
开发者(developer)与制造商(vendor / carrier)可以取得完整的手机平台原始码与完整的开发套件(SDK),并自行对手机产品进行客制化、修改与开发,以满足自身的消费者需求,或提供特殊的资料服务(data service)。
再举一个例子说明开放手机有趣的地方。试想,如果现在你可以订作自己的布景主题(theme),并且可自由变更桌布、图示、颜色等,我们就可以将整支手机客制化成自己的风格了。要达到这样的个人客制化功能,手机软件系统就必须是自由且开放的。OpenMoko平台正是一个这样的手机软件平台。
开源手机的生态系统
开源手机生态系统(open mobile ecosystem)由carrier、handset makers(手机制造商)与end-users(终端用户)构成。OpenMoko平台扮演著连系这3方的角色,这也是OpenMoko的核心价值之一。
※UI 工程
UI(user interface)工程是手机设计最重要的环节,这也是为什么Linux mobile application framework都是重新建立架构,并重新建构应用程序的原因;Linux开源手机并不使用传统的X应用程序。
※Handset Makers
对手机制造商而言,OpenMoko 提供了经济实惠的手机软件。OpenMoko 专案提供高质量的开放源码软件,除了可加速上市时程外,也能针对特定的需要做客制化修改。
※Carriers
对电信业者来说,透过OpenMoko社群,可以充分了解使用者的想法与需求。「内容浏览导向与资料服务」是 Mobile 2.0 最重要的使用习惯变革,可藉由社群讨论,直接取得「新服务」建议。
※End Users
OpenMoko 第一阶段是锁定 Linux 社群里开发者。由于开发者能自由取得手机软件原始码,并加以修改,因此任何「想法」或「创意」都能透过「coding」的方式呈现;以往的手机软件是封闭式的,开发者无法取得SDK(软件发展套件)与原始码。
开放源码手机产品策略
开放源码社群(community)是开放源码手机平台不能忽视的一环,以 OpenMoko为例,Neo1973的实体产品被分为3个释出阶段,每个由OpenMoko所开发的产品,都依循以下的3阶段开发模式来释出:
※Phase 0: Developers Preview (阶段0: 开发者试验)
OpenMoko会自社群里挑选出几位朋友,赠送他们免费的手机。同时,该产品的完整程序码也会公开,并提供下载。OpenMoko也会与社群的人协同开发,并学习社群上的使用者经验。在此时,所有的社群网站也会更新该产品的内容。
Phase 1: Official Developer Launch (阶段1:正式发布)
OpenMoko的实体产品将透过openmoko.com进行全球销售与订购服务。此阶段,OpenMoko会特别针对开放原始码社群的开发者进行推广。
Phase 2: Mass Market Sale (阶段2:大量上市)
开放手机的真正力量并不只是来自于这些装置本身,更来自于与使用者的互动与使用者的参与。
第1个实体产品Neo1973
OpenMoko专案所推出的第1支实体手机称为Neo1973。这是采用 OpenMoko系统的首只实体手机产品,由台湾的大众计算机(FIC)公司制造。
表格:Neo1973硬件规格
图说:Neo1973
根据 OpenMoko 的开源手机产品策略,Neo1973 是专门针对开发者的试验机,目的是进行使用者经验的交流,并与开发者进行互动。
OpenMoko 在今年的 CES 上正式发表下一个新产品「Neo FreeRunner」,这是 Neo1973 的下一代产品,Neo FreeRunner 定位为消费者产品, 并将于今年三月分进行量产。Neo FreeRunner 在硬件上做了一些更新:
·处理器改用 Samsung S3C2442 with 500MHz ·存储器升级为 128MB ·NAND flash 升级为 256MB ·加入 802.11b/g WiFi 硬件 ·二个 3D accelerometer ·SMedia Glamo3662 2D/3D 行动绘图芯片 ·将会支持 850MHz 频带 ·加入 motion sensor(动作传感器)
根据 OpenMoko 的开源手机产品策略,Neo FreeRunner 将会是针对消费者端的正式产品。
OpenMoko Framework
OpenMoko平台采用了许多原本就存在的free software,而这正是FOSS开发模式的最大优势。OpenMoko平台采用知名的OpenEmbedded专案,OpenEmbedded是一种更先进高阶的"build system"。OpenMoko专案最主要是提供「UI Framework」,称为OpenMoko framework,现阶段的 OpenMoko framework 提供以下4个程序库:
·libmokocore核心程序库,提供OpenMoko应用程序间通讯。 ·libmokocore透过D-Bus来整合应用程序。 ·libmokonet通讯程序库,提供GSM、GPS、Bluetooth等功能。 ·libmokopim:PIM(Personal Information Management)程序库,提供个人资料管理功能。 ·libmokoui:UI(user interface)程序库,提供 OpenMoko 主要的界面设计,包含:containers、widgets 与 dialogs。
图说:OpenMoko Framework 架构图(software stack)(资料来源:wiki.openmoko.org)
libmoko 使用到许多现有的FOSS成果,其中最主要的library包含:
图说:OpenMoko framework程序库相依图(dependencies)。(资料来源:wiki.openmoko.org)
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年(或超过)发展,终将迈向成熟,陆续看到一些重量级的软件释出重要的milestone版本,紧接著embedded Linux hackers也针对embedded system的应用为open source/free software进行客制化与调校,显见embedded Linux应用正快速扩张,并且开发模式也在快速改变。Customization & Integration & Tuning会是重要的工作(即平台的观念)。
GNOME Desktop经过customization/integration/tuning成为GNOME Mobile Platform后,对Linux手机的开发再投下震撼弹。从技术角度来看,许多发展中或是成熟的handhelds与Linux mobile phone软件(例如:OpenMoko)专案非常多都是基于GTK+,而GMAE的成立也对相关project产生相当大的助力:
- 强化GTK+,为相关的手机专案打下稳定的基础建设。 - 整合GNOME desktop至手机 - 以GNOME Mobile Platform为分支的商业性质open source/free software project,能更健全地与GNOME desktop或是GMAE developers 协同发展。 - GNOME Mobile Platform基础架构健全优雅(Xorg/Glib/D-Bus),让整合与发展更快速。
开源技术的应用
开源专案以数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程序库供开发者使用。
OpenMoko 程序开发
OpenMoko将手机应用程序以 UI 为导向,并依程序的控制方式,将 application区分为以下Finger 、Stylus、Panel 3大类application。
Finger application是以手指触控为导向的应用程序,比如拨号界面。Stylus application是以笔尖触控为主的应用程序,例如最典型的Stylus application为手写辨试界面。Panel application则是「嵌」在状况栏与程序列的应用程序,例如电池计量图示。
过往的X环境(lagecy X)并不适合mobile device直接使用,特别是对mobile phone而言。由于UI & user experiments是手机的重头戏与特色卖点(unique selling point),所以唯有重新打造自己的UI & application framework,并重写界面,才能展现一台手机的概念与特色。这就是为什么许多Linux mobile phone的framework并不是直接采取porting & integrating现有的xorg-server的原因。
采用Linux做为手机操作系统的另外一个好处是,system-level有非常多的FOSS专案与工具,并且与UI的整合容易。OpenMoko的core也将D-Bus做「封装」,让这一段的程序设计变得更轻松。
OpenMoko的拨号界面:
图说:OpenMoko的拨号界面 1) Application Title 2) Icon / Photo 3) Phone Number 4) Autocompleted Tail 5) Keypad 6) Possible Autocompletions 7) Delete 8) History 9) Dial
OpenMoko的Feed Reader:
图说:OpenMoko的Feed Reader 1) Application Menu 2) Filter_Menu 3) Navigation Area 4) Toolbar 5) Details Area
Qemu
QEMU是一个可以模拟x86、x86_64、ARM、、SPARC、SPARC64、PowerPC、PowerPC64、MIPS、m68k 与 SH-4 处理器的 open source 软件。简单说,QEMU就是一套虚拟机器(virtual machine)的软件。
QEMU提供Full system emulation、User mode emulation 2种模拟模式。Full system emulation模拟完整的系统,即处理器与外围;user mode emulation则是能在不同的处理器平台上,执行其它处理器平台程序。
OpenMoko framework提供「适用于触控屏幕的智能型手机图形界面应用程序框架」,这是一个application framework,能让我们比较简单撰写手机应用软件。
实务上,适用的模拟环境会简化手机软件开发流程。OpenMoko提供了Neo1973 的「装置模拟器」,能模拟整个Neo1973的硬件外围,因此,程序开发时期,也能透过摸拟器验测手机软件功能,以及测试图形界面显示与操作。
OpenMoko 现阶段的方向
OpenMoko在2008 CES上正式发布下1代新产品「Neo FreeRunner」,这是延续第一代产品「Neo 1973」的新版本,并且参考了大量社群开发者的意见回馈所做的改进版本。Neo FreeRunner会是开源手机概念的另外一个实作,该手机并不预载任何的应用软件,出厂时只预载一个安装器(installer),当使用者拿到手机后,可以透过安装器的选单安装「自己想要、也会用到」的应用程序。
图说:Neo FreeRunner
这是首次使用者可以为自己的手机「客制化所需的应用程序」,也是Mobile 2.0概念「使用者参与」与「高度客制化」的新里程碑。
教学研究用途
OpenMoko平台因为开放源码的特性,让OpenMoko平台也很适合使用在教学与研究用途。OpenMoko将GSM的实作也开放源码,让学生可以客制化与进行应用;同时,Neo FreeRunner也将延续Neo1973完整开放源码的做法,让开发者也能取得完整程序码。配合Neo FreeRunner的Wi-Fi、Bluetooth、GSM、GPS、motion sensor与学生天马行空的创意,将可以产生许多的应用。
此外,OpenMoko的下一步则是达成「界面与布景主题」的客制化能力,因此,设计家(designer)也将会在未来的开放手机产业里,扮演非常重要的角色。
360度技术
OpenMoko 专案介绍
OpenMoko 首次现身是在2006年11月8日。Sean Moss-Pultz 在 Amsterdam举行的「Open Source in Mobile」 研讨会上发表了一篇演说,内容是有关于「OpenMoko」这个Linux smart phone专用的application framework与即将推出的Neo1973 Linux智能型手机。此演讲提出一个让人充满无限想象空间的「Mobile 2.0」概念,即开放手机才能真正符合使用者的期望。
OpenMoko提供完整社群平台,让开发者都可以在OpenMoko社群交流,或参与OpenMoko专案。以下是 OpenMoko 的社群网站:
www.openmoko.org:主要网站 wiki.openmoko.org:OpenMoko的Wiki平台 bugzilla.openmoko.org:OpenMoko问题与错误回报平台 planet.openmoko.org:OpenMoko的Blog聚合(aggregation)平台 projects.openmoko.org:OpenMoko提供给社群的计画管理平台 lists.openmoko.org:OpenMoko的mailing-list
OpenMoko 是全世界第1个100%开放源码(open source)的Linux手机软件平台。原本是于FIC(大众计算机)内部的一项计画,目前己经独立成为一家新公司。OpenMoko于2007年2月正式对Linux社群公布原始码。OpenMoko新公司(我本墨客股份有限公司)也于2007年10月23日正式成立,这个全球知名的开放源码 Linux手机专案的研发总部,就在台北的内湖科学园区。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。