framebuffer驱动全篇

上传人:M****1 文档编号:489019524 上传时间:2023-08-01 格式:DOC 页数:18 大小:585KB
返回 下载 相关 举报
framebuffer驱动全篇_第1页
第1页 / 共18页
framebuffer驱动全篇_第2页
第2页 / 共18页
framebuffer驱动全篇_第3页
第3页 / 共18页
framebuffer驱动全篇_第4页
第4页 / 共18页
framebuffer驱动全篇_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《framebuffer驱动全篇》由会员分享,可在线阅读,更多相关《framebuffer驱动全篇(18页珍藏版)》请在金锄头文库上搜索。

1、framebuffer 驱动全篇在后续的几篇里面会详细介绍如何编写一个显卡的驱动程序。framebuffer device在内核里面作为显卡驱动模型,许多函数和数据结构都是特定,正是这些特定的东西为我们的编程 提供了方便。要开发frame buffer device驱动,你应该阅读 SourceSourceDocumentationfb下面的说明文件,三个重要文件OO-INDEX,framebuffer.txt , internals.txt,其他文件都是针对具体显卡芯片的说明了。文件OO-INDEX译文文档/documentation/fb 的索引 文件。女口果你对frame buffer

2、设备 有 什 么想 法,mail : Geert Uytterhoeven00-index这个文件framebuffer.txt- frame buffer设备介绍internals.txt-frame buffer 设备内部快速浏览modedb.txt-关于视频模式的资料aty128fb.txt-关于 ATI Rage128 显卡的 frame buffer 设备clgenfb.txt 关于 Cirrus Logi c 的显卡matroxfb.txt-关于 Matrox 的显卡pvr2fb.txt-关于 PowerVR 2 的显卡tgafb.txt-关于 TGA( DECChip 21030

3、 )显卡vesafb.txt-关于 VESA 显卡帧缓冲设备(framebuffer.txt 译文)维护:Geert Uytterhoeven最后校正:May 10, 2001翻译:0.介绍帧缓冲设备提供了显卡的抽象描述。他同时代表了显卡上的显存,应用程序通过定义好的接口可以访问显卡,而不需要 知道底层的任何操作。该设备使用特殊的设备节点,通常位于/dev目录,女口 /dev/fb*.1. 用户角度的/dev/fb*从用户的角度看,帧缓冲设备和其他位于/dev下面的设备类似。他是一个字符设备,通常主设备号是29,次设备号定义帧缓冲的个数。通常,使用如下方式(前面的数字代码次设备号)0 = /d

4、ev/fb0 First frame buffer1 = /dev/fb1 Second frame buffer31 = /dev/fb31 32nd frame buffer考虑到向下兼容,你可以创建符号链接:/dev/fb0current - fb0/dev/fb1current - fb1 and so on. 帧缓冲设备也是一种普通的内存设备,你可以读写其内容。例如,对屏幕抓屏:cp /dev/fb0 myfile 你也可以同时有多个显示设备,例如你的主板上出了内置的显卡还有另一独立的 显卡。对应的帧缓冲设备 (/dev/fb0 and /dev/fb1 etc.) 可以独立工作。应

5、用程序如 X server 一般使用 /dev/fb0 作为默认的显示帧缓冲区。你可以自定 把某个设备作为默认的帧缓冲设备,设置 $FRAMEBUFFER 环境变量即可。在 sh/bash : export FRAME BUFFER=/dev/fb1在 csh 中:setenv FRAME BUFFER /dev/fb1设定后, X server 将使用第二个帧缓冲区设备。2. 程序员角度看 /dev/fb* 正如你所知,一个帧缓冲设备和内存设备类似 /dev/mem ,并且有许多共性。你可以 read,write,seek 以及 mmap() 。不同仅仅是帧缓冲的内存不是所有的内存区,而是显

6、卡 专用的那部分内存。/dev/fb* 也允许尽心 ioctl 操作,通过 ioctl 可以读取或设定设备参数。颜色映射表 也是通过 Ioctl 设定。查看 就知道有多少 ioctl 应用以及相关数据结构。这里给出摘要:- 你可以获取设备一些不变的信息,如设备名,屏幕的组织(平面,象素,.) 对应内存区的长度和起始地址。- 也可以获取能够发生变化的信息,例如位深,颜色格式,时序等。如果你改变这些值, 驱动程序将对值进行优化,以满足设备特性(返回 EINVAL ,如果你的设定,设备不支持)- 你也可以获取或设定部分颜色表。所有这些特性让应用程序十分容易的使用设备。X server可以使用/dev

7、/fb*而不需知道硬件的寄存器是如何组织的。XF68_FBDev是一个用于位映射(单色)X server,唯一要做的就是在应用程序在相应的位置设定是否显示。在新内核中,帧缓冲设备可以工作于模块中,允许动态加载。这类驱动必须调用 register_framebuffer() 在系统中注册。使用模块更方便!3. 帧缓冲分辨率设定帧缓冲的分辨率可以用工具 fbset 设定。他可以改变视频设备的显示模式。主要就是 改变当前视频模式,如在启动过程中,在 /etc/rc.* 或 /etc/init.d/* 文件中调用, 可以把视频模式从单色显示变成真彩 .fbset 使用存储在配置文件中的视频模式数据表,

8、你可以在文件中增加自己需要的显示模式。4. X ServerX server (XF68_FBDev)是对帧缓冲设备的最主要应用。从 XFree86 3.2后,X server就是XFree86 的一部分了,有 2 个工作模式 :-在/etc/XF86Config 文件中,如果Display段关于fbdev的配置:Modes defaultX server将使用前面讨论的,从环境变量 $FRAMEBUFFE R获取当前帧缓冲设备. 你也可以设定颜色位深,使用 Depth 关键字,使用 Virtual 设定虚拟分辨率。这也是 默认设置。- 然而你也可以通过设定 /etc/XF86Config,

9、改变分辨率。这样有很多灵活性,唯一的 不足就是你必须设定刷新频率。可以用 fbset -x通过 fbset 或 xvidtune 切换显示模式。5. 视频模式频率CRT显示器是用3个电子枪轰击磷粉完成颜色的显示的。 电子枪从左到右的水平扫描,并从上至下的垂直扫描。通过改变枪的电压,所显示的颜色 可以不同。当电子枪完成一行扫描重新回到下一行的开始,被称作 “水平折回 ”。当一屏幕全部 扫描完毕,电子枪将回到最左上脚,被成为 “垂直折回 ”。在折回的途中电子枪是关闭的。电子枪打点的移动速度取决于点时钟。如果点时钟是 28.37516 MHz ,打一个点需要 35242 ps 。1/(28.3751

10、6E 6 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.113E 3 Hz一屏幕含有 480 行,加上垂直折回时间 49 ,一屏所需的时间:(480+49)*32.141E-6 s = 17.002E-3 s 我们就认为垂直扫描的频率是 59Hz :1/(17.002E

11、-3 s) = 58.815 Hz 这也意味着屏幕数据每秒钟刷新 59 次。为了得到稳定的图像显示效果, VESA 垂直扫描 频率不低于 72Hz 。但是也因人而异,有些人 50Hz 感觉不到任何问题,有些至少在 80Hz 以上才可以。由于显示器不知道什么时候新行开始扫描,显卡为每一行扫描提供水平同步信号。 类似的,他也为每一帧显示提供垂直同步信号。图像在屏幕上点的位置取决于这些 同步信号的发生时刻。下图给出了所有时序的概要。水平折回的时间就是左边空白右边空白水平同步长度。 垂直折回的时间就是上空白下空白垂直同步长。+ +-+IIAIIIupper_marginII?+#+I#A#III#I#

12、II#I#II#I#II left #I#rightI hsync II margin #Ixres#marginI len II#III#I#II#I#II#I#II#Iyres#II#I#II#I#II#I#II#I#II#I#II#I#II#I#II#I#II#?#II+#+II人III| | |low er_margin | | | | ?+ -+-+|A|vsync_len|?+ +6. 把 XFree86 时序变成 frame buffer device 时序 典型的显示模式:800x60050800856976 1040600 637 643 666DCFHRSH1SH2 HFL

13、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- low er_margin: time from picture to sync- hsync_len: length of hori z ontal sync- vsync_len: length of vertical sync1) Pixelclock:xfree: in MHzfb: in picoseconds (ps)pixclock = 1000000 / DCF2) horizontal timings: left_margin = HFL - SH2right_margin = SH1 - HR hsync_len = SH2 - SH13) vertical timings: upper_margin = VFL - SV2 low er_margin = SV1 - VR vsync_len = SV2 - SV1更好的 V

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号