谈谈智能手机软件(2):Linux手机软件
本文将基于Linux内核的智能手机应用处理器软件简称作Linux手机软件。
1 概述
1.1 为什么要选择Linux平台?
简单说:选择Linux平台的好处就是资金投入少;因为基本上不需要授权费,产品的软件成本也比较低。选择Linux平台的不利之处也是很明显的:
北京的一家公司有30多人的研发队伍用QT做智能手机,做了快两年,还没有上市。QT是Linux平台上的一种商用图形用户界面(GUI)开发包,也有GPL版本。深圳一家公司用Linux+GTK做智能手机,完成度比较高了,但还没有推向市场。GTK是与QT齐名的GUI开发包,GTK是以LGPL发布的自由软件。虽然产品没有上市可能有多方面的考虑,但将Linux手机做到产品化的难度也可见一斑。
Windows Mobile和Symbian都是一家公司主导的,有统一、开放的应用软件开发平台。有很多公司、个人为它们开发应用软件。但是Linux手机没有统一的应用软件开发平台,因此没有大量的第三方应用。这可能是Linux手机最难克服的缺点了。因为这个缺点是Linux作为开源软件所固有的。尽管不少公司或联盟都想统一Linux平台,但至少目前还没有明显的效果。而且统一的Linux应用平台,即使是开源的,似乎也不符合Linux的自由精神。这是自由和集中、开源和商业的一个很难调和的矛盾。
从2007年开始出现的OpenMoko、Android、GPE Phone Edition等开源Linux手机方案开放了自己的参考设计,在一定程度上降低Linux手机软件的研发难度。但这些方案本身还存在各种问题。即使有比较成熟的参考设计,也需要资深工程师才有应用、定制这些方案的能力。即使作出样机,没有充分的测试,也不敢投入量产。
Linux手机没有统一的品牌,在品牌优势上远低于Windows Mobile或Nokia主导的Symbian,在市场竞争中处于不利态势。
1.2 开源软件的许可证
Linux方案能够降低软件成本的主要原因就是使用了包括Linux内核在内的大量开源软件。开源软件总是按照某个软件许可证发布的,必须遵守开源软件的许可证,才能合法地使用开源软件。有很多种开源软件许可证。最常见的许可证就是GPL和LGPL。许可证有不同的版本。例如Linux内核使用的许可证就是GPLv2。
GPL和LGPL都是GNU组织开发的许可证,可以见:
http://www.gnu.org/licenses/licenses.html。GNU是倡导自由软件的非盈利组织,GNU组织为世界提供了大量优秀的自由软件。GPL代表The GNU General Public License。LGPL代表The GNU Lesser General Public License。尽管这些文本有中文翻译,但法律上生效的还是英文文本。
1.2.1 GPL
我们可以自由地运行GPL软件,例如使用gcc编译器编译商用软件。但如果我们在自己的程序中引用了GPL软件(不管是静态链接还是动态链接),并发布这个程序,我们就必须给获得该程序的人提供相同的权利,通常是也按GPL发布。指责GPL的人根据这个特性将GPL称作病毒。
Linux内核是以GPL许可证发布的。不过,Linus Torvalds(Linux的原作者)在GPL许可证前加了说明:它规定在内核上执行的应用程序不受GPL的制约。所以在Linux上运行的应用软件可以是私有的。但是如果我们修改了Linux内核,就必须以GPL发布修改过的内核。例如Google的Android平台需要修改内核,它在发布二进制映像时就必须发布所修改内核的源代码。当然,Google发布的内核代码只是基于模拟器(QEMU)的内核版本,没有什么参考价值。
关于Linux上的驱动程序模块(需要装载到内核运行)是否要遵守GPL,以前有争议,现在的说法是只要该模块仅使用公开的内核接口,就可以不按照GPL发布。一般而言,GPL不适合于商业软件。除非厂家在用GPL发布软件的同时还能找到盈利模式。确实有不少公司做到了,软件不收费,但服务是收费的。
1.2.2 LGPL
LGPL比GPL友好。我们可以在自己的程序不加修改地引用LGPL程序,只要保留版权声明,还可以将该程序作为私有软件发布。但如果我们修改并引用LGPL程序,我们就不能按照私有软件发布程序,必须遵守LGPL的规定。
除了GPL、LGPL外,常用的许可证还有BSD、MIT、Apache许可证。例如:Google的Android使用Apache许可证。BSD、MIT、Apache许可证都是对商业应用友好的许可证。
1.3 Linux手机软件开发要做什么?
-
根据硬件平台移植、调试引导程序。例如:u-boot、vivi等。
-
内核移植。选择合适的内核,在自己的硬件平台上跑起来。开发各种外设的驱动程序。
-
选择GUI开发包,选择组件通信包,选择其它需要的开源软件包,搭建应用软件开发框架。
-
基于应用软件开发框架开发应用程序。除手机界面之外,至少还要开发与基带处理器通信的程序,也就是AP端的AT命令程序。
这是基于GTK的方案,组件通信选择了D-Bus。上图也列出了一些最常用的开源软件包。事实上,在手机软件的发布版本中可能要使用几十个开源软件包。其中GUI开发包的选择是一个很关键的选择,因为GUI开发包的选择会影响大部分其它组件的选择。
Android的做法比较特殊,它没有使用Linux平台的GUI开发包。Android系统中包含一个Java虚拟机,它的GUI开发包、应用开发框架(framework)都用java语言实现,然后由Java虚拟机解释运行。下面还会讨论。
1.3.1 GUI开发包的选择
Linux平台的GUI开发包主要有QT和GTK两个主流产品。KDE是基于QT开发的PC窗口系统,GNOME是基于GTK开发的PC窗口系统。很多Linux发行版的窗口系统都是在KDE或GNOME基础上开发的。图1的GNOME Mobile是GNOME项目组计划开发的移动应用开发平台,目标是规范基于GTK的移动应用开发,这个项目目前还没有完成。
QT是使用广泛的跨平台GUI开发包。QT的嵌入式版本主要有两个部分:Qtopia Core(原来叫QT/Embedded)和Qtopia。Qtopia Phone Edition是在Qtopia和Qtopia Core基础上定制的手机版本。图2是Qtopia Phone Edition的架构。QCop是该平台的组件通信方式,类似于KDE平台的DCop。
图2 Qtopia Phone Edition架构
Qtopia Phone Edition原来是商业软件,从4.3版本开始发布开源软件,使用GPL许可证。从上图可以看到,Qtopia Phone Edition的完成度也不高,从Qtopia Phone Edition出发到完成一个商用手机还需要做大量的工作,例如选择基于QT的浏览器、邮件、即时通讯程序等。
GTK和QT有两个明显的区别:
-
QT完全采用面向对象方式设计,提供C++开发接口。而且QT对C++的语法进行了扩充,有自己的元对象系统。在QT中,对象通信(进程内通信)所采用的信号/槽机制、运行时类型信息、动态属性等功能都是C++语法不支持的,必须先用QT的moc工具处理成正常的C++源文件,再用C++编译器编译。GTK提供C接口。
-
GTK采用LGPL许可证,比Qtopia更友好。QT是由商业公司,挪威的Trolltech(奇趣)维护的(http://trolltech.com/products/qtopia)。GTK是由开源组织(http://www.gtk.org/)维护的。
最近,Nokia宣布要收购Trolltech公司,QT的未来有较多未知因素。目前的开源手机方案通常选择GTK。
从前面的讨论可以看到:Linux手机软件开发尽管可以使用大量开源程序,但要做出手机产品还有很大的工作量。每家公司做一套手机开发平台,各平台的应用程序也不兼容。不少公司和组织通过各种行动以求统一Linux手机开发平台,让第三方应用程序有较好的兼容性。虽然目前还没有什么统一的平台,但确实有一些开源的Linux手机方案。
2参考设计
2.1 平台简介
2.1.1 LiMo
LiMo(
http://www.limofoundation.org/)是 Linux + Mobile 的简写。这是一个产业联盟。他们可能会发布一个应用软件平台,不过现在还没有发布任何东西。LiMo的发起会员是:美国摩托罗拉,日本NEC,日本NTT DoCoMo,日本松下移动通信,韩国三星电子,英国沃达丰。
图3 LiMo的方案架构(左边是大框架,右边要细化一些)
图3是LiMo的系统框架。LiMo把开发工作分配给各个成员,图4是他们的工作分配图。
可以看到LiMo计划采用GTK和D-Bus。
2.1.2 OpenMoko
图6是OpenMoko的系统架构。其中Finger application指用手指控制的应用程序,Stylus application指用笔控制的应用程序。图7列出了OpenMoko使用的开源组件以及组件间的依赖关系。
图7 OpenMoko使用的开源组件及组件的依赖关系
OpenMoko的GUI选择了GTK,组件通信选择了D-Bus。在OpenMoko平台中,应用框架(包括libmokocore、libmokoui、libmokopim、libmokonet)、应用程序部分是OpenMoko组织开发的,其它部分使用开源软件。
OpenMoko是目前最开放的开源手机方案。OpenMoko项目还作了样机。第一版样机Neo1973是为开发者做的,可以从网络(
https://direct.openmoko.com/)购买。第二版样机Neo FreeRunner计划在3月份投入量产,这版样机是针对最终消费者的。OpenMoko已于2007年10月23日成立公司(我本墨客股份有限公司),研发总部在台北的内湖科学园区。
OpenMoko的软件虽然很接近产品,但还不算成熟。目前存在有时漏接电话,有时打不出去的问题。估计这应该是AT命令部分的问题(gsmd模块)。Trolltech 公司的Lorn Potter 将Qtopia 4.3.1移植到OpenMoko机器上,可以正常运行,通话功能也比较稳定。
除了前面提到的代码(暂时)还不成熟,OpenMoko还有以下缺点:
-
文档太少。当然这也是开源软件的一个特点。开源软件的开发者通常比较少,他们更愿意把时间花在代码上而不是文档。因为代码发展很快,即使有文档,也很难与代码同步。
-
OpenMoko把主要精力放在了整机软硬件设计上,对统一的API接口没有给予充分的重视。这一点与LiPS、Android、Nokia的Maemo等有很大区别。其实开源手机方案应该将统一应用软件开发平台作为一个主要目标。虽然很难实现,但Linux手机确实需要一个统一的应用软件开发平台。即使是三国鼎立,也比诸子百家要好。
2.1.3 LiPS
如图8所示,LiPS的目标就是指定一套开放、统一的Linux手机API,上图中橘黄色部分就是LiPS希望规范的部分。LiPS把这部分中间件称作LiPS Services Sets。LiPS Services Sets的架构如图9所示:
其实就我看来,LiPS以标准规范Linux手机的想法是很难成功的。一个优秀的、开放的参考设计比文档更能吸引人,更有可能成为事实标准。不过,LiPS的文档写得不错,如果既有规范的文档,又有开放、完善的参考设计,就更容易胜出。
LiPS确实有一个参考设计,叫作GPE Phone Edition(
http://gpephone.linuxtogo.org/),记作G(PE)²。但G(PE)²的设计目标不是一个完整的产品,它只提供符合LiPS的部分参考设计。所以,G(PE)²的完成度要低于OpenMoko。图10是G(PE)²的架构:
图10 GPE Phone Edition的架构
G(PE)²的GUI开发包用的也是GTK,组件通信用D-Bus。G(PE)²项目的公开资料更新较慢。
2.1.4 Android
前面也介绍过,Android的一个重要特点就是它的应用框架和GUI库都用Java语言实现。Android内部有一个叫作Dalvik的Java虚拟机,Java程序由这个虚拟机解释运行。Android平台的应用程序也必须用Java语言开发。网上有评论说Android的虚拟机使用Apache的Harmony类库。Harmony类库是Apache组织开发的开源Java类库,用Apache许可证发布。
Android应用框架采用了Mash-up的组件模型:组件(Activity)向系统注册自己的功能,每个组件要使用其它组件的服务时提出自己的要求(intent),系统根据intent在已登记的组件中确定合适的组件。Android平台的API文档很完善。在我看来,基于Android平台开发应用软件应该是一件轻松、愉快的事情。但是,选择Android平台存在以下问题:
在没有源代码的情况下,也可以把Android移植到兼容的开发板(CPU核采用ARMv5指令集)上,但因为不能定制而无法将其用于实际产品。Google现在没有明确什么时候发布中间件的源代码。其实Google也没有明确说过将发布中间件的源代码。
Google说Android是“the first complete, open, and free mobile platform”。在英文中“free”既可以解释成“自由”,也可以解释成“免费”。如何解释完全在于Google。我觉得Google最想抓住的是应用软件的开发者,即希望公司和个人都学习它的SDK,为它的平台开发应用软件。Google肯定会和厂家合作,开发支持Android平台的手机。但Google是否会在网络上完全开放中间件代码,还是个未知数。
如果Google完全开放这个平台,那么与J2ME类似,各公司肯定会在这个平台上添加自己的扩展,使各平台不能完全兼容。所以,Google很可能用商业手段来保证Android平台的一致性。
Android使用Java既可以利用Java的平台无关性,又可以降低应用软件的开发难度。但无论怎么优化,Java程序的速度是肯定不如原生代码的。Google的Mash-up的思想虽然不算新颖,但在嵌入式环境中投入实用,也是一个新的尝试。设计总有取舍,Google的选择是否合理,还需要实践检验。
2.1.5 其它平台
除了上述平台,还有一些移动应用开发平台。
2.1.5.1 Nokia的Maemo
Maemo(
http://maemo.org/intro/)是Nokia推出的基于Linux的移动应用开发平台。目前用于Nokia的N800、N810等终端设备。N800、N810不是手机,它们被称作互联网设备(Internet Tablet)。不过相信Nokia随时可以将Maemo方案用于手机。目前没有做只是出于商业考虑。
图12 使用Maemo的N810和Maemo平台架构
Maemo也提供了完善的SDK、详尽的文档,组织了Maemo社区,以图吸引个人和公司为Maemo平台开发应用软件。Hildon是Nokia为Maemo平台设计的应用框架。Maemo的浏览器是在Mozilla基础上开发的嵌入式版本,做得比较完善。这是一个开源项目(
http://browser.garage.maemo.org/)。
2.1.5.2 Poky
Poky(
http://www.pokylinux.org/)是基于OpenEmbedded的一个Linux编译、发布和开发环境,原来是OpenedHand组织内部用来做设备软件开发、配置、调试和性能分析的工具。Poky环境包含了一个实验性的项目Sato,Sato是一个基于GTK+/Macthbox的PDA/智能手机的UI方案。
图13 Poky包含的Sato是一个试验性的PDA/智能手机的UI方案
Poky的blinky版本包含了Sato 0.1版。Sato还处于开发的早期阶段。Poky是采用MIT许可证的开源软件,对商业应用友好。
分享到:
相关推荐
智能手机操作系统是现代移动设备的核心,它们为用户提供交互界面和丰富的功能。本文主要分析了当前智能手机操作系统的现状,并探讨了一个新兴的、经济实惠的解决方案——SmartNX Mobile。 首先,市场上主流的智能...
正当移动电话制造商拥抱Linux作为下一代智能电话的平台的时候,开发和布置这样的设备还在面临着技术上的挑战,特别的是OEM们必须保证电话具有电源管理,快速引导,集成的无线接口,吸引人的小尺寸GUI以及各种的PIM...
在当今数字化世界中,嵌入式系统广泛应用于各种设备,如智能手机、智能家居设备、工业自动化系统以及医疗设备等。对于想要进入这个领域的初学者来说,了解并掌握嵌入式Linux开发的基础知识至关重要。 首先,我们来...
ARM9是ARM公司的一款微处理器内核,广泛应用于嵌入式系统中,如路由器、智能手机和平板电脑等。在ARM9架构的设备上运行Linux,需要对代码进行交叉编译,确保程序能在目标硬件上正确执行。开发过程中,开发者可能使用...
4. **移动通信**:随着3G网络的推广,智能手机开始进入公众视野,诺基亚、摩托罗拉和苹果的iPhone 3G在这一年具有里程碑意义,预示着移动设备将更加智能和联网化。 5. **网络安全**:随着网络应用的普及,网络安全...
在IT行业中,嵌入式系统扮演着至关重要的角色,它们是现代科技设备的心脏,从智能手机到自动驾驶汽车,无处不在。"天地伟业_嵌入式-常用知识&面试题库_大厂面试真题.rar"这个压缩包文件显然为准备嵌入式系统的面试者...
Android是由Google主导开发的开源移动操作系统,广泛应用于智能手机、平板电脑和智能电视等设备。它基于Linux内核,提供了一个完整的软件堆栈,包括操作系统、中间件和关键应用。学习Android开发,你需要了解它的...
Android是一个基于Linux内核的操作系统,专为移动设备设计,如智能手机和平板电脑。它由Google公司领导的开放手机联盟开发并维护。Android系统主要由以下几个层次组成: 1. **Linux内核**:作为基础,提供了硬件...
接下来,我们来谈谈`Z20`,这是一个设备型号,可能是一款智能手机或者平板电脑,具备扩展存储能力,支持外部SD卡(`extsd`)和内部NAND闪存(`sdnand`)。在Android系统中,`extsd`通常指的是通过物理插槽添加的外部...
Android是一种基于Linux的操作系统,广泛应用于智能手机和平板电脑。开发者使用Java或Kotlin语言,通过Android Studio集成开发环境(IDE)进行编程。源码中的每个文件都是构建应用程序不可或缺的部分,包括布局文件...
此外,随着AI技术的发展,图像识别和分析已经成为人工智能的重要组成部分,如人脸识别、自动驾驶等。 最后,我们来谈谈压缩包子文件“images-main”。这个文件名很可能是一个包含多个图片文件的压缩包,可能是为了...