Framebuffer 字面意思就是幀緩存的意思,即顯存,里面保存著一幀圖像。事實上,對于嵌入式系統(tǒng)而言。沒有真正意義上的顯存,F(xiàn)ramebuffer 是通過內(nèi)存模擬出來的。
一、LCD FrameBuffer 里的若干字節(jié)表示(具體根據(jù)驅(qū)動適配),LCD 屏幕上的一個像素點。
(1)RGB888:32bpp,占4字節(jié),分別是A8、R8、G8、B8,一般只用其中低24位,高8位表示透明度。
(2)RGB565:16bpp,占2字節(jié),分別是R5、G6、B5,比較常用的一種顏色
(3)RGB555:很少用。
假設(shè)LCD屏幕分辨率是800x600,每個像素占4字節(jié),那么framebuffer 大小就是:
800x600x4=1920000字節(jié)
二、fb與應(yīng)用程序的互交:
對于應(yīng)用程序而言,它和其它的設(shè)備并沒有什么區(qū)別,用戶可以把fb看成是一塊內(nèi)存,既可以向內(nèi)存中寫數(shù)據(jù),也可以讀數(shù)據(jù)。fb的顯示緩沖區(qū)位于內(nèi)核空間。應(yīng)用程序可以把此空間映射到自己的用戶空間,再進行操作。
三、在應(yīng)用程序中,操作/dev/fbn的一般步驟如下:
(1)打開/dev/fbn設(shè)備文件。
(2)用ioctl()操作取得當(dāng)前顯示屏幕的參數(shù),如屏幕的分辨率、每個像素點的比特數(shù)。根據(jù)屏幕的參數(shù)可計算屏幕緩沖區(qū)的大小。
(3)用mmap()函數(shù),將屏幕緩沖區(qū)映射到用戶空間。
(4)映射后就可以直接讀/寫屏幕緩沖區(qū),進行繪圖和圖片顯示。