2010-03-23 31 views
15

有沒有關於如何編寫在Linux中使用framebuffer設備的軟件的文檔?我看到一些簡單的例子,基本上說:「打開它,將其映射到映射區域。」但沒有關於如何使用不同的IOCTLS來完成任何事情的全面文檔。我已經看到了對「平移」和其他功能的引用,但「使用它」會導致太多無用信息的點擊。Framebuffer文檔

編輯: 從編程的角度來看,是唯一的文檔,而不是「用戶如何配置系統以使用fb」文檔代碼?

回答

0

任何啓動畫面的來源(即啓動時)都會給你一個很好的開始。

+3

這是一個位通用,雅可以給我一個更具體的方向看? – NoMoreZealots 2010-03-24 20:11:15

1

看看任何的源代碼:fbxat,fbida,fbterm,fbtv,directFB庫,libxineliboutput-fbe,ppmtofb,xserver-fbdev都是debian軟件包應用程序。只需從debian庫中獲取源代碼即可。還有很多其他的...

提示:使用您最喜愛的包管理器在包描述中搜索framebuffer。

好的,即使讀取代碼有時也被稱爲「Guru文檔」,但實際上它可能有點太多了。

+0

對於這樣的情況,每個人和那裏的兄弟都在寫自己的版本,問題是如果沒有指導開發人員通過實現API的文檔,則從一個到下一個的行爲可能不一樣。我正在研究PS3 Linux實現的源代碼,你可以看到有些功能似乎被忽略。 – NoMoreZealots 2010-06-21 17:13:55

+0

@NoMoreZealots:是的,具有最佳實踐指南的真實文檔將是一件非常好的事情。我真的不知道一個(所以我upvoted你的問題),我的回答是一種笑話;-)你可能不得不寫一個... – kriss 2010-06-21 20:13:25

2

- 看起來可能沒有太多的選項可以用桌面上用戶空間的fb編程,超出了你提到的範圍。這可能是爲什麼一些文檔太舊的原因之一。請看設備驅動程序編寫者的這個howto,它是從一些官方linux文檔引用的:www.linux-fbdev.org [斜槓] HOWTO [斜槓] index.html。它沒有引用太多的接口..儘管查看Linux源代碼樹確實提供了更大的代碼示例。

- opentom.org [slash] Hardware_Framebuffer不適用於桌面環境。它強化了主要的方法,但它似乎避免解釋所有必要的要素來完成它所提及的「快速」雙緩衝區切換。另一個用於不同設備,並留下一些關鍵緩衝細節的wiki.gp2x.org [slash]維基[斜槓] Writing_to_the_framebuffer_device,儘管它至少表明你可能會使用fb1和fb0來進行雙緩衝(在此設備..但對於桌面,fb1可能不可能或者它可能訪問不同的硬件),使用volatile關鍵字可能是適當的,我們應該注意vsync。 (?)只做基本的查詢,打開,設置一些基本知識,mmap,繪製像素值存儲和複製到fb內存(確保使用一個短暫的stosb循環,我想,而不是一些更長的方法)。

- 當谷歌搜索Linux幀緩衝區時,要小心16 bpp的註釋:我在X會話期間使用fbgrab和fb2png無濟於事。這些圖像都呈現出一張圖像,表明我的桌面屏幕快照,就好像桌面圖像是使用非常糟糕的相機拍攝的,在水下拍攝,然後在黑暗的房間中曝光過度。圖像的顏色,尺寸完全被破壞,並且丟失了很多細節(全部用不屬於像素的顏色點綴)。看起來,我使用的計算機上的/ proc/sys(從PCLOS衍生產品的最小修改中得到的新內核)聲稱fb0使用16 bpp,而且我搜索的大部分內容都說明了這些內容,但實驗使我轉向一個非常不同的結論。除了標準幀緩衝區抓取工具(對於這個發行版本持有的版本)可能假定16位的這兩個失敗的結果之外,我有一個不同的成功測試結果,將幀緩衝器像素數據視爲32位。我通過cat/dev/fb0中的數據創建了一個文件。該文件的大小最終爲1920000.然後,我編寫了一個小型C程序來嘗試和操作這些數據(假設它是一些編碼或其他編碼中的像素數據)。我最終確定了它,並且像素格式與查詢時從X獲得的像素格式完全匹配(TrueColor RGB 8位,無alpha但填充到32位)。注意另一個線索:我的屏幕分辨率800x600乘以4個字節準確地給出1920000。我最初嘗試的16位方法都產生了與fbgrap類似的破碎圖像,因此,如果我可能沒有查看正確的數據,這並不是。 [讓我知道你是否想要我用來測試數據的代碼。基本上我剛讀在整個FB0轉儲再吐出回給文件,將報頭添加「P6 \ N800 600 \ N255 \ n」個創建該合適的PPM文件,一邊遍歷所有像素操縱它們的順序或後擴展它們,最終成功的結果是我每丟掉一個第四個字節,並在第四個字節單元中切換第一個和第三個字節。簡而言之,我將明顯的BGRA fb0轉儲轉換爲ppm RGB文件。 PPM可以在Linux上許多PIC觀衆觀看]

- 你可能要重新考慮的原因,希望使用FB0編程(這也可以解釋爲什麼存在幾個例子)。在放棄使用X的好處的同時,您可能無法實現任何超過X的有價值的性能提升(這是我的經驗,如果有限的話)。這個原因也可能解釋爲什麼只有很少的代碼示例存在。

- 請注意,DirectFB的不是FB。 DirectFB最近獲得的愛比舊款fb更多,因爲它更專注於性感的3d hw加速。如果你想在不使用3D硬件加速器(或者甚至是2d加速器)的情況下儘可能快地渲染到桌面屏幕,那麼fb可能沒問題,但不會給你任何X不給你的東西。 X顯然使用FB,以及相對於其他費用你的程序將有可能(不叫X任何緊密的循環,而是在最後,一旦你已經設置了所有像素的幀)的開銷可能是可以忽略不計。另一方面,它可以整潔地玩fb,如本評論所述:Paint Pixels to Screen via Linux FrameBuffer

2

檢查MPlayer來源。

/libvo目錄下有很多Video Player插件用於Mplayer顯示多媒體。在那裏,你可以找到它使用Linux的幀緩衝區的的fbdev(vo_fbdev *源)插件。

有很多ioctl調用的,用以下代碼:

  • FBIOGET_VSCREENINFO
  • FBIOPUT_VSCREENINFO
  • FBIOGET_FSCREENINFO
  • FBIOGETCMAP
  • FBIOPUTCMAP
  • FBIOPAN_DISPLAY

這不像一個很好的文檔,但這無疑是一個很好的應用程序實現。