歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Moblin的簡單Python程序開發

  Moblin的全稱“嵌入式Linux系統發展計劃”,以啟動MID和其他面向消費者設備的目標使用模型。對於移動終端設備,用戶體驗是至關重要的,比如iPhone的風靡,界面的好壞直接影響到產品的銷售。

  由於個人對ubuntu的偏愛和熟悉,下面的開發過程無論主機環境還是moblin的平台都采用的是ubuntu,然而,moblin 2.0貌似不再使用ubuntu,而僅支持fedora,不知何故。

  啟動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的一點簡單認識,還有實踐的經驗,水平有限,有什麼不對的地方希望大家指正。

  展望一下未來吧,MID的前景,如果解決了低功耗的問題(這也是Intel的主要貢獻),使它能待機三四天,而不是短短的幾個小時的話,它將會從“玩具”變成像如今手機一樣的必需品,到那時,恐怕日益衰落的PDA也該壽終正寢了。

Copyright © Linux教程網 All Rights Reserved