1. 程式人生 > >MeeGo開發者(二):MeeGo架構

MeeGo開發者(二):MeeGo架構

參考:
http://meego.com/developers/meego-architecture/meego-architecture-layer-view
http://meego.com/developers/meego-architecture/meego-architecture-domain-view
http://meego.com/developers/meego-architecture/meego-architecture-api-view
http://meego.com/developers/meego-api

  我們重新審視MeeGo的架構,在分層方面,我們看到和MeeGo開發者:何為MeeGo?中的分層有一點點區別。

  在這個圖中,原來的Middle Layer分為兩個部分,一部分是封裝的API,剩下一部分和Linux kernel合成Core OS層。這只是歸類的問題,沒有本質的區別。我個人更喜歡原來的圖,更為明確,不過沒關係,對於開發者,包括應用,服務,核心模組開發,需要關注Core OS,以及其上提供的MeeGo API。我們將根據這個圖來瀏覽MeeGo的架構,而並且根據參考文件的順序,從上向下看(一般我都是從下往上看,有點怪怪)。

UX層

  為不同的平臺提供使用者體驗,MeeGo俄提供手持裝置和上網本的UX,其中上網本使用MX,也就是Clutter/MX,手持裝置採用MTF,Multi-Touch Framework,包括觸控,輸入法,手勢。開發者開發的應用產品也位於此層,使用相應的UI架構和使用者互動事件觸發,對下,呼叫MeeGo API

MeeGo API層

  MeeGo提供的API,也就是開發者可以使用的類庫,這是API大部分來自開源社群的專案,這些專案在下一層Core OS中整合。我計劃在接下來對這些API進行學習,大致曉得能夠呼叫的能力。MeeGo採用QT作為其開發環境。下面是API的圖:

  MeeGo API分為QT和QT Mobility。QT提供類似VC的圖形介面處理並在上面建立我們的應用。QT是完全面向物件,易於擴充套件,允許真正的元件化變成。QT Mobility提供移動裝置的QT化的API。MeeGo 1.1為QT 4.7和Qt mobility 1.0。基於這些API開發的應用,認為是相容的並可以在MeeGo based平臺上執行,這些API的介面也將是前向相容的。因此在MeeGo上的開發,社群建議使用MeeGo API。然則如果MeeGo API,這和Andriod或者iOS有什麼差異。所以儘管社群不建議,但是平臺API是非常非常重要的部分。

  Plateform API。除了MeeGo API外,MeeGo SDK1.1還提供下面介紹的Core Layer的中介軟體的API。社群不建議我們使用這些API,無法保證未來的相容性。

  Qt and Qt Quick間作為開發環境。

MeeGo API services
Service Content
Frameworks for building application UIs
Social and human interaction, connectivity and networking.
Generating and rendering 2D and 3D graphics
Identifying geographical location of the device or, for example, landmarks.
Media playback and recording, streaming
Personal information, such as contacts, calendar entries, and business cards.
Access to device resources
MeeGo API libraries
Library Content
A low-level API for producing hardware-accelerated 2D and 3D graphics
A current version of OpenGL ES. Features a programmable 3D graphics pipeline.
Qt API Qt is a cross-platform application and UI framework. Using Qt, you can write web-enabled applications once and deploy them across desktop, mobile and embedded operating systems without rewriting the source code.
Qt APIs that enable access to many mobile device specific functionalities. Qt Mobility APIs enable cross-platform mobile application development.

Core OS層

 Linux kernel以及所有中介軟體的各開源社群專案,需要關注QT,這是MeeGo官方選擇的跨平臺開發環境。為開發者開發原生應用和web runtime應用提供基礎。通過了解Core OS,可以獲知平臺使用了哪些計算,有哪些API,可以如何進行開發。這個分類和Maemo的類似,比原來Moblin的要清晰。

  通過這個圖,我們可以瞭解MeeGo包括哪些內容。這些和API相對應起來。

Security - Security framework and enablers,提供平臺的安全和使用者身份確認。RPM具有完整性,MD5等安全保護,但是MeeGo究竟針對系統有什麼安全的架構,好像還沒有看到。在MeeGo 1.1的開發環境中,不要對這一塊有太多的期望。
  1. 帳號:提供提供一個使用者帳號儲存的解決方案,可使用者IM,郵件,日曆等,提供Account API。
  2. Single Sign:提供憑證的安全儲存,不同服務的認證外掛架構。
  3. 完整性保護框架:對於執行,配置和資料檔案進行完整權保護。
  4. 證書管理:儲存和驗證安全證書,可使用者email,wifi和瀏覽器。
  5. 軟體釋出安全:軟體釋出包括安裝和更新
  6. 訪問控制框架:強制訪問控制,整個裝置的訪問控制策略
  7. 安全適配:平臺特定的安全和加密的抽象
Data Management - Meta-data storage.獲取和管理檔案的元資料,例如支援媒體檔案的搜尋元資料。這是MeeGo一個比較突出的地方,值得注意。
  1. 內容框架:Track,提供索引,雲資料獲取,對不同資料型別(包括媒體檔案,文件)進行搜尋。
Software Management - Package Management and software lifecycle。用於軟體包的管理,MeeGo的repo都採用rpm包的方式,認為Meego就是採用rpm的管理。軟體的管理對於軟體商店是一個很大的範疇,由於Nokia和Intel各有各的軟體商店,因此這部分可能僅設計軟體的安裝和更新。System - Device State and Resource Policy Managmeent, Sensor, Context。使用者處理裝置的狀態/模式,時間管理,策略控制,開啟服務和感測器抽象,向上層API提供一個抽象的邏輯介面,從而適配底層的不同的廠家的硬體。
  1. 系統管理:裝置狀態和時間管理,例如同步/設定時鐘,待機時間等,不曉得profile,也就是飛航模式是否歸入此類。
  2. 資源策略:基於plugin框架,使用者銀票,食品,系統策略管理
  3. 開啟服務
  4. context Framework:High level APO,使用者裝置的不同場景(上下文)特定。此不甚瞭解,在後面的API小例子中,可能可以更為清晰
  5. 感測器框架:提供一個介面將硬體感測器的API轉換為邏輯感測器,這樣可以相容不同廠家的硬體裝置。
  6. 裝置模式適配:裝置模式相關資訊的硬體抽象層,例如watchdog,溫度感測器。
  7. 觸控和震動適配:對觸控和震動裝置的硬體抽象層。
Location - Location Framework,相關的LBS能力
  1. 定位框架:採用GeoClue開源專案。在Intel工程師方亮的文章有介紹:http://software.intel.com/zh-cn/blogs/2009/03/11/moblin-sdk-geoclue/,摘錄如下:原先在應用程式中要獲取裝置的當前位置,最常見的做法是通過GPS定位,程式設計師往往需要直接訪問串列埠讀取GPS裝置發來的NMEA幀,然後通過分析獲得需要的位置資料。這種做法有2個缺點:第一,工作量大;第二,GPS為某個程序獨佔,其他應用如果也有類似需求就只能說抱歉了。在這種情況下,引入了GPS Daemon,就是Daemon獨佔了GPS裝置,分析NMEA幀獲取位置資訊,並把位置資訊提供給應用程式。這樣GPS Daemon就可以同時為多個程序服務,並且大大減輕了程式設計師的工作量,不用再為編寫分析NMEA資料的程式碼而頭大了。隨著技術的發展,越來越多的定位方式出現在世人面前,程式設計師想在程式中採用多種定位技術結合,自動選取最優定位技術來獲取位置資訊。在這種情況下,GeoClue出現了。GeoClue是架構在D-BUS上的一套提供位置相關資訊的中介軟體,遵循LGPL。這裡的位置相關資訊包括了位置、地址和運動速度等等。GeoClue下有若干Provider提供位置相關資訊。同一個Provider可能提供若干種不同型別的資訊,比如gypsy可以提供位置資訊與速度;不同的Provider也可能提供相同型別的資訊,比如gypsy與hostip都可以提供位置資訊,所不同的是前者的資訊是通過GPS獲得,而後者則是通過網際網路上IP轉經緯度的服務而獲得。GeoClue提供了2套API供應用程式使用,一套是C語言API,另一套是D-BUS API,使用者可以根據實際情況選擇。
  2. 定位適配:對GPS等定位原裝置的硬體抽象層。
Graphics - X11, OpenGL, input and Display drivers.支援2D,3D,包括多國文字渲染和硬體加速。
  1. Font Management:字型管理
  2. 輸入適配:將硬體作為輸入適配抽象,例如硬體按鈕(Power鍵,攝像頭,音量大/小),鍵盤,觸控式螢幕等。
  3. X11
  4. OpenGl ES:提供Khronos介面,支援OpenGL,OpenGLES 和EGL。此外,它還包含特定於平臺的GL/ES驅動和庫的實現。OpenGL是非常重要,MeeGo的API參考中,分為三個部分:OpenGL,QT 4.7和Qt Mobility 1.0。
  5. 顯示和影象適配:Framebuffer和顯示 panel相關的平臺特定的抽象。
Essentials - System essential libraries:提供系統基礎軟體包作為系統工具和庫。Multimedia - Multimedia related enablers and drivers。提供音訊和視訊的playback,流媒體,影象功能,特別是音訊和視訊資料的處理(檢索,解複用,編碼和解碼,尋找等等),包括一下的子系統。最主要的是採用GStreamer來處理多媒體,採用Pluse Audio來處理音訊。
  1. 影象和適配適配:使用GStreamer來處理codec和容器。GStreamer是MeeGo選用的一個重要的開源專案,以前Moblin採用Helex。
  2. 攝像頭適配:採用GStreamer,介面是CameraBin
  3. UPnP:通用的即插即用UPnP stack(音訊和視訊的UPnP profile)
  4. GStreamer: 通過Plunin,提供回放,流媒體和影象功能。
  5. 音訊適配:使用者PulseAudio的平臺特定模組
  6. Pluse Audio:處理銀票的輸入,前後處理,,輸出。作為一個音訊應用和音訊硬體之間的proxy。
Personal Information Management - Calendar, Contacts, Backup, and Sync,在國內,通常PIM業務被運營商忽悠得只剩下網路同步,而且是收費的喲。PIM管理裝置上的使用者資料,包括日曆,聯絡人,人物,獲取裝置的狀況星星,例如裝置位置,cable的狀態,包括下面的子系統:日曆殷勤,聯絡人引擎,郵件引擎,backup框架(這個不甚清楚,backup通常都是通過PC client來進行的,包括匯入和匯出,所以不太明白),同步框架(通過USB,藍芽等傳輸層,可能也包括IP,在不同裝置之間同步日曆,郵件,聯絡人資訊)Communication - VOIP, IM, Presence, Cellular Telephony, and IP Connectivity,提供行動通訊,IP電話,IM,呈現,藍芽和Internet的連線服務。
  1. IP電話,IM和呈現:採用Telepathy開源專案,是一個模組化的通訊框架,通過可插拔的backend協議,實現實時通訊。在阿土作業系統看,Telepathy不太好,後來down了一個pidgin。
  2. Cellular框架:採用oFono開源專案,是基於plugin結構,支援多個平臺和modem。
  3. ConnMan:連線管理器
  4. 藍芽:採用BlueZ以及相關的擴充套件
  5. 通訊適配:用於wifi,藍芽裝置和oFono為不同平臺和modem的外掛的平臺特定的模組。
Qt - Qt, QtWRT, Qt Mobility,提供跨平臺的開發工具,例如QT,QT moblity,QT webkit和QT WebRuntime
  1. Qt:QT常給人一個誤解,就是它是一個UI的工具,QT實際上遠超於此,他是QT應用和UI的toolkit
  2. Qt Mobility
  3. Qt Webkit:MeeGo採用Qt webkit作為layout engine.他可以在應用中顯示web內容(HTML,XML,XHTML,SVG,CSS,JavaScript等)
  4. Web Runtime:提供一個執行web widgets,通過裝置特有的API(提供訪問其他子系統)來擴充套件標準的JS環境
Kernel - Linux Kernel and core drivers:linux核心,無須解釋。

  手機的處理能力沒有pc大,但是多了很多硬體裝置,Haredware Adaptation包括驅動,modem等等。對於特定的硬體,可通過Hardware Adaptation提供基於硬體的相關API,例如特定的感測器,硬體codec的API。硬體適配有下面的內容:

SensorDevice ModeHaptics and Vibra觸控式螢幕和震動馬達AudioCameraImageing和VideoLocationCellularConnectivityInputDisplay and Graphics