文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)10-0030-04
MeeGo嵌入式操作系統(tǒng)由英特爾和諾基亞倡導(dǎo),旨在為手機(jī),、上網(wǎng)本,、平板電腦、互聯(lián)網(wǎng)電視,、車載信息娛樂系統(tǒng)和多媒體電話等智能設(shè)備提供操作系統(tǒng)解決方案,,并且有助于這些設(shè)備實(shí)現(xiàn)無縫集成。MeeGo融合了英特爾Moblin與諾基亞Maemo系統(tǒng)的精華,,繼承了分別掌握底層架構(gòu)和終端設(shè)備優(yōu)勢(shì)的兩大巨頭的優(yōu)秀基因,。該嵌入式操作系統(tǒng)基于Linux架構(gòu),不僅支持所有x86處理器平臺(tái),,還跨平臺(tái)支持非x86架構(gòu)的設(shè)備,。面向跨平臺(tái)的多元化設(shè)備,MeeGo為開發(fā)者提供了一致性的API,,選擇Qt框架作為應(yīng)用程序的開發(fā)工具[1],。MeeGo SDK1.x中集成了基于Qt 4.7.x的Qt Creator 2.0,并引進(jìn)了功能強(qiáng)大的Qt Quick,,使得應(yīng)用程序更加快速流暢地在MeeGo平臺(tái)上運(yùn)行,。
1 MeeGo嵌入式操作系統(tǒng)架構(gòu)
1.1 MeeGo的分層模型
MeeGo嵌入式操作系統(tǒng)的分層結(jié)構(gòu)如圖1所示,共包括三層:用戶體驗(yàn)層,、應(yīng)用開發(fā)層,、操作系統(tǒng)核心層。
用戶體驗(yàn)層為不同的終端設(shè)備提供不同的應(yīng)用框架,,比如上網(wǎng)本采用了Clutter和MX界面開發(fā)庫(kù)繪制界面,;手持設(shè)備采用了MeeGo特有的觸控框架,包括觸摸,、輸入法,、手勢(shì),為用戶提供觸控體驗(yàn),。MeeGo用戶體驗(yàn)層集成了個(gè)人社交網(wǎng)絡(luò)服務(wù)和底層基礎(chǔ)庫(kù),,全面支持網(wǎng)絡(luò)服務(wù)、多媒體服務(wù),、最新電話技術(shù)等標(biāo)準(zhǔn),。強(qiáng)大的工具和動(dòng)畫效果簡(jiǎn)化了用戶界面的定制,。
應(yīng)用開發(fā)層涵蓋了MeeGo的應(yīng)用開發(fā)接口,目前MeeGo release版本包含了Qt4.7,、Qt mobility 1.0,、Open GL ES 1.1和Open GL ES 2.0相關(guān)的類和接口。
操作系統(tǒng)核心層包含了所有中間件和操作系統(tǒng)的服務(wù)域以及硬件適配層,。內(nèi)核方面,,MeeGo 1.0采用了Linux Kernel 2.6.33,支持多任務(wù),、本地應(yīng)用開發(fā)框架,、動(dòng)畫效果設(shè)計(jì)的開發(fā)框架、3D加速,、最新Linux文件系統(tǒng)(btrfs)等,。MeeGo 1.1支持Linux Kernel 2.6.35,新增支持Intel Atom Z6xx處理器和GCC4.5工具鏈,。MeeGo 1.2支持Linux Kernel 2.6.37,,新增Policy 開發(fā)框架和電源管理功能。
1.2 MeeGo的域視圖
MeeGo嵌入式操作系統(tǒng)的域視圖及各域的具體內(nèi)容如圖2所示[3],,共包括12個(gè)域:安全域,、系統(tǒng)域、個(gè)人信息管理域,、軟件管理域,、數(shù)據(jù)管理域、多媒體域,、定位服務(wù)域,、通信域、內(nèi)核域,、核心組件域,、Qt域和圖形域。
內(nèi)核域是應(yīng)用程序和硬件層之間的橋梁,,支持MeeGo的硬件平臺(tái)需要提供三類相關(guān)組件(內(nèi)核驅(qū)動(dòng),、核心架構(gòu)組件、內(nèi)核配置文件),。內(nèi)核驅(qū)動(dòng)是一套需要與硬件進(jìn)行交互的驅(qū)動(dòng)程序,,例如MeeGo notebook 1.1中集成了攝像頭、USB,、聲卡,、顯卡、藍(lán)牙及觸摸屏等硬件驅(qū)動(dòng)程序;核心架構(gòu)組件是一個(gè)額外的軟件包,,將它附加到內(nèi)核中以支持某些硬件的相關(guān)功能(如固件),;內(nèi)核配置文件為特定設(shè)備提供了詳細(xì)的配置信息,,包括設(shè)備架構(gòu),、處理器類型、設(shè)備驅(qū)動(dòng)配置菜單,、網(wǎng)絡(luò)支持以及內(nèi)核調(diào)制選項(xiàng)等,。
Qt域提供了跨平臺(tái)開發(fā)工具(Qt、Qt Mobility,、Qt Webkit,、Qt WebRuntime),其中Qt提供了應(yīng)用程序和用戶界面的開發(fā)工具包,,Qt Mobility為MeeGo提供了開發(fā)移動(dòng)應(yīng)用程序的接口,,Qt WebKit能夠快速創(chuàng)建包含實(shí)時(shí)網(wǎng)絡(luò)內(nèi)容和服務(wù)的應(yīng)用程序。
2 搭建開發(fā)環(huán)境
2.1 Linux下安裝配置Qt Creator
在Linux和Windows環(huán)境下均可以開發(fā)MeeGo應(yīng)用程序,。鑒于MeeGo操作系統(tǒng)是基于Linux內(nèi)核并且是完全開源的,,故選擇了在Ubuntu 10.04 LTS系統(tǒng)上搭建MeeGo應(yīng)用程序的開發(fā)環(huán)境。
為搭建MeeGo應(yīng)用程序開發(fā)環(huán)境,,在Ubuntu 10.04 LTS上安裝配置QtCreator需要4個(gè)步驟,,如圖3所示。
(1)配置軟件庫(kù)安裝源
①添加軟件源:
deb http://repo.meego.com/MeeGo/sdk/host/repos/ubuntu/10.04//
②為軟件倉(cāng)庫(kù)增加公鑰:
$ gpg --keyserver pgpkeys.mit.edu --recv 0BC7BEC479FC1F8A
$ gpg --export --armor 0BC7BEC479FC1F8A | sudo apt-key add -
③更新軟件源:
$ sudo apt-get update
④測(cè)試軟件源是否正確安裝:
$ apt-cache policy madde
(2)安裝MeeGo SDK
$ sudo apt-get install meego-sdk-ia32
$ sudo apt-get meego-sdk-armv7l
如果開發(fā)基于x86架構(gòu)設(shè)備的應(yīng)用程序,,相應(yīng)的SDK需要安裝meego-sdk-ia32,;如果開發(fā)基于ARM架構(gòu)設(shè)備的應(yīng)用程序,則相應(yīng)的SDK需要安裝meego-sdk-armv7l,。
(3)安裝MeeGo目標(biāo)機(jī)交叉編譯環(huán)境
①下載并安裝目標(biāo)機(jī)交叉編譯環(huán)境的壓縮文件包:
$ sudo mad-admin create -f meego-netbook-ia32-1.1.2
②檢查目標(biāo)機(jī)交叉編譯環(huán)境是否正確安裝:
$ mad -t meego-netbook-ia32-1.1.2 pscreate -t qt-simple qthello
$ cd qthello
$ mad -t meego-netbook-ia32-1.1.2 qmake
$ mad -t meego-netbook-ia32-1.1.2 make
③檢查目標(biāo)機(jī)交叉編譯環(huán)境是否正確運(yùn)行:
$ file build/qthello
(4)配置Qt Creator
添加MeeGo交叉編譯器,,打開Qt Creator,選擇Tools > Options > Qt4 > Qt Versions,。點(diǎn)擊“添加”按鈕,,路徑選擇為usr/lib/madde/linux-i686/targets/meego-netbook-ia32-1.1.2/bin/qmake,點(diǎn)擊Rebuild按鈕,。如果不進(jìn)行交叉編譯,,則可以添加MeeGo SDK 的Qt版本,步驟同上,,但路徑選擇為/opt/meego/meego-sdk-qt/bin/qmake,。
2.2 搭建基于Atom D510嵌入式實(shí)驗(yàn)平臺(tái)的開發(fā)環(huán)境
Atom D510處理器針對(duì)MeeGo操作系統(tǒng)進(jìn)行了優(yōu)化,在Atom D510嵌入式實(shí)驗(yàn)平臺(tái)下搭建MeeGo應(yīng)用開發(fā)環(huán)境需要4個(gè)步驟,,如圖4所示,。
(1)在Atom D510平臺(tái)上安裝MeeGo上網(wǎng)本操作系統(tǒng)
由于Atom D510嵌入式實(shí)驗(yàn)平臺(tái)提供了UBS接口,最簡(jiǎn)單快捷的安裝方式是使用U盤安裝。首先,,下載U盤鏡像制作工具Win32DiskImager.exe和MeeGo上網(wǎng)本鏡像文件,;其次,制作MeeGo上網(wǎng)本系統(tǒng)啟動(dòng)U盤,;最后,,用該U盤重啟實(shí)驗(yàn)平臺(tái),進(jìn)入MeeGo上網(wǎng)本系統(tǒng)安裝界面進(jìn)行安裝,。
(2)安裝OpenSSH sever
①安裝OpenSSH sever,。從主機(jī)Qt Creator向遠(yuǎn)程實(shí)體設(shè)備部署程序時(shí),需要進(jìn)行文件拷貝,,因此需要在實(shí)體設(shè)備上安裝OpenSSH服務(wù),。
$ sudo zypper install openssh-server
②啟動(dòng)SSH服務(wù):
$ sudo /etc/init.d/sshd start
③將OpenSSH加入初始化序列中,開機(jī)自動(dòng)啟動(dòng):
$ sudo chkconfig --add sshd
(3)安裝gdbserver
如果進(jìn)行遠(yuǎn)程調(diào)試應(yīng)用程序,,需要安裝gdbsever,。
$ sudo zypper install gdb-gdbserver
(4)配置實(shí)際設(shè)備連接
打開Qt Creator,選擇Tools→Options→Projects→MeeGo Device Configurations,。點(diǎn)擊“添加”按鈕,,添加一個(gè)程序運(yùn)行的實(shí)際設(shè)備。設(shè)置Device type為Real Device,、Authentication type為Password,、Username為root、Password為meego,。SSH使用默認(rèn)端口號(hào)22,,Gdb Server使用默認(rèn)端口號(hào)10000(如果該端口被占用可使用其他端口)。
除此之外,,如果開發(fā)主機(jī)與實(shí)際設(shè)備使用交叉網(wǎng)線進(jìn)行通信,,則兩者的IP地址必須配置在同一網(wǎng)段內(nèi)。如果使用局域網(wǎng)進(jìn)行通信,,則開發(fā)主機(jī)與實(shí)際設(shè)備接入同一局域網(wǎng)即可,。
2.3 QEMU虛擬機(jī)下搭建開發(fā)環(huán)境
在QEMU虛擬機(jī)下搭建開發(fā)環(huán)境,需要安裝MeeGo運(yùn)行時(shí)(即運(yùn)行在QEMU中的MeeGo操作系統(tǒng)鏡像),。安裝配置QEMU運(yùn)行時(shí)需要4個(gè)步驟,,如圖5所示。
(1)安裝MeeGo運(yùn)行時(shí)
$ sudo mad-admin create -f -e meego-netbook-ia32-qemu -1.1.2-runtime
如果運(yùn)行時(shí)安裝成功,,則執(zhí)行下述指令:
$ sudo mad-admin list runtimes
屏幕將顯示meego-netbook-ia32-qemu-1.1.2-runtime (installed)安裝MeeGo SDK,。
(2)在Qt Creator中配置MeeGo仿真器
打開Qt Creator,選擇Tools→Options→Projects→MeeGo Device Configurations,。點(diǎn)擊“添加”按鈕,,為仿真器添加一個(gè)runtime(運(yùn)行時(shí)),。設(shè)置Device type為MeeGo Emulator、Authentication type為Password,、Username為root,、Password為meego。SSH使用默認(rèn)端口號(hào)為6666,。Gdb Server使用默認(rèn)端口號(hào)為13619(如果該端口被占用可使用其他端口),。
(3)啟動(dòng)MeeGo運(yùn)行時(shí)
$ sudo mad remote –r meego-netbook-ia32-qemu-1.1.2-runtime poweron
如果運(yùn)行時(shí)不能正常啟動(dòng),可能有兩個(gè)原因:①開發(fā)主機(jī)BIOS禁用了Virtualization Technology,,進(jìn)入主機(jī)BIOS開啟Virtualization Technology即可解決問題,;②開發(fā)主機(jī)沒有加載KVM模塊,。
對(duì)于Intel處理器,,執(zhí)行$ sudo modprobe kvm_intel指令可加載KVM模塊
對(duì)于AMD處理器,執(zhí)行$ sudo modprobe kvm_amd指令可加載KVM模塊
(4)用SSH登錄運(yùn)行在QEMU中的MeeGo鏡像
$ ssh meego@127.0.0.1 -p 6666
MADDE啟動(dòng)QEMU時(shí),,完成了從主機(jī)6666端口到MeeGo鏡像SSH端口的重定向,。目前MeeGo 鏡像中有如下兩個(gè)帳號(hào):①用戶名:meego 密碼:meego;②用戶名:root 密碼:meego,。
3 應(yīng)用程序開發(fā)流程
(1)新建一個(gè)Qt工程,。在Qt Creator開始界面,點(diǎn)擊右下角Creat Project按鈕,,創(chuàng)建Qt工程,。
(2)根據(jù)目標(biāo)設(shè)備選擇合適的應(yīng)用程序模板。開發(fā)MeeGo上網(wǎng)本應(yīng)用程序,,需要選擇Qt C++ Program工程中的Mobile Qt Application模板,。
(3)使用工程向?qū)В鸩皆O(shè)置工程的名稱,、路徑,、Qt版本信息、程序類信息,、工程管理信息,。程序類信息包括:類的名稱、基類,、頭文件,、源文件和Form文件。工程管理信息列出了工程的路徑和工程中所有的文件,。
(4)編寫相應(yīng)的應(yīng)用程序代碼,,設(shè)置應(yīng)用程序運(yùn)行環(huán)境。如果目標(biāo)設(shè)備為MeeGo虛擬機(jī),,則將Device configuration設(shè)置成meego emulator,;否則將其設(shè)置為實(shí)體設(shè)備。設(shè)置完成后,依次點(diǎn)擊編譯和運(yùn)行按鈕,,應(yīng)用程序即可部署到目標(biāo)設(shè)備上并運(yùn)行,。
4 應(yīng)用程序集的設(shè)計(jì)與開發(fā)
4.1 總體設(shè)計(jì)方案
應(yīng)用程序集總體結(jié)構(gòu)如圖6所示,由主操作界面,、辦公模塊,、通信模塊、娛樂模塊,、地圖模塊組成,。通過主操作界面可啟動(dòng)不同子模塊,子模塊之間不能直接互相切換,,子模塊必須返回主操作界面才可啟動(dòng)其他子模塊,。通過子模塊界面可啟動(dòng)相應(yīng)的應(yīng)用程序。
進(jìn)入子模塊后,,主操作界面切換為子模塊的操作界面,。兩個(gè)模塊的主操作界面的結(jié)構(gòu)完全相同,只是六面體每個(gè)面的功能不同,。以辦公模塊為例,,其上下兩個(gè)面的功能為返回主操作界面,前后左右4個(gè)面分別代表了文本編輯程序,、表格處理程序,、圖片瀏覽程序和保留的擴(kuò)展程序接口。
六面體的每個(gè)面均使用OpenGL逆時(shí)針正向繪制,。六面體通過加載相應(yīng)的紋理代表不同的模塊或者應(yīng)用程序,。首先加載用來生成紋理的圖片,然后生成紋理,,最后加載紋理[4],。在繪制面之前調(diào)用glLoadName()函數(shù),使用名字棧為六面體的面設(shè)置名字,。通過調(diào)用facceAtPosition()私有函數(shù)確定光標(biāo)下的面,。程序使用面的名字和shift_flag變量來實(shí)現(xiàn)主操作界面和子模塊操作界面的相互切換。
(2)子模塊的設(shè)計(jì)與實(shí)現(xiàn)
辦公模塊設(shè)計(jì)實(shí)現(xiàn)了圖片瀏覽程序,、文本編輯程序,、表格處理程序;通信模塊設(shè)計(jì)實(shí)現(xiàn)了新浪微博客戶端和局域網(wǎng)通信程序,;娛樂模塊設(shè)計(jì)實(shí)現(xiàn)了連連看游戲,、貪吃蛇游戲和拼圖游戲;地圖模塊設(shè)計(jì)實(shí)現(xiàn)了北京地鐵線路查詢程序和Google在線地圖程序,。
在此只介紹地圖模塊中的北京地鐵線路查詢程序,。該程序涵蓋了北京地鐵七條干線,,并實(shí)現(xiàn)了任意兩個(gè)站點(diǎn)之間的最短路徑查詢和動(dòng)態(tài)顯示。該程序使用圖存儲(chǔ)地鐵線路信息,。地鐵線路圖中共有115個(gè)站點(diǎn),,每個(gè)站點(diǎn)分配了唯一的ID標(biāo)識(shí)為圖中的一個(gè)頂點(diǎn)。如果兩個(gè)站點(diǎn)直接相連,,則將這兩個(gè)站點(diǎn)之間弧的權(quán)值設(shè)置為1,,否則設(shè)置為10 000,表示這兩個(gè)站點(diǎn)沒有直接相連,。程序使用著名的弗洛伊德最短路徑算法,,通過圖的權(quán)值矩陣求任意兩個(gè)站點(diǎn)之間的最短路徑。通過定時(shí)器和變換畫刷的顏色來實(shí)現(xiàn)查詢結(jié)果的動(dòng)態(tài)顯示,,每0.7 s更新一次地圖,,如果用戶正在進(jìn)行線路查詢,則變換畫刷的顏色閃動(dòng)線路上站點(diǎn),。
4.3 應(yīng)用程序設(shè)計(jì)舉例
以Google在線地圖為例,,本應(yīng)用程序使用MeeGo Qt域的Qt WebKit進(jìn)行開發(fā),,總體的開發(fā)流程與本文第3節(jié)“應(yīng)用程序開發(fā)流程”相同,。在此,只敘述程序代碼的編寫,。
(1)為了使用Qt WebKit,,需要在工程的.pro文件中添加QT += webkit,并在相應(yīng)頭文件中添加#include
<QwebView>,。
(2)新建一個(gè)QWebView類的控件對(duì)象:
QWebView *mapview = new QwebView(),;
(3)調(diào)用該控件對(duì)象的setUrl函數(shù),設(shè)置其顯示內(nèi)容為Google在線地圖:
mapview->setUrl(QUrl("http://ditu.google.cn/"));
(4)設(shè)置控件的窗口名字并將其顯示:
mapview->setWindowTitle("Google在線地圖");
mapview->show(),;
本文論述了MeeGo嵌入式操作系統(tǒng)的運(yùn)行機(jī)制和應(yīng)用程序的開發(fā)流程,,以及在Linux平臺(tái)上搭建MeeGo應(yīng)用程序開發(fā)環(huán)境和使用Qt Creator開發(fā)應(yīng)用程序集的方法和步驟。
參考文獻(xiàn)
[1] 英特爾開源技術(shù)中心.MeeGoTM開源項(xiàng)目白皮書[Z].2010.
[2] The Linux foundation.MeeGo architecture layer view [EB/OL].[2010-10-20].https://www.meego.com/developers/ meegoarchitecture/meego-architecture-layer-view.htm.
[3] The Linux foundation.MeeGo architecture domain view[EB/OL].[2010-10-20].https://www.meego.com/developers/meego-architecture/meego-architecture-domain-view.htm.
[4] WRIGHT R,,LIPCHAK B.OpenGL超級(jí)寶典(第四版)[M]. 張琪,,付飛,譯.北京:人民郵電出版社,,2010.