基于ARM LINUX的嵌入式GUI的研究和移植
摘要:隨著嵌入式系統(tǒng)的發(fā)展,用戶對嵌入式系統(tǒng)的要求越來越高,因此用于實現(xiàn)與用戶交流功能的嵌入式GUI成為嵌入式研究中的一個重點。該文首先介紹了什么是嵌入式系統(tǒng)和嵌入式系統(tǒng)中的GUI,并闡述了開發(fā)基于嵌入式Linux平臺的GUI系統(tǒng)的必要性。然后詳細(xì)的介紹了三種常見的嵌入式GUI系統(tǒng)(Microwindows、MiniGUI和QT)的設(shè)計結(jié)構(gòu)和使用上的優(yōu)缺點等,并列表進(jìn)行了比較。最后,描述了每個系統(tǒng)基于ARMLinux平臺的移植,包括編譯環(huán)境的建立、編譯選項的配置和修改以及運(yùn)行時參數(shù)的設(shè)置等等。
本文引用地址:http://2s4d.com/article/171575.htm引言
什么是嵌入式系統(tǒng)
嵌入式系統(tǒng)一般指以嵌入式微處理器為核心,有別于PC系統(tǒng),有計算機(jī)的部分功能但又不稱之為計算機(jī)的設(shè)備或器材。它主要是以應(yīng)用為目的,系統(tǒng)軟硬件于一體,通常要求具有代碼小、響應(yīng)速度快、可靠性高、低功耗、集成度高等特點。嵌入式系統(tǒng)遍布于各個行業(yè)以及人們的日常生活當(dāng)中,比如掌上PDA、移動計算設(shè)備、電視機(jī)頂盒、手機(jī)、汽車、數(shù)字相機(jī)、家庭自動化系統(tǒng)、安全系統(tǒng)、自動售貨機(jī)、工業(yè)自動化儀表與醫(yī)療儀器等。
什么是嵌入式系統(tǒng)中的GUI
隨著后PC時代的到來,嵌入式系統(tǒng)的性能有了大幅度的提高,應(yīng)用范圍也越來越廣,當(dāng)初的一些簡單的人機(jī)交互接口已經(jīng)無法滿足人們的要求。而與此同時,在臺式PC機(jī)上圖形交互界面早已普及并成熟,于是在嵌入式系統(tǒng)中也逐漸出現(xiàn)了圖形用戶界面(GraphicUserInterface,GUI),特別是在一些消費(fèi)類產(chǎn)品中。嵌入式系統(tǒng)中的GUI就是在嵌入式系統(tǒng)中為特定的硬件設(shè)備或環(huán)境而設(shè)計的圖形用戶界面系統(tǒng)。由于受到當(dāng)前嵌入式系統(tǒng)本身特點的影響,并受其發(fā)展限制,所以嵌入式系統(tǒng)中的GUI應(yīng)該有如下特點:
占用的存儲空間以及運(yùn)行時占用資源少;運(yùn)行速度以及響應(yīng)速度快;可靠性高;便于移植和定制。
Linux有開放的源碼、高效穩(wěn)定的內(nèi)核、良好的開發(fā)環(huán)境以及支持多種硬件平臺等特點,而且由于Linux的可配置性和可模塊化,一個Linux內(nèi)核經(jīng)過配置和裁減可以只占用幾百K左右的存儲空間,使其在嵌入式系統(tǒng)中也得到廣泛應(yīng)用。然而,在嵌入式系統(tǒng)中有嚴(yán)格的資源限制,臺式機(jī)Linux平臺下成熟的GUI無法直接移植到嵌入式設(shè)備上。因此,嵌入式系統(tǒng)中基于Linux的GUI愈發(fā)成為開發(fā)基于Linux的嵌入式系統(tǒng)所必須面對的問題。目前,隨著嵌入式行業(yè)分工的細(xì)化,出現(xiàn)了專門的公司致力開發(fā)Linux下的GUI并給其它公司提供授權(quán),從而縮短了嵌入式系統(tǒng)的開發(fā)周期。本文就旨在于對這樣的幾種嵌入式GUI進(jìn)行研究,列出表1進(jìn)行比較,并介紹這幾種GUI在基于ARMLinux上的移植。
幾種比較成熟的嵌入式GUI的研究
Microwindows
Microwindows是由美國CenturySoftware公司開發(fā)的開放源碼的嵌入式GUI項目。它不需要其他圖形系統(tǒng)的支持,可以充分利用Linux提供的FrAMEbuffer機(jī)制來進(jìn)行圖形顯示。同時在底層提供了對多種芯片的支持,并基本上用C語言實現(xiàn),因此移植性很強(qiáng)。國內(nèi)也有人參與了這個項目的開發(fā),并編寫了GB2312等字符集的支持。
Microwindows是基于分層式設(shè)計的,它允許不同的層可以被重新設(shè)計以滿足系統(tǒng)實現(xiàn)的需要,目前總共分為三層。最底層是屏幕、鼠標(biāo)或觸摸屏和鍵盤的驅(qū)動程序,用于實現(xiàn)系統(tǒng)的顯示功能以及滿足用戶特有的輸入需求。中間層實現(xiàn)了一個可移植的圖形引擎,以提供對畫線、填充、剪切和著色的支持。在最上層,則提供了多種的API給應(yīng)用程序設(shè)計者。Microwindows支持兩種API:ECMAAPIW(類Win32API)和Nano-XAPIs。這些API對Win32和XWindow系統(tǒng)有很好的兼容性,使程序可以很容易地從其它系統(tǒng)上移植過來。其中比較完備的是Nano-XAPI。Nano-X設(shè)計成是一個客戶端/服務(wù)器的環(huán)境,在此模式下應(yīng)用程序與一個客戶端的庫相連,而這個庫則通過一個UNIXsocket與Nano-X服務(wù)器相連。每個應(yīng)用程序都通過UNIXsocket來傳遞各種參數(shù),并由服務(wù)端來完成客戶端的各種請求。當(dāng)為了滿足運(yùn)行速度以及調(diào)試的需求時,還可以通過共享的內(nèi)存空間來完成傳播數(shù)據(jù)。
由于Microwindows為了與XWindow的兼容,它采用了傳統(tǒng)的基于UNIXsocket的客戶端/服務(wù)器結(jié)構(gòu)。此是,客戶端的畫圖、窗口建立等操作都是通過套接字與服務(wù)器通信。在這種情況下,系統(tǒng)就變得非常依賴于UNIXsocket,而UNIXsocket的傳遞都需要通過內(nèi)核,這樣在一些對實時性要求比較高的系統(tǒng)里就不太有利。而且Microwindows基本上用C語言實現(xiàn)的,雖然增強(qiáng)了可移植性,但也同樣導(dǎo)致了系統(tǒng)的運(yùn)行效率不高。同時Microwindows的開發(fā)工具FLNX也還不夠成熟,有待進(jìn)一步提高。
MiniGUI
MiniGUI是我國國內(nèi)自主開發(fā)、比較成熟的一個圖形用戶界面系統(tǒng),面向基于Linux的實時嵌入式系統(tǒng),使用現(xiàn)有成熟的圖形引擎(SV2GALib/LibGGI),采用類似WinCE的線程機(jī)制(目前MiniGUILite版本改用微客戶端/服務(wù)器模式來提供對多進(jìn)程的支持),集成了多字體和多字符集,支持硬件加速能力,充分使用顯示內(nèi)存。
從整體來看,MiniGUI也是屬于分層結(jié)構(gòu)設(shè)計(見圖1)。在最底層,GAL和IAL提供了Linux控制臺和底層圖形接口的支持以及輸入設(shè)備比如鼠標(biāo)、鍵盤等的驅(qū)動,PThread則是提供了內(nèi)核級線程支持的函數(shù)庫;中間層MiniGUIKernel則包括了窗口系統(tǒng)的各個模塊,MiniGUI本身是運(yùn)行在多線程模式下,它的各個模塊都是以單獨的線程運(yùn)行,同時它也利用線程來實現(xiàn)多窗口;最上層,則是提供給各種應(yīng)用程序使用的API函數(shù)。MiniGUI中利用線程之間的同步操作,實現(xiàn)了客戶線程和服務(wù)線程之間的微客戶端/服務(wù)器結(jié)構(gòu),因為它的客戶和服務(wù)器是同一進(jìn)程的兩個不同線程。它的核心實現(xiàn)主要體現(xiàn)在消息隊列數(shù)據(jù)結(jié)構(gòu)的使用上。
多線程有其一定的好處,但弱點則在于不同的線程共享了同一個地址空間,因此,客戶線程可能會破壞系統(tǒng)服務(wù)器線程的數(shù)據(jù),導(dǎo)致系統(tǒng)健壯性不夠健全。雖然目前的MiniGUILite版本拋棄LinuxThread庫而改用微客戶端/服務(wù)器模式提供對多進(jìn)程的支持,但是仍然存在著對多進(jìn)程支持弱、圖形功能不完善、窗口剪切不完備等問題。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論