新闻  |   论坛  |   博客  |   在线研讨会
开放源码手机革命:OpenMoko 技术与概念解析
lionwq | 2008-03-11 10:26:57    阅读:10145   发布文章

嵌入式系统(embedded system)近来最受嘱目的应用,就是智能型手机的领域。去年由iPhone、Google Android以及OpenMoko所带起的手机革命,其主要创新在于「新的手机使用概念」以及「开放式的手机平台」。

        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手机专案的研发总部,就在台北的内湖科学园区。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
淡泊以明志 宁静以致远
推荐文章
最近访客