Moblin的简单Python程序开发

来源:互联网 发布:淘宝天猫优惠券怎么做 编辑:程序博客网 时间:2024/05/17 22:58

Moblin的简单Python程序开发

 

Moblin的全称嵌入式Linux系统发展计划,以启动MID和其他面向消费者设备的目标使用模型。对于移动终端设备,用户体验是至关重要的,比如iPhone的风靡,界面的好坏直接影响到产品的销售。

 

由于个人对ubuntu的偏爱和熟悉,下面的开发过程无论主机环境还是moblin的平台都采用的是ubuntu,然而,moblin 2.0貌似不再使用ubuntu,而仅支持fedora,不知何故。 

 

启动MICPlatform选择memlow-lpia-ubuntu-hardytarget选择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-worldpy-hello-world.desktoppy-hello-world.pngorg.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的特性编写新的应用,或者移植现有的GTKPython程序等等。但我个人认为,首先要熟练掌握一套API,切勿贪多,因为都是大同小异的东西。以上是我对moblin的一点简单认识,还有实践的经验,水平有限,有什么不对的地方希望大家指正。

 

        展望一下未来吧,MID的前景,如果解决了低功耗的问题(这也是Intel的主要贡献),使它能待机三四天,而不是短短的几个小时的话,它将会从玩具变成像如今手机一样的必需品,到那时,恐怕日益衰落的PDA也该寿终正寝了。

 

原创粉丝点击