本文将基于Linux内核的智能手机应用处理器软件简称作Linux手机软件。

1 概述

1.1 为什么要选择Linux平台?

简单说:选择Linux平台的好处就是资金投入少;因为基本上不需要授权费,产品的软件成本也比较低。选择Linux平台的不利之处也是很明显的:
需要很大的研发投入
北京的一家公司有30多人的研发队伍用QT做智能手机,做了快两年,还没有上市。QT是Linux平台上的一种商用图形用户界面(GUI)开发包,也有GPL版本。深圳一家公司用Linux+GTK做智能手机,完成度比较高了,但还没有推向市场。GTK是与QT齐名的GUI开发包,GTK是以LGPL发布的自由软件。虽然产品没有上市,可能有多方面的考虑,但将Linux手机做到产品化的难度也可见一斑。

Linux手机没有统一的应用软件开发平台

Windows Mobile和Symbian都是一家公司主导的,有统一、开放的应用软件开发平台。有很多公司、个人为它们开发应用软件。但是Linux手机没有统一的应用软件开发平台,因此没有大量的第三方应用。这可能是Linux手机最难克服的缺点了。因为这个缺点是Linux作为开源软件所固有的。尽管不少公司或联盟都想统一Linux平台,但至少目前还没有明显的效果。而且统一的Linux应用平台,即使是开源的,似乎也不符合Linux的自由精神。这是自由和集中、开源和商业的一个很难调和的矛盾。

从2007年开始出现的OpenMoko、Android、GPE Phone Edition等开源Linux手机方案开放了自己的参考设计,在一定程度上降低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手机软件开发要做什么?

Linux手机软件开发要做的事情主要包括:
  1. 根据硬件平台移植、调试引导程序。例如:u-boot、vivi等。

  2. 内核移植。选择合适的内核,在自己的硬件平台上跑起来。开发各种外设的驱动程序。

  3. 选择GUI开发包,选择组件通信包,选择其它需要的开源软件包,搭建应用软件开发框架。

  4. 基于应用软件开发框架开发应用程序。除手机界面之外,至少还要开发与基带处理器通信的程序,也就是AP端的AT命令程序。

开发的输出是引导区映像、内核映像、包含完整手机应用软件的根文件系统。手机软件方案还要包括系统升级方案和应用程序更新方案。手机软件通常包含软件包管理功能,例如OpenMoko就使用了iPKG软件包管理器(http://handhelds.org/moin/moin.cgi/Ipkg),可以从手机的图形界面更新应用程序。图1是一个应用软件开发平台的例子:
图1  GNOME Mobile平台
这是基于GTK的方案,组件通信选择了D-Bus。上图也列出了一些最常用的开源软件包。事实上,在手机软件的发布版本中可能要使用几十个开源软件包。其中GUI开发包的选择是一个很关键的选择,因为GUI开发包的选择会影响大部分其它组件的选择。
Android的做法比较特殊,它没有使用Linux平台的GUI开发包。Android系统中包含一个Java虚拟机,它的GUI开发包、应用开发框架(framework)都用java语言实现,然后由Java虚拟机解释运行。下面还会讨论。
1.3.1 GUI开发包的选择
Linux平台的GUI开发包主要有QTGTK两个主流产品。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的未来有较多未知因素(2008年11月已收购)。目前的开源手机方案通常选择GTK。
国内还有一个叫作minigui(http://www.minigui.com/index.php?id=home&L=1)的GUI开发包。原来是开源软件,现在是一家叫作飞漫软件的公司在推广。他们有手机开发平台、浏览器、手写输入的方案,当然都是收费的,也没有GPL版本。minigui目前的应用主要是一些需要简单图形界面的工业控制设备。据飞漫介绍:大唐有一款TD-SCDMA样机采用了ThreadX操作系统和minigui。
从前面的讨论可以看到:Linux手机软件开发尽管可以使用大量开源程序,但要做出手机产品还有很大的工作量。每家公司做一套手机开发平台,各平台的应用程序也不兼容。不少公司和组织通过各种行动以求统一Linux手机开发平台,让第三方应用程序有较好的兼容性。虽然目前还没有什么统一的平台,但确实有一些开源的Linux手机方案。

2 参考设计

前几年网上没有什么开源手机方案,有一些PDA的开源方案,其中比较著名的是Familiar项目(http://familiar.handhelds.org/),这个项目是用Linux实现PDA的操作系统。Familiar项目的目标平台是惠普的iPAQ系列掌上电脑。基于Familiar项目,有两个主要的GUI项目:基于GTK的GPE(http://gpe.handhelds.org/)和基于Qtopia的Opie(http://opie.handhelds.org/cgi-bin/moin.cgi/)。GPE和Opie都是独立的项目,可以应用到使用Linux的其它嵌入式平台。
最近一两年,不断有组织和个人提出“统一”的Linux手机平台方案,主要有:LiMo、OpenMoko、LiPS、Android。下面会分别讨论。此外,还有一些公司有商用Linux手机开发平台:例如前面提到的Trolltech公司的Qtopia。爱可信(ACCESS)的ALP(ACCESS Linux Platform,http://www.access-company.com/products/linux/alp.html)平台。

2.1 平台简介

2.1.1LiMo
LiMo(http://www.limofoundation.org/)是 Linux  + Mobile 的简写。这是一个产业联盟。他们可能会发布一个应用软件平台,不过现在还没有发布任何东西。LiMo的发起会员是:美国摩托罗拉,日本NEC,日本NTT DoCoMo,日本松下移动通信,韩国三星电子,英国沃达丰。
图3  LiMo的方案架构(左边是大框架,右边要细化一些)
图3是LiMo的系统框架。LiMo把开发工作分配给各个成员,图4是他们的工作分配图。
图4  LiMo的开发工作分工
可以看到LiMo计划采用GTKD-Bus

2.1.2OpenMoko
OpenMoko(http://www.openmoko.org/)是台湾大众电脑(First International Computer,FIC) 发起的开源手机项目。网上有一篇关于OepnMoko的详细介绍,可以见http://gb-www.digitimes.com.tw/gate/gb/tech.digitimes.com.tw/ShowNews.aspx?zCatId=A2O&zNotesDocId=0000079427_A6OLFT3HUX3IY4B646C0Z
图6  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
LiPS(http://www.lipsforum.org/)代表Linux Phone Standards Forum。LiPS论坛是法国电信主导的一个行业联盟,目前有33个成员。LiPS论坛的目标也是规范Linux手机软件的开发,它的思路是制定Linux电话终端标准。目前在法国电信北京研发中心任职的黄思源是LiSP论坛的发起者,他在自己的Blog上介绍了论坛的来由(http://blog.sina.com.cn/s/blog_4a09ed6f01000420.html)。
图8  LiPS的任务
如图8所示,LiPS的目标就是指定一套开放、统一的Linux手机API,上图中橘黄色部分就是LiPS希望规范的部分。LiPS把这部分中间件称作LiPS Services Sets。LiPS Services Sets的架构如图9所示:
图9  LiPS的Services Set
其实就我看来,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.4Android
Android(http://code.google.com/android/)是OHA(Open Handset Alliance)组织发布的一个手机软件栈,包括操作系统、中间件和主要的应用。OHA是Google主导的一个行业联盟。图11是Android的架构。
图11  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平台存在以下问题:

    Google目前只开放了SDK,即应用软件的开发接口,没有开放中间件的源代码。

    在没有源代码的情况下,也可以把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的设计很漂亮,但是否实用还有待实践检验。

      Android使用Java既可以利用Java的平台无关性,又可以降低应用软件的开发难度。但无论怎么优化,Java程序的速度是肯定不如原生代码的。Google的Mash-up的思想虽然不算新颖,但在嵌入式环境中投入实用,也是一个新的尝试。设计总有取舍,Google的选择是否合理,还需要实践检验。
      2.1.5其它平台
      除了上述平台,还有一些移动应用开发平台。
      2.1.5.1Nokia的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许可证的开源软件,对商业应用友好。

      2013-03-03

      注:源自原百度博客“至美心"

      谈谈智能手机软件(2):Linux手机软件相关推荐

      1. 什么是linux手机软件?

        linux手机软件即是:智能手机上运用的一种操作系统附带的软件. 通俗点说,它和windows的意义是一样的,但是它是新的一种系统,有比win更好的一些优势. 比如说,由于Linux具有源代码开放.软 ...

      2. 信道检测手机软件 ios_【手机软件】云听:稀有神器,移动音频的国家队,某拉雅资源它都有!...

        Hello,大家好,我是春哥!每天记得打卡哦!感谢每一位小伙伴们的关注和支持!温馨提示:公众号名字改为闪电魔盒应用虽然名字变了,但春哥分享软件的心一直没变!免责声明 大部分资源来源于网络,仅供学习和交 ...

      3. iphone如何信任软件_【手机软件】千禾影院:全新观影神器,支持安卓+iOS,最新、最全、高清、免费!...

        Hello,大家好,我是春哥!每天记得打卡哦!感谢每一位小伙伴们的关注和支持!免责声明 大部分资源来源于网络,仅供学习和交流使用,如有侵权请联系我们删除. 每期文章末尾都会有关键词,在公众号发消息处回 ...

      4. 远程链接linux桌面的软件,远程linux桌面软件

        Windows系统怎么远程登陆桌面Linux 用putty.xshell等软件远程linux的命令行模式大家应该都会了,假如需要远程linux的桌面要怎么办呢?下面本人就讲下在Windows系统平台下 ...

      5. 手机测试磁场的软件,男子用手机软件检测出自家卧室床上电磁辐射爆表

        ↑用手机软件在房间里检测的数据 随后,李先生又将手机放置在电脑旁,数值为60μT,在李先生父母的床上,辐射值又达到了100μT,李先生再次将手机移动到客厅,数值又变为了40μT,李先生告诉记者,&qu ...

      6. 信道检测手机软件 ios_【手机软件】昔日“麻花”特别版,全新观影神器,苹果已上架TF版,支持双端。...

        Hello,大家好,我是春哥!每天记得打卡哦!感谢每一位小伙伴们的关注和支持!免责声明 大部分资源来源于网络,仅供学习和交流使用,如有侵权请联系我们删除. 每期文章末尾都会有关键词,在公众号发消息处回 ...

      7. 就“3.15”晚会关于电脑软件下载和手机软件权限分配方面的建议

        昨天是第39个国际消费者权益日,我观看了3.15晚会全程.今年315晚会以"公平守正 安心消费"为主题,主要围绕"女主播背后的秘密","翡翠直播的江湖 ...

      8. linux如何安装su软件下载,Linux环境软件安装

        Linux下软件安装方法总结: 一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd so ...

      9. linux用卸载软件管理,Linux下软件的安装卸载管理

        一.Linux应用程序组成 1. 普通执行程序文件,保存在"/usr/bin"目录中 2. 服务器执行程序文件和管理程序文件,保存在"/usr/sbin"目录中 ...

      最新文章

      1. Comparative assessment of long-read error correction software applied to Nanopore RNA-sequencing dat
      2. C语言指针和二维数组
      3. 性能监测与优化命令free
      4. golang交叉编译
      5. jquery 找不到live方法解决
      6. Android音频框架笔记 - 上篇
      7. 通俗理解数字签名,数字证书和https
      8. 如何调节idea jvm的最大内存_那个小白还没搞懂内存溢出,只能用案例说给他听了
      9. sql 保留整数_Spark 3.0发布啦,改进SQL,弃Python 2,更好的兼容ANSI SQL,性能大幅提升...
      10. mysql只导出表数据_MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )
      11. 基于改进U-GAT-IT的人像手绘风格转换系统(源码&教程)
      12. TP-link二级路由器配置
      13. php实现自定义中间logo的微信小程序码
      14. Vim插件ale在windows下的安装配置与BUG解决
      15. 粉尘对计算机影响,粉尘对车间设备和产品影响有多大
      16. IDEA跳至行首行末快捷键
      17. Dio 中的拦截器原来有这些用法
      18. 别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2021年最新攻略)
      19. 虚拟定位的实现android,王者荣耀战区哪里分最低 王者荣耀低分战区推荐
      20. 腾讯技术官编写的594页MySQL优化手册,竟意外冲上GitHub调优热榜

      热门文章

      1. 《再见,熊猫TV》这个梦做了3年
      2. 查询图书信息接口 查询图书详情
      3. switch 交换机的基本原理
      4. 你知道PHP的另一种语法吗,我孤陋寡闻了
      5. 个人php发卡系统,荔枝个人发卡系统PHP源码 v2.0.0
      6. java计算机毕业设计建筑劳务监管平台源码+mysql数据库+系统+lw文档+部署
      7. 快讯 | MIT研究人员发明新型机器手;人工智能声呐眼镜:可识别唇语,准确率达 95%
      8. 【Android App】实战项目之仿微信的私信和群聊App(附源码)
      9. 山石岩读丨国之重典:我国关键信息基础设施保护标准体系的现状与进展
      10. UVA 1633 Dyslexic Gollum