幀緩衝儲存器

2021-06-12 20:22:44 字數 1811 閱讀 3002

幀緩衝儲存器(frame buffer):簡稱幀快取或視訊記憶體,它是螢幕所顯示畫面的乙個直接映象,又稱為位對映圖(bit map)或光柵。幀快取的每一儲存單元對應螢幕上的乙個畫素,整個幀快取對應一幀影象。

幀緩衝是linux為顯示裝置提供的乙個介面,把視訊記憶體抽象後的一種裝置,他允許上層應用程式在圖形模式下直接對顯示緩衝區進行讀寫操作。這種操作是抽象的,統一的。使用者不必關心物理視訊記憶體的位置、換頁機制等等具體細節。這些都是由framebuffer裝置驅動來完成的。

幀緩衝驅動的應用廣泛,在linux的桌面系統中,xwindow伺服器就是利用幀緩衝進行視窗的繪製。尤其是通過幀緩衝可顯示漢字點陣,成為linux漢化的唯一可行方案。

linux 幀快取本質上只是提供了對圖形裝置的硬體抽象,在開發者看來,幀快取是一塊顯示快取,往顯示快取中寫入特定格式的資料就意味著向螢幕輸出內容。所以說framebuffer就是一塊白板。例如對於初始化為16位色的幀快取來說,幀快取中的兩個位元組代表螢幕上乙個點,從上到下,從左至右,螢幕位置與記憶體位址是順序的線性關係。

幀快取有個位址,是在記憶體裡。我們通過不停的向幀快取中寫入資料,顯示控制器就自動的從幀快取中取資料並顯示出來。全部的圖形都共享記憶體中同乙個幀快取。

cpu指定顯示控制器工作,則顯示控制器根據cpu的控制到指定的地方去取資料和指令,目前的資料一般是從視訊記憶體裡取,如果視訊記憶體裡存不下,則從記憶體裡取,記憶體也放不下,則從硬碟裡取。當然如果不是記憶體放不下,而是為了節省記憶體的話,也可以放在硬碟裡,然後通過指令控制顯示控制器去取。幀快取裡面儲存的東西是一幀一幀的,顯示卡會不停的重新整理幀快取,一幀如果不捕獲的話,則會被丟棄,也就是說是實時的。這每一幀不管是儲存在記憶體還是視訊記憶體裡,都是乙個顯性的資訊,這每一幀假設是800x600的解析度,則儲存的是800x600個畫素點和顏色值。

幀緩衝裝置對應的裝置檔案為/dev/fb*,如果系統有多個顯示卡,linux下還可支援多個幀緩衝裝置,最多可達32個,分別為/dev/fb0到/dev/fb31,而/dev/fb則為當前預設的幀緩衝裝置,通常指向/dev/fb0。當然在嵌入式系統中支援乙個顯示裝置就夠了。幀緩衝裝置為標準字元裝置,主裝置號為29,次裝置號則從0到31。分別對應/dev/fb0~/dev/fb31。通過/dev/fb,應用程式的操作主要有這幾種:

1.讀/寫(read/write)/dev/fb:相當於讀/寫螢幕緩衝區。例如用cp /dev/fb0 tmp命令可將當前螢幕的內容拷貝到乙個檔案中,而命令cp tmp > /dev/fb0則將圖形檔案tmp顯示在螢幕上。

2.對映(map)操作:由於linux工作在保護模式,每個應用程式都有自己的虛擬位址空間,在應用程式中是不能直接訪問物理緩衝區位址的。為此,linux在檔案操作 file_operations結構中提供了mmap函式,可將檔案的內容對映到使用者空間。對於幀緩衝裝置,則可通過對映操作,可將螢幕緩衝區的物理位址對映到使用者空間的一段虛擬位址中,之後使用者就可以通過讀寫這段虛擬位址訪問螢幕緩衝區,在螢幕上繪圖了。實際上,使用幀緩衝裝置的應用程式都是通過對映操作來顯示圖形的。由於對映操作都是由核心來完成,下面我們將看到,幀緩衝驅動留給開發人員的工作並不多。

3.i/o控制:對於幀緩衝裝置,對裝置檔案的ioctl操作可讀取/設定顯示裝置及螢幕的引數,如解析度,顯示顏色數,螢幕大小等等。ioctl的操作是由底層的驅動程式來完成的。 

在應用程式中,操作/dev/fb的一般步驟如下: 

1.開啟/dev/fb裝置檔案。

2.用ioctl操作取得當前顯示螢幕的引數,如螢幕解析度,每個畫素點的位元數。根據螢幕引數可計算螢幕緩衝區的大小。

3.將螢幕緩衝區對映到使用者空間。

4.對映後就可以直接讀寫螢幕緩衝區,進行繪圖和顯示了。

典型程式段如下: 

int main()  

幀緩衝驅動程式設計

視訊記憶體 幀緩衝 顯示快取 framebuffer從本質上講是圖形裝置的硬體抽象。對開發者而言,framebuffer是一塊顯示快取,往顯示快取中寫入特定格式的資料就意味著向螢幕輸出內容。通過不斷的向frame buffer中寫入資料,顯示控制器就自動的從frame buffer中取資料並顯示出來...

虛擬幀緩衝驅動

嵌入式linux系統開發全程解析 是一本全面介紹嵌入式linux開發的專著,書中涵蓋了程式生成工具 除錯工具 引導載入器 linux系統結構 linux核心 驅動程式 使用者空間程式設計 使用者空間中介軟體等方面的內容。嵌入式linux系統開發全程解析 內容前後照應 貼近實踐,且有較強的延伸型,有利...

cache 高速緩衝儲存器

cache 高速緩衝儲存器 一種特殊的儲存器子系統,其中複製了頻繁使用的資料以利於快速訪問。儲存器的高速緩衝儲存器儲存了頻繁訪問的 ram 位置的內容及這些資料項的儲存位址。當處理器引用儲存器中的某位址時,高速緩衝儲存器便檢查是否存有該位址。如果存有該位址,則將資料返回處理器 如果沒有儲存該位址,則...