framebuffer驱动全篇(一)--补

2008-12-31 21:21

一屏幕含有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的源码中找到,

"xc/programs/Xserver/hw/xfree86/doc/modeDB.txt".

7. 引用

获取更多关于帧缓冲设备以及应用的参考,请访问:

    http:/linux-fbdev.sourceforge.net/

或者查阅下面的文档:

- The manual pages for fbset: fbset(8), fb.modes(5)
- The manual pages for XFree86: XF68_FBDev(1), XF86Config(4/5)
- The mighty kernel sources:
      o linux/drivers/video/
      o linux/include/linux/fb.h
      o linux/include/video/  

 

帧缓冲设备的内部数据结构(internals.txt)

Geert Uytterhoeven , 21 July 1998

翻译:good02xaut@hotmail.com

       ××××帧缓冲设备中用到的结构体××××

       

以下数据结构在帧缓冲设备使用,定义 。       

1. Outside the kernel (user space)

- struct fb_fix_screeninfo

    帧缓冲设备中设备无关的常值数据信息。可以通过Ioctl的FBIOGET_FSCREENINFO获取。

- struct fb_var_screeninfo

    帧缓冲设备中设备无关的变量数据信息和特定的显示模式。可以通过iotcl的FBIOGET_VSCREENINFO

    获取,并通过ioctl的FBIOPUT_VSCREENINFO设定。还有FBIOPAN_DISPLAY可以用。

- struct fb_cmap

    设备无关的颜色表信息。你可以通过ioctl的FBIOGETCMAP 和 FBIOPUTCMAP读取或设定。

   

2. Inside the kernel

  

- struct fb_info

    常规信息,API以及帧缓冲设备的底层信息(主板地址...).

- struct `par'

    唯一指定该设备的显示模式的设备相关信息。

- struct display

    帧缓冲设备和控制台驱动之间的接口。
--------------------------------------------------------------------------------

        *** 常用的帧缓冲 API ***

Monochrome (FB_VISUAL_MONO01 and FB_VISUAL_MONO10)

-------------------------------------------------

每个象素是黑或白。

Pseudo color (FB_VISUAL_PSEUDOCOLOR and FB_VISUAL_STATIC_PSEUDOCOLOR)
---------------------------------------------------------------------

索引颜色显示

True color (FB_VISUAL_TRUECOLOR)
--------------------------------

真彩显示,分成红绿兰三基色

Direct color (FB_VISUAL_DIRECTCOLOR)
------------------------------------

每个象素颜色也是有红绿蓝组成,不过每个颜色值是个索引,需要查表。

Grayscale displays
------------------

灰度显示,红绿蓝的值都一样

 

准备开始写我们自己的驱动之前,请详细阅读如下文件:

/Documentation/fb目录 vesafb.txt,matroxfb.txt,sa1100fb.txt
/drivers/video目录          fbmem.c,fbgen.c,fbmon.c,fbcmap.c
                                      skeletonfb.c
                                      vesafb.c,sa1100fb.c,sa1100fb.h

include/linux目录            fb.h

最值得关注的是skeletonfb.c,该文件给出了一个fb device 驱动的框架

准备好了,就开始写自己的fram buffer device driver:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值