大地资源网视频在线观看新浪,日本春药精油按摩系列,成人av骚妻潮喷,国产xxxx搡xxxxx搡麻豆

您現在的位置:智能制造網>技術中心>framebuffer驅動全篇

直播推薦

更多>

企業動態

更多>

推薦展會

更多>

framebuffer驅動全篇

2009年05月14日 17:20:38人氣:4376來源:杭州市立宇泰電子有限公司

framebuffer驅動全篇
作者:good02xaut    轉貼自:    點擊數:586    更新時間:2006-5-8    文章錄入:admin

在后續的幾篇里面會詳細介紹如何編寫一個顯卡的驅動程序。
framebuffer device在內核里面作為顯卡驅動模型,許多函數和數據結構都是特定,正是這些特定的東西為我們的編程提供了方便。

要開發frame buffer device驅動,你應該閱讀Source\Source\Documentation\fb下面的說明文件,三個重要文件00-INDEX,framebuffer.txt,internals.txt,其他文件都是針對具體顯卡芯片的說明了。


文件00-INDEX譯文

文檔/documentation/fb的索引文件。如果你對frame buffer設備有什么想法,mail:Geert Uytterhoeven <geert@>

00-index 這個文件
framebuffer.txt--- frame buffer 設備介紹
internals.txt----frame buffer設備內部快速瀏覽
modedb.txt----關于視頻模式的資料
aty128fb.txt----關于ATI Rage128顯卡的frame buffer設備
clgenfb.txt-----關于Cirrus Logic的顯卡
matroxfb.txt----關于Matrox的顯卡
pvr2fb.txt----關于PowerVR 2的顯卡
tgafb.txt----關于TGA(DECChip 21030)顯卡
vesafb.txt----關于VESA顯卡

幀緩沖設備(framebuffer.txt譯文)

維護: Geert Uytterhoeven

zui后校正:   May 10, 2001

翻譯:good02xaut@

0.介紹

幀緩沖設備提供了顯卡的抽象描述。他同時代表了顯卡上的顯存,應用程序通過定義好的接口可以訪問顯卡,而不需要知道底層的任何操作。

 

該設備使用特殊的設備節點,通常位于/dev目錄,如/dev/fb*.

 

1.用戶角度的/dev/fb*

從用戶的角度看,幀緩沖設備和其他位于/dev下面的設備類似。他是一個字符設備,通常

主設備號是29,次設備號定義幀緩沖的個數。

 

通常,使用如下方式(前面的數字代碼次設備號)

        0 = /dev/fb0    First frame buffer
        1 = /dev/fb1    Second frame buffer
      ...
        31 = /dev/fb31  32nd frame buffer

    

考慮到向下兼容,你可以創建符號鏈接:

      /dev/fb0current -> fb0
     /dev/fb1current -> fb1

and so on...

 

幀緩沖設備也是一種普通的內存設備,你可以讀寫其內容。例如,對屏幕抓屏:

  cp /dev/fb0 myfile

你也可以同時有多個顯示設備,例如你的主板上出了內置的顯卡還有另一獨立的

顯卡。對應的幀緩沖設備(/dev/fb0 and /dev/fb1 etc.)可以獨立工作。

 

應用程序如 X server一般使用/dev/fb0作為默認的顯示幀緩沖區。你可以自定

把某個設備作為默認的幀緩沖設備,設置$FRAMEBUFFER環境變量即可。在sh/bash:

    export FRAMEBUFFER=/dev/fb1

在csh中:

    setenv FRAMEBUFFER /dev/fb1

   

設定后,X server將使用第二個幀緩沖區設備。

 

2.程序員角度看/dev/fb*

正如你所知,一個幀緩沖設備和內存設備類似/dev/mem,并且有許多共性。你可以

read,write,seek以及mmap()。不同僅僅是幀緩沖的內存不是所有的內存區,而是顯卡

的那部分內存。

 

/dev/fb*也允許盡心ioctl操作,通過ioctl可以讀取或設定設備參數。顏色映射表

也是通過Ioctl設定。查看 就知道有多少ioctl應用以及相關數據結構。

這里給出摘要:

 

  - 你可以獲取設備一些不變的信息,如設備名,屏幕的組織(平面,象素,...)對應內存區

    的長度和起始地址。

  - 也可以獲取能夠發生變化的信息,例如位深,顏色格式,時序等。如果你改變這些值,

    驅動程序將對值進行優化,以滿足設備特性(返回EINVAL,如果你的設定,設備不支持)

  - 你也可以獲取或設定部分顏色表。

 

 所有這些特性讓應用程序十分容易的使用設備。X server可以使用/dev/fb*而不需知道硬件

 的寄存器是如何組織的。 XF68_FBDev是一個用于位映射(單色)X server,*要做的就是

 在應用程序在相應的位置設定是否顯示。

 

 在新內核中,幀緩沖設備可以工作于模塊中,允許動態加載。這類驅動必須調用

 register_framebuffer()在系統中注冊。使用模塊更方便!

 

3.幀緩沖分辨率設定

 

幀緩沖的分辨率可以用工具fbset設定。他可以改變視頻設備的顯示模式。主要就是

改變當前視頻模式,如在啟動過程中,在/etc/rc.* 或 /etc/init.d/* 文件中調用,

可以把視頻模式從單色顯示變成真彩.

 

fbset使用存儲在配置文件中的視頻模式數據表,你可以在文件中增加自己需要的顯示模式。

 

4.X Server

 

X server (XF68_FBDev)是對幀緩沖設備的zui主要應用。從XFree86  3.2后,X server就是

XFree86 的一部分了,有2個工作模式:

 

  - 在/etc/XF86Config文件中,如果`Display"段關于 `fbdev"的配置:

    Modes "default"

    X server 將使用前面討論的,從環境變量$FRAMEBUFFER獲取當前幀緩沖設備.
    你也可以設定顏色位深,使用Depth關鍵字,使用Virtual設定虛擬分辨率。這也是

    默認設置。
   

  - 然而你也可以通過設定/etc/XF86Config,改變分辨率。這樣有很多靈活性,*的

    不足就是你必須設定刷新頻率。可以用fbset -x

通過fbset或xvidtune切換顯示模式。

 

5.視頻模式頻率

 

CRT顯示器是用3個電子槍轟擊磷粉完成顏色的顯示的。

電子槍從左到右的水平掃描,并從上至下的垂直掃描。通過改變槍的電壓,所顯示的顏色

可以不同。

當電子槍完成一行掃描重新回到下一行的開始,被稱作“水平折回”。當一屏幕全部

掃描完畢,電子槍將回到zui左上腳,被成為“垂直折回”。在折回的途中電子槍是關閉的。

 

電子槍打點的移動速度取決于點時鐘。如果點時鐘是28.37516 MHz,打一個點需要

35242 ps。

    1/(28.37516E6 Hz) = 35.242E-9 s

 

如果屏幕分辨率是640x480,那么一行的時間是:

        640*35.242E-9 s = 22.555E-6 s

然而水平折回也是需要時間的,通常272個打點時間,因此一行總共需要:

        (640+272)*35.242E-9 s = 32.141E-6 s

我們就認為水平掃描的頻率是31KHz:      

        1/(32.141E-6 s) = 31.113E3 Hz

 

一屏幕含有480行,加上垂直折回時間49,一屏所需的時間:

        (480+49)*32.141E-6 s = 17.002E-3 s

我們就認為垂直掃描的頻率是59Hz:

        1/(17.002E-3 s) = 58.815 Hz

這也意味著屏幕數據每秒鐘刷新59次。為了得到穩定的圖像顯示效果,VESA垂直掃描

頻率不低于72Hz。但是也因人而異,有些人50Hz感覺不到任何問題,有些至少在

80Hz以上才可以。

 

由于顯示器不知道什么時候新行開始掃描,顯卡為每一行掃描提供水平同步信號。

類似的,他也為每一幀顯示提供垂直同步信號。圖像在屏幕上點的位置取決于這些

同步信號的發生時刻。

 

下圖給出了所有時序的概要。水平折回的時間就是左邊空白+右邊空白+水平同步長度。

垂直折回的時間就是上空白+下空白+垂直同步長。     
  +----------+---------------------------------------------+----------+-------+
  |          |                ^                            |          |       |
  |          |                |upper_margin                |          |       |
  |          |                ?                           |          |       |
  +----------###############################################----------+-------+
  |          #                ^                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |   left   #                |                            #  right   | hsync |
  |  margin  #                |       xres                 #  margin  |  len  |
  |<-------->#<---------------+--------------------------->#<-------->|<----->|
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |yres                        #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                |                            #          |       |
  |          #                ?                           #          |       |
  +----------###############################################----------+-------+
  |          |                ^                            |          |       |
  |          |                |lower_margin                |          |       |
  |          |                ?                           |          |       |
  +----------+---------------------------------------------+----------+-------+
  |          |                ^                            |          |       |
  |          |                |vsync_len                   |          |       |
  |          |                ?                           |          |       |
  +----------+---------------------------------------------+----------+-------+

  

6.把XFree86時序變成frame buffer device時序

典型的顯示模式:

  "800x600"     50      800  856  976 1040    600  637  643  666
 < name >     DCF       HR  SH1  SH2  HFL     VR  SV1  SV2  VFL  

 

 而幀緩沖設備使用下面的參數:

  - pixclock: 點時鐘 in ps (pico seconds)
  - left_margin: time from sync to picture
  - right_margin: time from picture to sync
  - upper_margin: time from sync to picture
  - lower_margin: time from picture to sync
  - hsync_len: length of horizontal sync
  - vsync_len: length of vertical sync

 

1) Pixelclock:
   xfree: in MHz
   fb: in picoseconds (ps)

   pixclock = 1000000 / DCF

2) horizontal timings:
   left_margin = HFL - SH2
   right_margin = SH1 - HR
   hsync_len = SH2 - SH1

3) vertical timings:
   upper_margin = VFL - SV2
   lower_margin = SV1 - VR
   vsync_len = SV2 - SV1

 

更好的VESA的例子可以在XFree86的源碼中找到,

 

關鍵詞:顯示器
全年征稿/資訊合作 聯系郵箱:1271141964@qq.com

免責聲明

  • 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.xashilian.com。違反者本網將追究相關法律責任。
  • 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
  • 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
  • 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。

<
更多 >

工控網機器人儀器儀表物聯網3D打印工業軟件金屬加工機械包裝機械印刷機械農業機械食品加工設備制藥設備倉儲物流環保設備造紙機械工程機械紡織機械化工設備電子加工設備水泥設備海洋水利裝備礦冶設備新能源設備服裝機械印染機械制鞋機械玻璃機械陶瓷設備橡塑設備船舶設備電子元器件電氣設備


我要投稿
  • 投稿請發送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
  • 聯系電話0571-89719789
工業4.0時代智能制造領域“互聯網+”服務平臺
智能制造網APP

功能豐富 實時交流

智能制造網小程序

訂閱獲取更多服務

微信公眾號

關注我們

抖音

智能制造網

抖音號:gkzhan

打開抖音 搜索頁掃一掃

視頻號

智能制造網

公眾號:智能制造網

打開微信掃碼關注視頻號

快手

智能制造網

快手ID:gkzhan2006

打開快手 掃一掃關注
意見反饋
關閉
企業未開通此功能
詳詢客服 : 0571-87858618
主站蜘蛛池模板: 唐山市| 嘉黎县| 汕尾市| 犍为县| 泗水县| 偃师市| 武汉市| 广河县| 商河县| 巴林右旗| 灵山县| 澳门| 凌云县| 栾城县| 景洪市| 临西县| 龙游县| 广丰县| 平原县| 卫辉市| 湘潭县| 铜鼓县| 罗平县| 古蔺县| 拉孜县| 郁南县| 林芝县| 兴宁市| 全椒县| 大丰市| 左权县| 龙里县| 安仁县| 沙湾县| 新龙县| 安福县| 濉溪县| 自治县| 平果县| 乌鲁木齐县| 迁安市|