嵌入式Linux圖形系統(tǒng)
為了讓讀者對嵌入式 linux 當(dāng)中能夠使用的圖形及圖形用戶界面有個較為全面的認(rèn)識,本文將為讀者介紹一些嵌入式?。欤椋睿酰∠到y(tǒng)中常見的圖形及圖形用戶界面系統(tǒng),并作為"基于?。欤椋睿酰『汀。恚椋睿椋纾酰椤〉那度胧较到y(tǒng)軟件開發(fā)指南"系列的最后一篇文章。本文首先概述了 linux 圖形領(lǐng)域的基本設(shè)施,然后描述了一些可供嵌入式 linux 系統(tǒng)使用的高級圖形庫以及圖形用戶界面支持系統(tǒng),并大概比較了這些系統(tǒng)的優(yōu)缺點(diǎn)。希望能對嵌入式?。欤椋睿酰∠到y(tǒng)的開發(fā)有所幫助?! 。薄。欤椋睿酰D形領(lǐng)域的基礎(chǔ)設(shè)施 本小節(jié)首先向讀者描述 linux 圖形領(lǐng)域中常見的基礎(chǔ)設(shè)施。之所以稱為基礎(chǔ)設(shè)施,是因?yàn)檫@些系統(tǒng)(或者函數(shù)庫),一般作為其他高級圖形或者圖形應(yīng)用程序的基本函數(shù)庫。這些系統(tǒng)(或者函數(shù)庫)包括:x?。鳎椋睿洌铮?、svgalib、framebuffer 等等。 ?。保薄。。鳎椋睿洌铮鳌 √崞稹。欤椋睿酰∩系膱D形,許多人首先想到的是?。。鳎椋睿洌铮?。這一系統(tǒng)是目前類 unix 系統(tǒng)中處于控制地位的桌面圖形系統(tǒng)。無疑,x?。鳎椋睿洌铮鳌∽鳛橐粋€圖形環(huán)境是成功的,它上面運(yùn)行著包括?。悖幔浣9ぞ吆娃k公套件在內(nèi)的大量應(yīng)用程序。但必須看到的是,由于?。。鳎椋睿洌铮鳌≡隗w系接口上的原因,限制了其對游戲、多媒體的支持能力。用戶在?。。鳎椋睿洌铮鳌∩线\(yùn)行?。觯悖洹〔シ牌?,或者運(yùn)行一些大型的三維游戲時,經(jīng)常會發(fā)現(xiàn)同樣的硬件配置,卻不能獲得和?。鳎椋睿洌铮鳎蟆〔僮飨到y(tǒng)一樣的圖形效果――即使使用了加速的?。。螅澹颍觯澹?,其效果也不能令人滿意。另外,大型的應(yīng)用程序(比如?。恚铮椋欤欤帷g覽器)在?。。鳎椋睿洌铮鳌∩线\(yùn)行時的響應(yīng)能力,也相當(dāng)不能令人滿意。當(dāng)然,這里有?。欤椋睿酰?nèi)核在進(jìn)程調(diào)度上的問題,也有?。。鳎椋睿洌铮鳌〉脑颉! 。。鳎椋睿洌铮鳌榱藵M足對游戲、多媒體等應(yīng)用對圖形加速能力的要求,提供了?。洌纾幔ㄖ苯訄D形訪問)擴(kuò)展,通過該擴(kuò)展,應(yīng)用程序可以在全屏模式下直接訪問顯示卡的幀緩沖區(qū),并能夠提供對某些加速功能的支持?! 。簦椋睿牵螅澹颍觯澹蛟谇度胧较到y(tǒng)的小巧實(shí)現(xiàn),它由xfree86?。悖铮颍濉。簦澹幔怼〉模耄澹椋簦琛。穑幔悖耄幔颍溟_發(fā)。它的目標(biāo)是運(yùn)行于小內(nèi)存系統(tǒng)環(huán)境。典型的運(yùn)行于x86?。悖穑酢∩系模簦椋睿。螅澹颍觯澹颉〕叽缃咏ㄐ∮冢保恚??! 。保病。螅觯纾幔欤椋狻 。螅觯纾幔欤椋狻∈恰。欤椋睿酰∠到y(tǒng)中最早出現(xiàn)的非?。D形支持庫。這個庫從最初對標(biāo)準(zhǔn)?。觯纾帷〖嫒菪酒闹С珠_始,一直發(fā)展到對老式?。螅觯纾帷⌒酒闹С忠约皩ΜF(xiàn)今流行的高級視頻芯片的支持。它為用戶提供了在控制臺上進(jìn)行圖形編程的接口,使用戶可以在?。穑恪〖嫒菹到y(tǒng)上方便地獲得圖形支持。但該系統(tǒng)有如下不足: 接口雜亂。svgalib 從最初的 vgalib 發(fā)展而來,保留了老系統(tǒng)的許多接口,而這些接口卻不能良好地迎合新顯示芯片的圖形能力。 未能較好地隱藏硬件細(xì)節(jié)。許多操作,不能自動使用顯示芯片的加速能力支持。 可移植性差。svgalib 目前只能運(yùn)行在 x86 平臺上,對其他平臺的支持能力較差(alpha 平臺除外)?! “l(fā)展緩慢,有被其他圖形庫取代的可能。svgalib 作為一個老的圖形支持庫,目前的應(yīng)用范圍越來越小,尤其在 linux 內(nèi)核增加了?。妫颍幔恚澹猓酰妫妫澹颉◎?qū)動支持之后,有逐漸被其他圖形庫替代的跡象?! ?yīng)用的支持能力較差。svaglib 作為一個圖形庫,對高級圖形功能的支持,比如直線和曲線等等,卻不能令人滿意。盡管?。螅觯纾幔欤椋狻∮性S多缺點(diǎn),但?。螅觯纾幔欤椋狻〗?jīng)常被其他圖形庫用來初始化特定芯片的顯示模式,并獲得映射到進(jìn)程地址空間的線性顯示內(nèi)存首地址(即幀緩沖區(qū)),而其他的接口卻很少用到。另外,svgalib 中所包含的諸如鍵盤、鼠標(biāo)和游戲桿的接口,也很少被其他應(yīng)用程序所使用?! ∫虼?,svgalib 的使用越來越少,筆者也不建議用戶使用這個圖形庫。當(dāng)然,如果用戶的顯示卡只支持標(biāo)準(zhǔn) vga 模式,則 svgalib 還是比較好的選擇?! 。保场。妫颍幔恚澹猓酰妫妫澹颉 。妫颍幔恚澹猓酰妫妫澹颉∈浅霈F(xiàn)在 2.2.xx 內(nèi)核當(dāng)中的一種驅(qū)動程序接口。這種接口將顯示設(shè)備抽象為幀緩沖區(qū)。用戶可以將它看成是顯示內(nèi)存的一個映像,將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀寫操作,而寫操作可以立即反應(yīng)在屏幕上。該驅(qū)動程序的設(shè)備文件一般是 /dev/fb0、/dev/fb1 等等。比如,假設(shè)現(xiàn)在的顯示模式是?。保埃玻矗罚叮福浮∥簧瑒t可以通過如下的命令清空屏幕: ?。ぁ。?/p>