《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > MeeGo嵌入式操作系統(tǒng)的研究及應(yīng)用開(kāi)發(fā)
MeeGo嵌入式操作系統(tǒng)的研究及應(yīng)用開(kāi)發(fā)
來(lái)源:電子技術(shù)應(yīng)用2012年第10期
韓德強(qiáng)1,馮云賀1,劉增輝2
1.北京工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,北京100124; 2.北京電子科技職業(yè)學(xué)院,北京100029
摘要: 論述了在Linux平臺(tái)下搭建MeeGo嵌入式操作系統(tǒng)應(yīng)用程序開(kāi)發(fā)環(huán)境的方法和步驟,給出了使用Qt Creator工具開(kāi)發(fā)MeeGo應(yīng)用程序的流程。通過(guò)在A(yíng)tom D510嵌入式實(shí)驗(yàn)平臺(tái)和QEMU虛擬機(jī)下安裝MeeGo操作系統(tǒng),設(shè)計(jì)實(shí)現(xiàn)了具有3D操作界面且集成辦公、娛樂(lè)、微博聊天、地圖查詢(xún)四大模塊為一體的應(yīng)用程序。該應(yīng)用程序具有友好的人機(jī)交互界面和良好的可移植性,體現(xiàn)了“一次編寫(xiě),到處運(yùn)行”的理念。
中圖分類(lèi)號(hào): TP316.5
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)10-0030-04
The research and application development of MeeGo embedded operating system
Han Deqiang1,F(xiàn)eng Yunhe1,Liu Zenghui2
1.College of Computer, Beijing University of Technology, Beijing 100124,China; 2.Beijing Vocational College of Electronic Science, Beijing 100029,China
Abstract: This paper discusses the methods and steps of establishing MeeGo application development environment on Linux platform and the procedures of MeeGo application development using Qt Creator tools. By installing MeeGo operating system on Atom D510 embedded test platform and on QEMU virtual machine, a 3D user interface application which integrates office module, entertainment module, microblog and chat module, map search module has been designed and implemented. The application has a friendly interactive interface and good portability indicating the concept of "write once, run everywhere".
Key words : embedded systems;MeeGo;Qt;program portability

    MeeGo嵌入式操作系統(tǒng)由英特爾和諾基亞倡導(dǎo),旨在為手機(jī)、上網(wǎng)本、平板電腦、互聯(lián)網(wǎng)電視、車(chē)載信息娛樂(lè)系統(tǒng)和多媒體電話(huà)等智能設(shè)備提供操作系統(tǒng)解決方案,并且有助于這些設(shè)備實(shí)現(xiàn)無(wú)縫集成。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為開(kāi)發(fā)者提供了一致性的API,選擇Qt框架作為應(yīng)用程序的開(kāi)發(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所示,共包括三層:用戶(hù)體驗(yàn)層、應(yīng)用開(kāi)發(fā)層、操作系統(tǒng)核心層。

    用戶(hù)體驗(yàn)層為不同的終端設(shè)備提供不同的應(yīng)用框架,比如上網(wǎng)本采用了Clutter和MX界面開(kāi)發(fā)庫(kù)繪制界面;手持設(shè)備采用了MeeGo特有的觸控框架,包括觸摸、輸入法、手勢(shì),為用戶(hù)提供觸控體驗(yàn)。MeeGo用戶(hù)體驗(yàn)層集成了個(gè)人社交網(wǎng)絡(luò)服務(wù)和底層基礎(chǔ)庫(kù),全面支持網(wǎng)絡(luò)服務(wù)、多媒體服務(wù)、最新電話(huà)技術(shù)等標(biāo)準(zhǔn)。強(qiáng)大的工具和動(dòng)畫(huà)效果簡(jiǎn)化了用戶(hù)界面的定制。
    應(yīng)用開(kāi)發(fā)層涵蓋了MeeGo的應(yīng)用開(kāi)發(fā)接口,目前MeeGo release版本包含了Qt4.7、Qt mobility 1.0、Open GL ES 1.1和Open GL ES 2.0相關(guān)的類(lèi)和接口。
    操作系統(tǒng)核心層包含了所有中間件和操作系統(tǒng)的服務(wù)域以及硬件適配層。內(nèi)核方面,MeeGo 1.0采用了Linux Kernel 2.6.33,支持多任務(wù)、本地應(yīng)用開(kāi)發(fā)框架、動(dòng)畫(huà)效果設(shè)計(jì)的開(kāi)發(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 開(kāi)發(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)需要提供三類(lè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)、處理器類(lèi)型、設(shè)備驅(qū)動(dòng)配置菜單、網(wǎng)絡(luò)支持以及內(nèi)核調(diào)制選項(xiàng)等。
    Qt域提供了跨平臺(tái)開(kāi)發(fā)工具(Qt、Qt Mobility、Qt Webkit、Qt WebRuntime),其中Qt提供了應(yīng)用程序和用戶(hù)界面的開(kāi)發(fā)工具包,Qt Mobility為MeeGo提供了開(kāi)發(fā)移動(dòng)應(yīng)用程序的接口,Qt WebKit能夠快速創(chuàng)建包含實(shí)時(shí)網(wǎng)絡(luò)內(nèi)容和服務(wù)的應(yīng)用程序。
2 搭建開(kāi)發(fā)環(huán)境
2.1 Linux下安裝配置Qt Creator

    在Linux和Windows環(huán)境下均可以開(kāi)發(fā)MeeGo應(yīng)用程序。鑒于MeeGo操作系統(tǒng)是基于Linux內(nèi)核并且是完全開(kāi)源的,故選擇了在Ubuntu 10.04 LTS系統(tǒng)上搭建MeeGo應(yīng)用程序的開(kāi)發(fā)環(huán)境。
    為搭建MeeGo應(yīng)用程序開(kāi)發(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
    如果開(kāi)發(fā)基于x86架構(gòu)設(shè)備的應(yīng)用程序,相應(yīng)的SDK需要安裝meego-sdk-ia32;如果開(kāi)發(fā)基于A(yíng)RM架構(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交叉編譯器,打開(kāi)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 搭建基于A(yíng)tom D510嵌入式實(shí)驗(yàn)平臺(tái)的開(kāi)發(fā)環(huán)境
    Atom D510處理器針對(duì)MeeGo操作系統(tǒng)進(jìn)行了優(yōu)化,在A(yíng)tom D510嵌入式實(shí)驗(yàn)平臺(tái)下搭建MeeGo應(yīng)用開(kāi)發(fā)環(huán)境需要4個(gè)步驟,如圖4所示。

 

 

    (1)在A(yíng)tom D510平臺(tái)上安裝MeeGo上網(wǎng)本操作系統(tǒng)
    由于A(yíng)tom D510嵌入式實(shí)驗(yàn)平臺(tái)提供了UBS接口,最簡(jiǎn)單快捷的安裝方式是使用U盤(pán)安裝。首先,下載U盤(pán)鏡像制作工具Win32DiskImager.exe和MeeGo上網(wǎng)本鏡像文件;其次,制作MeeGo上網(wǎng)本系統(tǒng)啟動(dòng)U盤(pán);最后,用該U盤(pán)重啟實(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加入初始化序列中,開(kāi)機(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è)備連接
    打開(kāi)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(如果該端口被占用可使用其他端口)。
    除此之外,如果開(kāi)發(fā)主機(jī)與實(shí)際設(shè)備使用交叉網(wǎng)線(xiàn)進(jìn)行通信,則兩者的IP地址必須配置在同一網(wǎng)段內(nèi)。如果使用局域網(wǎng)進(jìn)行通信,則開(kāi)發(fā)主機(jī)與實(shí)際設(shè)備接入同一局域網(wǎng)即可。
2.3 QEMU虛擬機(jī)下搭建開(kāi)發(fā)環(huán)境
    在QEMU虛擬機(jī)下搭建開(kāi)發(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仿真器
    打開(kāi)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è)原因:①開(kāi)發(fā)主機(jī)BIOS禁用了Virtualization Technology,進(jìn)入主機(jī)BIOS開(kāi)啟Virtualization Technology即可解決問(wèn)題;②開(kāi)發(fā)主機(jī)沒(méi)有加載KVM模塊。
    對(duì)于Intel處理器,執(zhí)行$ sudo modprobe kvm_intel指令可加載KVM模塊
    對(duì)于A(yíng)MD處理器,執(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):①用戶(hù)名:meego  密碼:meego;②用戶(hù)名:root  密碼:meego。
3 應(yīng)用程序開(kāi)發(fā)流程
    (1)新建一個(gè)Qt工程。在Qt Creator開(kāi)始界面,點(diǎn)擊右下角Creat Project按鈕,創(chuàng)建Qt工程。
    (2)根據(jù)目標(biāo)設(shè)備選擇合適的應(yīng)用程序模板。開(kāi)發(fā)MeeGo上網(wǎng)本應(yīng)用程序,需要選擇Qt C++ Program工程中的Mobile Qt Application模板。
    (3)使用工程向?qū)?,逐步設(shè)置工程的名稱(chēng)、路徑、Qt版本信息、程序類(lèi)信息、工程管理信息。程序類(lèi)信息包括:類(lèi)的名稱(chēng)、基類(lèi)、頭文件、源文件和Form文件。工程管理信息列出了工程的路徑和工程中所有的文件。
    (4)編寫(xiě)相應(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ì)與開(kāi)發(fā)
4.1 總體設(shè)計(jì)方案

    應(yīng)用程序集總體結(jié)構(gòu)如圖6所示,由主操作界面、辦公模塊、通信模塊、娛樂(lè)模塊、地圖模塊組成。通過(guò)主操作界面可啟動(dòng)不同子模塊,子模塊之間不能直接互相切換,子模塊必須返回主操作界面才可啟動(dòng)其他子模塊。通過(guò)子模塊界面可啟動(dòng)相應(yīng)的應(yīng)用程序。

    進(jìn)入子模塊后,主操作界面切換為子模塊的操作界面。兩個(gè)模塊的主操作界面的結(jié)構(gòu)完全相同,只是六面體每個(gè)面的功能不同。以辦公模塊為例,其上下兩個(gè)面的功能為返回主操作界面,前后左右4個(gè)面分別代表了文本編輯程序、表格處理程序、圖片瀏覽程序和保留的擴(kuò)展程序接口。
    六面體的每個(gè)面均使用OpenGL逆時(shí)針正向繪制。六面體通過(guò)加載相應(yīng)的紋理代表不同的模塊或者應(yīng)用程序。首先加載用來(lái)生成紋理的圖片,然后生成紋理,最后加載紋理[4]。在繪制面之前調(diào)用glLoadName()函數(shù),使用名字棧為六面體的面設(shè)置名字。通過(guò)調(diào)用facceAtPosition()私有函數(shù)確定光標(biāo)下的面。程序使用面的名字和shift_flag變量來(lái)實(shí)現(xiàn)主操作界面和子模塊操作界面的相互切換。
    (2)子模塊的設(shè)計(jì)與實(shí)現(xiàn)
    辦公模塊設(shè)計(jì)實(shí)現(xiàn)了圖片瀏覽程序、文本編輯程序、表格處理程序;通信模塊設(shè)計(jì)實(shí)現(xiàn)了新浪微博客戶(hù)端和局域網(wǎng)通信程序;娛樂(lè)模塊設(shè)計(jì)實(shí)現(xiàn)了連連看游戲、貪吃蛇游戲和拼圖游戲;地圖模塊設(shè)計(jì)實(shí)現(xiàn)了北京地鐵線(xiàn)路查詢(xún)程序和Google在線(xiàn)地圖程序。
    在此只介紹地圖模塊中的北京地鐵線(xiàn)路查詢(xún)程序。該程序涵蓋了北京地鐵七條干線(xiàn),并實(shí)現(xiàn)了任意兩個(gè)站點(diǎn)之間的最短路徑查詢(xún)和動(dòng)態(tài)顯示。該程序使用圖存儲(chǔ)地鐵線(xiàn)路信息。地鐵線(xiàn)路圖中共有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)沒(méi)有直接相連。程序使用著名的弗洛伊德最短路徑算法,通過(guò)圖的權(quán)值矩陣求任意兩個(gè)站點(diǎn)之間的最短路徑。通過(guò)定時(shí)器和變換畫(huà)刷的顏色來(lái)實(shí)現(xiàn)查詢(xún)結(jié)果的動(dòng)態(tài)顯示,每0.7 s更新一次地圖,如果用戶(hù)正在進(jìn)行線(xiàn)路查詢(xún),則變換畫(huà)刷的顏色閃動(dòng)線(xiàn)路上站點(diǎn)。
4.3 應(yīng)用程序設(shè)計(jì)舉例
    以Google在線(xiàn)地圖為例,本應(yīng)用程序使用MeeGo Qt域的Qt WebKit進(jìn)行開(kāi)發(fā),總體的開(kāi)發(fā)流程與本文第3節(jié)“應(yīng)用程序開(kāi)發(fā)流程”相同。在此,只敘述程序代碼的編寫(xiě)。
    (1)為了使用Qt WebKit,需要在工程的.pro文件中添加QT += webkit,并在相應(yīng)頭文件中添加#include
<QwebView>。
    (2)新建一個(gè)QWebView類(lèi)的控件對(duì)象:
    QWebView *mapview = new QwebView();
    (3)調(diào)用該控件對(duì)象的setUrl函數(shù),設(shè)置其顯示內(nèi)容為Google在線(xiàn)地圖:
    mapview->setUrl(QUrl("http://ditu.google.cn/"));
    (4)設(shè)置控件的窗口名字并將其顯示:
    mapview->setWindowTitle("Google在線(xiàn)地圖");
    mapview->show();
    本文論述了MeeGo嵌入式操作系統(tǒng)的運(yùn)行機(jī)制和應(yīng)用程序的開(kāi)發(fā)流程,以及在Linux平臺(tái)上搭建MeeGo應(yīng)用程序開(kāi)發(fā)環(huán)境和使用Qt Creator開(kāi)發(fā)應(yīng)用程序集的方法和步驟。
參考文獻(xiàn)
[1] 英特爾開(kāi)源技術(shù)中心.MeeGoTM開(kāi)源項(xiàng)目白皮書(shū)[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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。