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