http://blog.csdn.net/leo_cao/archive/2007/12/18/1946223.aspx
Openmoko项目是首个提供了整体嵌入式linux开发环境解决方案的一个开源项目,最初由台湾大众电脑集团(FIC)发起并提供赞助,发展至今,体现出开源软件特有的生命力,众多的开发人员和厂商纷纷加入。目前由FIC生产的neo1973智能手机已经可以网购。
Openmoko项目的wiki主页是 http://wiki.openmoko.org/wiki/Main_Page ,其中的内容十分丰富,更新也很快,对openmoko关注的朋友一定要好好阅读其中的内容。由于本文的重点在于对应用程序开发过程的介绍,所以下面只提供几个链接,以便大家查阅:
标志openmoko项目开始的宣言“Free your phone!”:
http://lists.openmoko.org/pipermail/announce/2007-January/000000.html
对openmoko项目的介绍,其中含有图片和录像的链接地址
http://wiki.openmoko.org/wiki/Introduction
项目的mail list, SVN仓库, irc频道:
http://wiki.openmoko.org/wiki/Development_resources
通过下面的地址可以邮购neo1973。不过,有条件的可以让朋友从国外带过回来。有已经购买过的朋友说,需要美元300+运费50美元,还有关税。
https://direct.openmoko.com/
随着openmoko项目的不断发展,其软件也日趋成熟,它可以运行在多款智能手机平台上。请参考这里 http://wiki.openmoko.org/wiki/OpenMoko-supported_hardware 。因为对neo1973的支持性最好,所以本文的介绍也是基于这款智能手机的。它主要有三个系统组件:bootloader,linux kernel和root filesystem。
OpenMoko项目使用OpenEmbedded构建交叉编译环境,不过它开发了一个单独的Makefile文件,使构建过程可以尽量的自动化完成;烧写二进制的系统组件也非常方便,它提供一个主机端dfu-util工具,实现了usb dfu协议,直接使用usb而不是串口com,就可以方便的烧写bootload, kernel和root filesystem;使用Linux内核提供的usb gadget模拟出一个usb network, 在主机端可以通过ssh,方便的联网到手机的系统中,进而就可以把软件更新到手机中;使用ipkg作为软件包管理工具,类似于debian中的dpkg,使用起来更像是apt-get,而且openmoko项目也构建了ipkg软件包仓库,用户可以ssh登录手机后,直接使用ipkg更新系统的各种软件和安装新的软件,更提供了图形化的软件包管理应用程序,更加方便用户管理软件包;提供多种方式的模拟器运行环境,支持qemu,xnest+xoo和xephyr,而且,还支持在windows平台下的模拟运行。
以上所说的openmoko的种种特点还只是它的一部分,实际上,能在它的环境中做更多的事情,比如,QT已近开发出来了使用Qtopia的root filesystem,并可以运行使用;mono社区也有人开发出支持Openmoko的mono软件包。藉由自由开放的优秀特性,更多的改进、移植以及从它生发出来的分支项目都会随着时间的推移而不断出现。
那么目前,对于多数希望通过openmoko熟悉和掌握嵌入式linux开发环境的朋友来说,入手是要首先解决的问题。
在openmoko环境中做开发,大致分成几种,一是应用程序开发,主要使用openmoko已经开发好的一些软件库,设计用户界面和上层的业务逻辑;二是系统程序开发,包括在pc主机平台上的和智能手机目标平台上的,前者包括交叉编译环境的构建、各种辅助工具的开发;后者包括bootloader的开发, 各种硬件驱动程序和协议栈的开发,linux内核的修改和root filesytem的构建;三是硬件的开发,这一方面就不详述了。
针对不同的方向,需要构建的开发环境也不同。如果做Openmoko应用程序的开发,就无需构建完整的openmoko开发环境,只要使用openmoko已经编译好的toolchain开发包就可以了。而如果需要修改openmoko的结构,就需要构建完整的openmoko开发环境,这是相当费时费力的。
而对于一般用户来说,紧紧需要使用dfu-util把三个二进制映像文件,即bootloader(u-boot.bin), linux kernel(uImage.bin)和root filesystem(rootfs.jffs2),烧写到智能手机硬件中,如neo1973,就可以了。这里需要注意的是, bootloader是可选的,而且要注意,如果刷新失败会导致手机无法启动的,所以,一般只要刷新linux kernel和root filesystem就行了。现在,不仅有openmoko官方提供的,也有第三方组织,也即一些爱好者自己制作的。参考链接:
http://wiki.openmoko.org/wiki/Flashing_openmoko 这是总体的说明,如何连接手机和pc和使用dfu-util的方法。
首先要获取dfu-util工具,在这里可以找到:
http://buildhost.openmoko.org/snapshots/2007.11/images/neo1973/
这里自然还有其它三个映像文件可以下载。还有更多的选择:
http://wiki.openmoko.org/wiki/Repositories 这里有官方和第三方提供的二进制映像文件的链接地址。
Linux kernel和root filesystem的映像文件更新很快,后者的更新相对更快些,因为主要功能都是由它提供的,所以这个映像文件可以多获取几个不同的版本,都试一试。
而对于开发人员来说,还是先从openmoko的整体架构入手。请参考链接:
http://wiki.openmoko.org/wiki/OpenMoko
http://wiki.openmoko.org/wiki/OpenMokoFramework
在大致了解了OpenMoko的结构后,可以先从应用程序的开发开始,这不需要构建完整的开发环境。首先从下面链接中获取已经编译好的toolchain, 其中提供了i386和x86_64平台的两个软件包,择需使用。
http://downloads.openmoko.org/toolchains/
至于pc主机端的开发环境,我们可以用debian, ubuntu,redhat,SuSE,Gentoo等,重要的是openmoko所需要的各个软件包是否齐备,debian和ubuntu是首选的平台。
如何使用,以及编写实例,参考这里:
http://wiki.openmoko.org/wiki/Toolchain
http://wiki.openmoko.org/wiki/Building_a_hello_world_application
其中的内容介绍的是比较完备的了。对于已经有了一些在桌面linux上,使用了Gtk库编写过图形化应用程序的朋友来说,应该是能较容易入手的。额外说一点,这个toolchain中没有包含libglade相关的开发库,写过gtk应用程序的朋友知道,这对构建界面来说,会有些麻烦,因为要额外写很多组织界面布局的代码。
随手编写一些小的图形化的测试程序比较简单,而要开发出符合openmoko界面特色的应用程序,需要使用openmoko开发的一些库和了解openmoko整体的界面风格,这是一些需要遵守的规范了。链接在这里:
http://wiki.openmoko.org/wiki/GUI_Style_Guidelines
http://wiki.openmoko.org/wiki/OpenMokoFramework
到现在,我们挺容易就可以在pc上运用交叉编译工具,编译好可以运行在openmoko环境中的实例,对于手上已经有了neo1973手机的人来说,测试过程相当简单,通过在pc主机环境中配制好usb network,就可以在联机后轻松通过ssh的方式,把已经编译好的软件拷贝到手机中运行了。Usb network的建立,这需要两个linux内核提供的模块cdc_ether和cdc_acm,详细的参考这里:
http://wiki.openmoko.org/wiki/Getting_Started_with_your_Neo1973#Getting_shell_access_on_the_phone
http://wiki.openmoko.org/wiki/USB_Networking
那对于多数手上没有手机硬件的朋友,就只好建立模拟运行环境了。这需要构建openmoko的整体环境,必须首先说明的是,这项工作非常依赖网络,耗时,而且在构建过程中会出现的一些错误。不过,我们做技术的,多少都爱啃硬骨头,对吧。
对于建立一个模拟运行的环境,openmoko提供了很多的方式,可以参考这里:
http://wiki.openmoko.org/wiki/Running_OpenMoko_on_PC
http://wiki.openmoko.org/wiki/How_to_run_OpenMoko_Apps_on_PC
而对于openmoko整体开发环境的构建,现在openmoko已经使用了新的2007.2分支,大家在看的时候要注意区别那些针对2007.1的文章,基本上那些已经过时了,不用再看。参考这里:
http://wiki.openmoko.org/wiki/OpenMoko2007.2
http://wiki.openmoko.org/wiki/MokoMakefile
http://www.openembedded.org/wiki/GettingStarted
这里的构建过程,需要仔细阅读上面的几个链接。因为openmoko使用openembedded,所以可以先单独尝试一下使用openembedded构建交叉编译环境,然后再用到openmoko上面。解决构建过程中的错误,其实是件很有意思的活动,也有利于对openmoko整体结构的理解。
另外,在调试方面,尤其是通话上,也可以在控制台中使用GSM和GPRS, 使用AT命令:
http://wiki.openmoko.org/wiki/Hardware:AT_Commands
http://wiki.openmoko.org/wiki/Manually_using_GSM
http://wiki.openmoko.org/wiki/Manually_using_GPRS