openmoko有三个版本,一个是基于GTK的 , OM-2007.2 , 而OM2008是基于qt extended , 2009是基于s3c2442的android平台。
对于 openmoko的GTK版本,openmoko已出了样机。
(一) 构建
openmoko的代码在 下,openmoko 可以在OE环境里构建,不过我选择了poky ,在poky 3.2环境的编译如下 :
1 缺省的openmoko是关闭的,所以必须修改local.conf,以打开openmoko
BBFILES = "\
${OEROOT}/meta/packages/*/*.bb \
${OEROOT}/meta-extras/packages/*/*.bb \
${OEROOT}/meta-openmoko/packages/*/*.bb \
${OEROOT}/meta-moblin/packages/*/*.bb \
"
BBFILE_COLLECTIONS = "normal extras openmoko moblin"
# BBFILE_PATTERN_normal = "^${OEROOT}/meta/"
BBFILE_PATTERN_extras = "^${OEROOT}/meta-extras/"
BBFILE_PATTERN_openmoko = "^${OEROOT}/meta-openmoko/"
# BBFILE_PATTERN_moblin = "^${OEROOT}/meta-moblin/"
# BBFILE_PRIORITY_normal = "5"
BBFILE_PRIORITY_extras = "5"
BBFILE_PRIORITY_openmoko = "5"
# BBFILE_PRIORITY_moblin = "5"
由于openmoko引用了一些外部库,当用SVN去取openmoko package代码的时候,这些package的 svn resposity 会引用外部的库,但是有些外部库文件的URI已经变化了,比如libhito.
所以这导致了fetch的失败。因此,在bitbake里面添加 --ignore-externals选项。
2 修改poky-image-openmoko.bb ,先编译好poky部分 (GNOME MOBILE + webkit ,PIM等)
bitbake poky-image-openmoko
此时用qemu 模拟可以看到很多GNOME Mobile的应用,包括游戏,浏览器,终端 ,{BANNED}中国第一次启动的时候还遇到OOM Killer , 第2次就好了,第2次启动也比{BANNED}中国第一次快
3 加上 openmoko-today2
此时会出错,主要是2个外部的库没拿下来
从 把libkoto下载下来
svn co -r1898 把libtaku下载下来
然后再 bitbake poky-image-openmoko 将 openmoko-today2编译成功
4 加上openmoko-dialer2
此时又会出错,因为dialer也依赖一个外部库的libhito ,
而链接 已经不存在了,所以从网上下载了一个 contacts-snapshot-0.5 ,然后把里面的libhito拷贝到openmoko-dialer2目录下
5 加上 openmoko-theme-standard2
6 加上 openmoko-contacts2
contacts 其实就是外部的hito ,但是 和openmoko-dialer2一样 , hito已经不存在了
所以修改为:
SRC_URI = ""
S = "${WORKDIR}/contacts-snapshot-0.5/"
此时模拟器还可以启动
7 加上 openmoko-session2
此时模拟器启动就出现问题了,所以不加openmoko-session2 ,这个bb文件主要是加上了2个2进制文件session , matchbox-session,而没有源码,所以不能启动X的原因是这2个可执行文件有问题
8 加上 openmoko-icon-theme-standard
在stamps下面 rm openmoko-icon-theme-standard-0.0+svn20100*
然后 bitbake poky-image-openmoko
9 加上 openmoko-mediaplayer2 openmoko-browser2
10 加上 oepnmoko-messages2
需要外部的libhito
而链接 已经不存在了,所以从网上下载了一个 contacts-snapshot-0.5 ,然后把里面的libhito拷贝到openmoko-dialer2目录下
至此,基本上openmoko的包都构建完了,除了一些小的应用,比如terminal , calculator等
(二) 架构
openmoko 是其实是基于GNOME Mobile (X +GTK + MatchBox), 它和poky的sato一样 , sato是在GNOME MOBILE的基础上添加了PIM,web application , music player 而已 。
而openmoko的web engine也是webkit . 声音playback也是基于 gstreamer .
应用主要有 Contacts , dialer , messages , media player , browser
Contacts : 电话本
Uses e-d-s to retrieve contact information
Uses MokoJournal to retrieve call history per contact
Uses PhoneKit to initiate phone calls
Dialer : 拨号程序,可以看call logs
打电话用的是 phonekit , 看call logs用的是 mokojournal
messages : 短消息
中间层主要有: libmokoui , libmokojournal,PhoneKit,gsmd , neod , gstreamer , gnome mobile ,libmokopim
gsmd : 这是openmoko电话的GSM后台程序,管理传统电话的电话部分(语音/SMS/GPRS),
Neod : 除了 gsmd外的其他设备功能,比如buttons , 电源管理。
libmokoui
# UI (libmokoui): It provides the UI programming capabilities to the platform and makes use of GTK and ALSA (for applications interacting with audio devices). The standard GTK has been customised to provide a rich mobile application-development experience.
PIM : libmokopim
# PIM (libmokopim): Provides the core PIM (personal information management) capabilities. It makes use of the embedded Evolution data server.
libmokojournal:
Manages communication history such as call logs and SMS messages. SMS messages are stored in the journal. Listens to the journal for events such as new sms.
Uses e-d-s (Evolution Data Server) calendar journal component to store and retrieve data
PhoneKit :
A new phone functionality d-bus service for GUI applications.
Exposes a high level d-bus api to phone commands and events. Very similar to current d-bus functionality exposed by Dialer (for example, Dial function and incoming-call event).
Updates the journal on gsmd initiated events such as incoming sms or voice mail.
Produces system model GUI dialogs for call handling (incoming, outgoing, in call) and manages pin entry on network registration.
Diagram:
(三) 状态
openmoko的GTK版本还不完善,主要有:
1) 短消息不能发送
2) 有时候会漏接电话等
3) 浏览器什么功能都没有
4) 界面太土了
其实把openmoko作为一个解决方案,还不如把它看成给予GNOME MOBILE的一个产品,而产品一直没有完善的原因是平台还不够完善,所以很多功能没有继续下去,openmoko认为主要问题是GTK和gsmd,因此在2008年的版本里,用qtopia替代了GTK,
而gsmd在om-2008.8被qtopia mobile stack所替代 。
(四) 可取之处
openmoko实现了DFU , 在很多产品中,需要通过USB来更新firmware , 不过DFU 协议为control 传输,这个速度太慢,只适合更新那些代码量很小的firmware , 因此在做产品时,需要将openmoko的dfu实现更改为USB bulk传输