回覆列表
  • 1 # 藍風24

    幀緩衝(framebuffer)是 Linux 為顯示裝置提供的一個介面,把視訊記憶體抽象後的一種裝置,他允許上層應用程式在圖形模式下直接對顯示緩衝區進行讀寫操作。這種操作是抽象的,統一的。使用者不必關心物理視訊記憶體的位置、換頁機制等等具體細節。這些都是由Framebuffer 裝置驅動來完成的。幀緩衝驅動的應用廣泛,在 linux 的桌面系統中,Xwindow 伺服器就是利用幀緩衝進行視窗的繪製。尤其是透過幀緩衝可顯示漢字點陣,成為 Linux漢化的唯一可行方案。

    幀緩衝裝置對應的裝置檔案為/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.用 ioctrl 操作取得當前顯示螢幕的引數,如螢幕解析度,每個畫素點的位元數。根據螢幕引數可計算螢幕緩衝區的大小。

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

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

  • 中秋節和大豐收的關聯?
  • 太陽死亡前將大量拋灑物質,木星則會大量捕獲物質,它會變成恆星嗎?