<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Framebuffer的嵌入式GUI系統實(shí)現

基于Framebuffer的嵌入式GUI系統實(shí)現

作者: 時(shí)間:2008-04-09 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:本文研究了,包括其體系結構層次的建立、驅動(dòng)機制的分析、微型客戶(hù)端/服務(wù)器模式的,以及的GAL與GDI的設計等關(guān)鍵內容。
關(guān)鍵詞;;Linux;

0 前言

當前流行的商業(yè)化的 包括Palm OS、Windows CE和Symbian OS 等。這些GUI 性能出眾,一般都提供完整的解決方案,對Java、多媒體的支持較好,使用它們可以很方便地構建自己的,縮短開(kāi)發(fā)周期。但這些都是商業(yè)化產(chǎn)品,使用它們不可避免地要付出昂貴的授權費用,沒(méi)有公開(kāi)源代碼,用戶(hù)也不能很自由地定制自己的產(chǎn)品。

Linux 的出現給嵌入式產(chǎn)品的開(kāi)發(fā)帶來(lái)了新的活力,它擁有很多的優(yōu)良特性非常適合于嵌入式開(kāi)發(fā)。目前國內外Linux的GUI產(chǎn)品比較流行的包括MiniGUI、MicroWindows、QT/Embedded 等,其中QT/Embedded 屬于商業(yè)化的產(chǎn)品,其他屬于開(kāi)源軟件。從性能、功能各個(gè)方面來(lái)說(shuō)QT/Embedded 比較優(yōu)秀,但是使用它需要支付高昂的授權費用,一般應用在高端的PDA 和SmartPhone 等產(chǎn)品上。MiniGUI和MicroWindows均為自由軟件,只是前者遵循LGPL條款,后者遵循MPL條款,這兩個(gè)系統的技術(shù)路線(xiàn)也有所不同,MiniGUI的策略是首先建立在比較成熟的圖形引擎之上,比如Svgalib和LibGGI,開(kāi)發(fā)的重點(diǎn)在于窗口系統、圖形接口之上,而MicroWindows目前的開(kāi)發(fā)重點(diǎn)則在底層的圖形引擎之上,窗口系統和圖形接口方面的功能還比較欠缺,而且MiniGUI在1.6版本以后也不再提供免費的完整功能版本下載。

FrameBuffer是Linux控制臺下的一個(gè)通用的圖形接口,它擁有良好的平臺無(wú)關(guān)性,可以支持絕大多數的硬件,因而得到愈來(lái)愈多廠(chǎng)家的支持,一些流行的圖形庫如QT、GTK便是基于FrameBuffer的。它的接口非常簡(jiǎn)單,通過(guò)它可以十分方便地構建一個(gè)圖形系統。而對GUI的做一個(gè)系統深入的分析和研究也是嵌入式系統研究必不可少的一個(gè)步驟。本項目在開(kāi)發(fā)嵌入式數字控制系統的過(guò)程中對現有的嵌入式GUI系統做了深入的研究,包括嵌入式GUI的體系結構層次、驅動(dòng)機制,并實(shí)現了對自身量身定做的GAL和GDL,實(shí)現了滿(mǎn)足自身需求的嵌入式GUI系統。

1嵌入式GUI需求分析

與運行在PC 機上的GUI相比,作為運行在嵌入式設備上的程序,不可避免的要受到設備環(huán)境的限制,其實(shí)這也是所有嵌入式編程都要遇到的問(wèn)題。嵌入式設備對GUI 的限制主要體現在:(1) CPU速度相對來(lái)說(shuō)較慢,一般不具備浮點(diǎn)運算功能或浮點(diǎn)運算功能較弱;(2)內存、外存容量??;(3)電量有限需要考慮節電因素。

同時(shí),嵌入式平臺具有多樣性,不同的平臺之間性能、功能部件千差萬(wàn)別,很難設計出一個(gè)GUI產(chǎn)品能夠適合任何平臺,因此就必需對GUI產(chǎn)品進(jìn)行準確的定位,包括所要運行的平臺、最終用戶(hù)的需求等等,它是產(chǎn)品成功的關(guān)鍵,也決定了我們的設計方針和思想,比如實(shí)時(shí)和非實(shí)時(shí)產(chǎn)品的設計是完全不同的。這里我們設計的GUI 系統是為中低端嵌入式系統提供圖形界面能力的中間件產(chǎn)品,它應該能滿(mǎn)足以L(fǎng)inux OS 作為產(chǎn)品系統平臺的中低端客戶(hù)對圖形用戶(hù)界面開(kāi)發(fā)的要求,并易于第三方應用程序的移植。具體來(lái)說(shuō),其運行在CPU 主頻不高于400MHz(實(shí)際使用200MHz),內存容量在64MB(實(shí)際使用16M)以下的中低端嵌入式系統,兼容POSIX標準的操作系統,擁有完整或經(jīng)過(guò)裁減的C庫。

在設計的時(shí)候要充分考慮到這些因素,在編程時(shí)也要注意一些原則:盡量讓CPU少做事,盡量不進(jìn)行浮點(diǎn)運算,盡量減少文件操作,盡量減少內存分配。

2 基于Linux的嵌入式GUI構建

2.1 嵌入式GUI的體系結構層次

嵌入式GUI的實(shí)現一般要劃分成四大功能模塊:GUI用戶(hù)接口模塊、GUI對象模塊、GUI基本圖形模塊和GUI消息驅動(dòng)模塊。具體功能定義如下:

1)GUI用戶(hù)接口模塊 該模塊為上層應用軟件開(kāi)發(fā)人員提供方便、易用的API接口函數,對上層開(kāi)發(fā)人員屏蔽了GUI的設備實(shí)現細節,讓開(kāi)發(fā)人員很簡(jiǎn)單的就可以編寫(xiě)出良好的圖形用戶(hù)界面的應用程序。

2)GUI對象模塊 GUI對象模塊對窗口環(huán)境中的邏輯對象進(jìn)行組織管理。其中包括對象的添加、刪除引發(fā)的對象鏈表的更新,以及GUI窗口顯示的維護,如窗口切換、焦點(diǎn)切換、對象的隱藏和恢復等操作引發(fā)的對象屬性的更新,還有對不同控件的各種事件的響應。

3)GUI基本圖形模塊 在該模塊中實(shí)現了對顯示輸出設備的操作,如畫(huà)點(diǎn)、畫(huà)線(xiàn)、畫(huà)矩形等基本功能,還有對于字符的解析輸出,以及對圖形的解析輸出。一般它獨立于具體的設備驅動(dòng)程序,與物理設備之間形成“設備抽象層”。

4)GUI消息驅動(dòng)模塊 該模塊是GUI系統的通訊模塊,負責GUI的消息接收和與其它任務(wù)的通訊以及消息隊列的維護。

我們在自我裁減的Linux操作系統基礎上具體實(shí)現了一個(gè)輕量級的嵌入式GUI系統,在C語(yǔ)言中,采用了類(lèi)似于面向對象的技術(shù),同時(shí)將GUI系統的核心模塊設計的盡量小巧,便于測試。GUI系統內核對GUI特性和使用環(huán)境進(jìn)行了高度抽象,為了增加GUI系統的可移植性和可擴展性,本系統將與特定設備相關(guān)的功能全部分裝到了獨立的函數之中,如果要移植到其它不同的設備上去,只需要把這些與特點(diǎn)設備相關(guān)的函數部分重寫(xiě)即可達到目的。本GUI系統采用的垂直分層的系統結構圖如下:

圖1、嵌入式GUI系統結構圖

用戶(hù)和嵌入式系統交互的過(guò)程即是用戶(hù)通過(guò)輸入設備操作GUI的應用程序,GUI系統在接到用戶(hù)對該輸入事件的處理消息之后,將處理后的結果顯示在輸出設備上。因此GUI系統涉及的主要技術(shù)有事件驅動(dòng)、輸出顯示、資源管理。其中事件驅動(dòng)是GUI系統的核心,輸出顯示是GUI的關(guān)鍵,資源管理是GUI系統的基礎。

2.2 嵌入式GUI的驅動(dòng)機制分析

GUI系統的事件驅動(dòng)機制主要是消息驅動(dòng)機制。從消息機制方面來(lái)說(shuō),本GUI系統可以劃分為三個(gè)子系統:圖形處理子系統,輸入設備子系統和輸出設備子系統,各子系統以圖形處理子系統為核心,既相對獨立又彼此聯(lián)系。

所謂消息有兩層含義:1、消息發(fā)生的時(shí)間(事件,動(dòng)態(tài)概念):2、消息內容(信息,靜態(tài)概念)。消息發(fā)生觸發(fā)一個(gè)事件,用以主動(dòng)通知信息的到來(lái)。系統中消息發(fā)生時(shí)間是隨機的,由操作系統異步捕獲此事件,再分發(fā)給對應的處理程序。程序起著(zhù)信息處理的作用,而消息則代表到達的信息。對于可以事先判定信息的種類(lèi)范圍,而不能事先預測信息到達時(shí)間的情況,有兩種處理方法:被動(dòng)輪詢(xún)和主動(dòng)通知。消息屬于主動(dòng)通知一類(lèi)。利用消息驅動(dòng)計算機輸入的機制,顯得自然、簡(jiǎn)潔。

消息處理機制包括消息的產(chǎn)生、傳遞(發(fā)送和接收)和處理等過(guò)程。消息作為一種任務(wù)、程序、系統等應用之間的信息和數據聯(lián)系,它可以由硬件事件產(chǎn)生,也可以由其它任務(wù)、程序、系統等應用中產(chǎn)生,并將它們發(fā)到其它應用中,以控制應用的行為。

本GUI系統的消息處理機制如圖2所示。

圖2、系統的消息處理機制圖

采用這種消息機制后,模塊之間形成完全松散的耦合關(guān)系,增加了整個(gè)連接和集成的靈活性,這是通過(guò)消息和響應的非直接、隱式調用實(shí)現的。

選用這種消息機制作為嵌入式GUI系統的設計,正好適合了嵌入式系統本身要求可以配置、裁剪的特點(diǎn)。嵌入式GUI本身只需要維持一個(gè)消息處理機即可,可以大大增加系統的可移植性。采用這種消息機制,只需要重新定義消息和響應處理,GUI系統中的任何控件都可以簡(jiǎn)單地替換為另一個(gè)控件,這一特點(diǎn)可以滿(mǎn)足GUI系統本身要求的可擴展性,用戶(hù)可以根據自己的要求對控件進(jìn)行修改、定制和擴展GUI系統的界面風(fēng)格。

對于激勵和響應之間沒(méi)有嚴格的時(shí)間邏輯關(guān)系的系統,消息是一種非常好的控制機制。消息機制完全可以滿(mǎn)足嵌入式GUI的調度要求。

2.3 微型客戶(hù)端/服務(wù)器模式的實(shí)現

從系統整體角度看,根據是否采用多進(jìn)程C/S 機制和服務(wù)程序的具體功能,基本可以將Linux 下的嵌入式GUI 劃分為類(lèi)X GUI 和非X GUI 兩大類(lèi)。

圖3、類(lèi)X GUI的系統C/S交互機制示意圖

是否采用C/S客戶(hù)服務(wù)機制,決定于用戶(hù)的設計需求和實(shí)時(shí)性考慮。當實(shí)時(shí)能力能夠得到滿(mǎn)足時(shí),類(lèi)X的GUI在系統健壯性和功能完備性上要大大超過(guò)非X的GUI。非X GUI往往采用單進(jìn)程多線(xiàn)程,所有數據和操作共享同一內存區域,當某個(gè)線(xiàn)程出現錯誤時(shí)容易造成整個(gè)進(jìn)程癱瘓,因此用于復雜場(chǎng)合的成熟的GUI大多數都采用類(lèi)X GUI多進(jìn)程多客戶(hù)單服務(wù)的機制。由于類(lèi)X的嵌入式GUI具有應用普遍性,我們采用了類(lèi)X GUI客戶(hù)服務(wù)結構模式。

X GUI的原理是借鑒X Window的客戶(hù)服務(wù)機制,采用了事件驅動(dòng)的設計方法。應用程序在客戶(hù)端,輸入接口在服務(wù)器端,應用程序通過(guò)和服務(wù)器通訊間接和輸入輸出硬件設備交互。如圖3是系統的類(lèi)X GUI的系統C/S交互機制示意圖

客戶(hù)程序向服務(wù)器程序提交感興趣的事件或要阻止的事件請求,服務(wù)器主程序啟動(dòng)循環(huán)收集事件(包括輸入設備上的事件),由輸入引擎接口上的系統調用來(lái)接收輸入設備事件。將客戶(hù)感興趣的事件發(fā)送給客戶(hù)程序,客戶(hù)程序處理后再向服務(wù)器程序提交圖形繪制和其它操作請求。兩者之間通過(guò)IPC或socket連接的辦法來(lái)傳送事件和請求。

3 基于Framebuffer的GAL與GDI的設計

FrameBuffer是出現在2.2.xx內核當中的一種驅動(dòng)程序接口。這種接口將顯示設備抽象為幀緩沖區。用戶(hù)可以將它看成是顯示內存的一個(gè)映像,將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀寫(xiě)操作,而寫(xiě)操作可以立即反應在屏幕上。該驅動(dòng)程序的設備文件一般是/dev/fb0,/dev/fbl等等。在應用程序中,一般通過(guò)將FrameBuffer設備映射到進(jìn)程地址空間的方式使用。FrameBuffer設備還提供了若干ioctl命令,通過(guò)這些命令,可以獲得顯示設備的一些固定信息(比如顯示內存大小)、與顯示模式相關(guān)的可變信息(比如分辨率、象素結構、每掃描線(xiàn)的字節寬度),以及偽彩色模式下的調色板信息等等。通過(guò)FrameBuffer設備,還可以獲得當前內核所支持的加速顯示卡的類(lèi)型(通過(guò)固定信息得到),這種類(lèi)型通常是和特定顯示芯片相關(guān)的

研究中我們發(fā)現,雖然己有的幾種嵌入式GUI庫在窗口管理、消息機制等應用層的實(shí)現各不相同;但為了便于移植的特性,都有相似的設備驅動(dòng)層設計。

一個(gè)能夠移植到多種硬件平臺上的嵌入式GUI庫,應用至少抽象出兩類(lèi)設備:基于圖形顯示設備(如VGA卡)的圖形抽象層GAL ( Graphic Abstract Layer );基于輸入設備(如鍵盤(pán),觸摸層等)的輸入抽象層IAL ( Input Abstract Layer )。GAL層完成系統對具體的顯示硬件設備的操作,極大程度上隱蔽各種不同硬件的技術(shù)實(shí)現細節,為程序開(kāi)發(fā)人員提供統一的圖形編程接口。先進(jìn)的嵌入式GUI,比如MicroWindows和MiniGUI,都支持Framebuffer。

因為MicroWindows的GAL層代碼量小,結構清晰而且模塊性好,非常方便修改和擴充。因此我們借鑒MicroWindows的設備抽象層構建,實(shí)現需要在文件中包含src/include/device.h和src/include/mwtypes.h頭文件。前者包含對MicroWindows底層調用函數接口的聲明,后者包含MicroWindows中特定結構的定義和一些宏定義。

GDI對象對于GUI系統來(lái)說(shuō)是一個(gè)很重要的概念,它可以提供給用戶(hù)更加靈活的操作方式,所以本GUI系統實(shí)現了類(lèi)似于Windows下的GDI系統,不像有些GUI系統,放棄了GDI對象概念,窗口層直接跟繪圖層交互,導致用戶(hù)操作起來(lái)不靈活,這樣設計也容易在遵循嵌入式軟件平臺API標準的前提下與Windows的圖形用戶(hù)接口相兼容。系統GDI提供了設備上下文(Device Context)操作、基本GDI對象操作〔包括畫(huà)筆、畫(huà)刷、字體、位圖、區域、填充等),還有映射模式、背景模式和光柵操作。盡管系統GDI吸取了Windows GDI的一些概念和設計方法,但其作為嵌入式GUI系統的一部分,特別針對嵌入式環(huán)境的特點(diǎn),取消了一些不常用的、影響效率的功能,充分挖掘GDI層的性能。由于硬件抽象層提供的圖形操作接口只有一個(gè)Surface,所以所有的基本圖形繪制及操作都需要GDI實(shí)現,所以提高GDI性能的重點(diǎn)是好的圖形學(xué)算法。本系統GDI對原有的組成元素做了一些取舍,其組成元素如表1所示:

表1、系統GDI組成元素表

設備上下文

GDI對象

繪圖屬性

位圖操作

字體

DC

畫(huà)筆、畫(huà)刷

光柵、背景模式、坐標模式

DIB、DDB

點(diǎn)陣、True Type

4 結束語(yǔ)

本文研究了基于Framebuffer的嵌入式GUI的系統實(shí)現,包括其體系結構層次的建立、驅動(dòng)機制的分析、微型客戶(hù)端/服務(wù)器模式的實(shí)現,以及基于Framebuffer的GAL與GDI的設計等關(guān)鍵內容,提供了除現行流行方案外的嵌入式GUI的解決方案,并可根據自己系統需求量身定做,在實(shí)際項目實(shí)施中獲得了很好的效果。

作者簡(jiǎn)介:趙霞 (1968-)女(漢族),河北人,高級講師,碩士,新僑職業(yè)技術(shù)學(xué)院計算機信息系.主要研究領(lǐng)域:計算機應用與軟件研究.

BiographyZhao Xia(1968-), Female(Han), Senior instructor, Master, Department of computer, Xinqiao Professional Technological Institute. Research area: Research on computer application and software development.

參考文獻:

[1]王田苗.嵌入式系統設計與實(shí)例分析.清華大學(xué)出版社,2003年10月第二版.

[2]王同洋,熊偉,嵌入式Linux中圖形用戶(hù)界面的研究與設計.微計算機信息,2006, (08),90-92

[3]張娟,張雪蘭.基于嵌入式Linux的GUI應用程序的實(shí)現.計算機應用,2003 (04):116-117

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>