1.Linux幀緩沖子系統(tǒng)
幀緩沖(FrameBuffer)是Linux為顯示設(shè)備提供的一個接口,用戶可以將幀緩沖看成是顯示內(nèi)存的一種映像,將其映射到進程地址空間之后,就可以直接進行讀寫操作,而寫操作可以立即反映到屏幕上,這種操作是抽象和統(tǒng)一的,用戶不必關(guān)心顯存的位置、換頁機制等具體細(xì)節(jié),這些都是由FrameBuffer設(shè)備驅(qū)動來實現(xiàn),幀緩沖把顯示設(shè)備描述成一個緩沖區(qū),允許應(yīng)用程序通過幀緩沖定義好的接口訪問這些圖形設(shè)備,從而不用關(guān)心具體的硬件細(xì)節(jié)。個人感覺,更抽象一點,幀緩沖從本質(zhì)上是圖形設(shè)備的硬件抽象,對于我們開發(fā)者而言,幀緩沖是一種顯示緩存,向顯示緩存寫入特定格式的數(shù)據(jù)就意味著向屏幕輸出內(nèi)容,通過不斷向幀緩存中寫入數(shù)據(jù),顯示控制器會自動從幀緩沖中取數(shù)據(jù)并顯示出來。FrameBuffer的設(shè)備文件一般是dev/fb0、dev/fb1等,最多支持32個設(shè)備,F(xiàn)rameBuffer是個字符設(shè)備,主設(shè)備號是29,對應(yīng)于/dev/fb%d設(shè)備文件,對于我們驅(qū)動工程師而言,F(xiàn)rameBuffer設(shè)備和其他的文件沒有區(qū)別,可以通過配置對FrameBuffer設(shè)備文件完成對硬件的參數(shù)設(shè)置,F(xiàn)ramebuffer對應(yīng)的源文件在linux/drivers/video/目錄下??偟某橄笤O(shè)備文件為fbcon.c,在這個目錄下還有與各種顯卡驅(qū)動相關(guān)的源文件。
在應(yīng)用程序中,一般通過將 FrameBuffer 設(shè)備映射到進程地址空間的方式使用,比如下面的程序就打開 /dev/fb0 設(shè)備,并通過 mmap 系統(tǒng)調(diào)用進行地址映射,隨后用 memset 將屏幕清空(這里假設(shè)顯示模式是 1024x768-8 位色模式,線性內(nèi)存模式):
int fb;