Moblin的简单Python程序开发

要换工作了,整理以前做的东西,找到两个moblin相关的东西。

 

启动 MIC Platform 选择 memlow-lpia-ubuntu-hardy target 选择 ububtu-mobile ,自动生成即可,等待的时间那叫一个长啊。这也是工具的好与不好,之前敲命令,交叉编译了 Gnome Mobile 框架的几乎所有模块,吃尽了苦头,但不至于闲着没事干;而由工具自动生成呢,清闲了很多,也不太关心编译的细节,就是盼着赶快编完,好做测试。接下来,生成 Image 文件,选择 Live RW USB

 

此时以为大功告成了,点击 Launch VM ,没有反应 ... 郁闷阿。 Google ,运行 KVM 需要 CPU 支持 Intel VT 才行,手头又没有 MID ,那就试试 Qemu 吧。把编成的映象文件( Launch VM 时选择的文件)直接扔给 Qemu ,结果 “checking device /dev/sda for installation source...” ,问题出在哪呢,把映象文件挂到本地也没有看出个所以然,其实, Qemu 无法直接跑出画面也在预料之中(此处 Qemu 的使用可能存在问题 qemu -hda moblin.img )。由于内核、文件系统由 MIC 生成,使得很多处理的细节无法得知,但编译的文件总是存在的吧,我想完全可以根据 MIC 生成的文件来创建 Qemu 仿真所需的文件。内核可以在 ${Project Name}/targets/${Target Name}/fs/boot 中找到,主要的工作是建立根文件系统的 ext3 文件:

dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0

     mkfs.ext3 1G.img

     sudo mount 1G.img ${Mount Dir} -o loop

接下来就比较简单了,拷贝 ${Project Name}/targets/${Target Name}/fs 下的所有内容到 ${Mount Dir} ,根文件系统就算形成了(没用的内容请删掉,我的目录下有内核的连接)。

 

使用以下命令进行仿真:

qemu -kernel vmlinuz-2.6.24-16-lpia -initrd initrd.img-2.6.24-16-lpia -hda 1G.img --append root=/dev/sda

   

linux 启动过程一切顺利,提示输入用户名和密码 ... 再次挂载根文件系统 1G.img ,删掉 shadow ?还是用文明一点的办法吧,拷贝本机 /etc/shadow ${Mount Dir}/etc 。再次启动,得到了 shell ,可还是没有图形界面(如果 MID 需要手工启动 X ,感觉有点多此一举,问题可能出在配置上,没有深究,跑起 X 再说)。没有 /etc/init.d/gdm ,还是 startx 吧,令人沮丧的事再次发生, EE :no valid modes found” 。没办法,只能再次挂载根文件系统,添加 Modes “800x480”( 仅仅是我添加的模式,不知是否支持其他 ) 。总算见到画面了,也许是费了些周折的缘故吧,觉得 Moblin 的界面还是很漂亮的。

 

使用同样的方法,可以用 Qemu 对其他 Platform 进行仿真(没有一一验证,测试过 netbook-lpia-moblin2 ),下图。

   

之所以选择 Python ,首先,易于移植, Python 解释器把源代码转换成字节码,然后再把它翻译成机器语言并运行,不需要担心如何编译程序,如何连接到正确的库等等,只需要把 Python 程序拷贝到目标机上,它就可以工作了;其次,最近一直在写 Python ,觉得它可以快速地把想法变成现实,就懒得用 C 了;最后呢, Python 是一种极其流行的解释性语言,我们可以看到在 Gnome Mobile 的原型中也保留了 Python 的编程接口。

 

    Python 提供了系统调用、线程、 GTK 等模块,可以利用它搭建原型,验证想法的可行性,当然,它也可以极其方便的应用到 Moblin 平台的开发。开发应用程序之前,配置环境必不可少,毫无疑问,使用的工具是 Moblin Image Creator ,需要保证所需的工具以及库已经安装,包括 Python ,核心的模块( python-dbus python-gtk2 python-hildon ),由于之前选择的平台是 ubuntu ,只需要用 apt-get 就可以轻松的安装这些包了。此时,在 moblin 上开发 Python 的环境以及基本建成了。接下来,在桌面上创建图标,并启动相应的 Python 程序,毫无疑问是 Hello World 。包括几个文件: py-hello-world py-hello-world.desktop py-hello-world.png org.moblin.pyhelloworld.service ,内容比较简单就不做解析了。

 

1           拷贝 py-hello-world.png ${Mount Dir}/usr/share/mobile-basic-flash/icons

 

2           拷贝 Python 程序 py-hello-world ${Mount Dir}/usr/bin

#!/usr/bin/python

 

import dbus, dbus.service, gtk, hildon

 

class DBusObject(dbus.service.Object):

     def __init__(self, app):

         self.app = app

         self.name = 'org.moblin.pyhelloworld'

         self.path = '/org/moblin/pyhelloworld'

         bus_name = dbus.service.BusName(self.name, bus = dbus.SessionBus())

         dbus.service.Object.__init__(self, bus_name, self.path)

                    

class HildonHelloWorld(hildon.Program):

     def __init__(self):

         self.dbus_obj = DBusObject(self)

         hildon.Program.__init__(self)

         self.window = hildon.Window()

         self.add_window(self.window)

         self.window.set_title("Hello World")

         self.window.connect("destroy", gtk.main_quit)

         label = gtk.Label("Hello World! (hildon)")

         self.window.add(label)

         self._add_menu()

         self._add_toolbar()

         self.window.show_all()

      

     def _add_menu(self):

         menu = gtk.Menu()

         mnuItmQuit = gtk.MenuItem("Quit")

         mnuItmQuit.connect("activate", gtk.main_quit)

         menu.add(mnuItmQuit)

         self.set_common_menu(menu)

 

     def _add_toolbar(self):

         toolbar = gtk.Toolbar()

         tlbItmQuit = gtk.ToolButton(gtk.STOCK_QUIT)

         tlbItmQuit.connect("clicked", gtk.main_quit)

         toolbar.insert(tlbItmQuit, -1)

         self.set_common_toolbar(toolbar)

         toolbar.show_all()

 

     def run(self):

         gtk.main()

 

if __name__ == "__main__":

     app = HildonHelloWorld()

     app.run()

 

3           拷贝 py-hello-world.desktop

${Mount Dir}/usr/share/mobile-basic-flash/applications

[ Desktop Entry]

Version=1.0

Type=Application

Encoding=UTF-8

Name=Hello World

Icon=py-hello-world

Exec=py-hello-world

Categories=Mobile;Testing

X-Osso-Service=org.moblin.pyhelloworld

 

4           拷贝 org.moblin.pyhelloworld.service ${Mount Dir}/usr/share/dbus-1/services

[D-BUS Service]

Name=org.moblin.pyhelloworld

Exec=/usr/bin/py-hello-world

 

再次启动 Qemu ,将看到下面的画面(截图的失误啊,左边留了个虚框)。

 

Hildon 确实比较适合触摸屏的设备,容易点击,见下图。

 

    Moblin 的开发,主要是在 Moblin.org 的几个开源项目基础上,针对应用程序的开发,我们可以根据 MID 的特性编写新的应用,或者移植现有的 GTK Python 程序等等。但我个人认为,首先要熟练掌握一套 API ,切勿贪多,因为都是大同小异的东西。以上是我对 moblin 的一点简单认识,还有实践的经验,水平有限,有什么不对的地方希望大家指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值