framebuffer的配置及应用

framebuffer的配置及应用

ID:30360843

大小:110.10 KB

页数:24页

时间:2018-12-29

framebuffer的配置及应用_第1页
framebuffer的配置及应用_第2页
framebuffer的配置及应用_第3页
framebuffer的配置及应用_第4页
framebuffer的配置及应用_第5页
资源描述:

《framebuffer的配置及应用》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Framebuffer的配置及应用*一、FrameBuffer的原理*FrameBuffer是出现在2.2.xx内核当中的一种驱动程序接口。Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反

2、应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。但Framebuffer本身不具备任何运算数据的能力,就只好比是一个暂时存放水的水池.CPU将运算后的结果放到这个水池,水池再将结果流到显示器.中间不会对数据做处理.应用程序也可以直接读写这个水池的内容.在这种机制下,尽管Framebuffer需要真正的显卡驱动的支持,但所有显示任务都有CPU完成,因此CPU负担很重.framebuffer的设备文件一般是/dev/fb0、/dev/fb1等等。可以用命令:#ddif=/dev/z

3、eroof=/dev/fb清空屏幕.如果显示模式是1024x768-8位色,用命令:$ddif=/dev/zeroof=/dev/fb0bs=1024count=768清空屏幕;用命令:#ddif=/dev/fbof=fbfile可以将fb中的内容保存下来;可以重新写回屏幕:#ddif=fbfileof=/dev/fb;在使用Framebuffer时,Linux是将显卡置于图形模式下的.在应用程序中,一般通过将FrameBuffer设备映射到进程地址空间的方式使用,比如下面的程序就打开/dev/fb0设备,并通过mmap系统调用进行地址映射,随后用memset将屏幕

4、清空(这里假设显示模式是1024x768-8位色模式,线性内存模式):intfb;unsignedchar*fb_mem;fb=open("/dev/fb0",O_RDWR);fb_mem=mmap(NULL,1024*768,PROT_READ

5、PROT_WRITE,MAP_SHARED,fb,0);memset(fb_mem,0,1024*76;FrameBuffer设备还提供了若干ioctl命令,通过这些命令,可以获得显示设备的一些固定信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫描线的字节宽度),以及伪彩色模式下的调色板信息等

6、等。通过FrameBuffer设备,还可以获得当前内核所支持的加速显示卡的类型(通过固定信息得到),这种类型通常是和特定显示芯片相关的。比如目前最新的内核(2.4.9)中,就包含有对S3、Matrox、nVidia、3Dfx等等流行显示芯片的加速支持。在获得了加速芯片类型之后,应用程序就可以将PCI设备的内存I/O(memio)映射到进程的地址空间。这些memio一般是用来控制显示卡的寄存器,通过对这些寄存器的操作,应用程序就可以控制特定显卡的加速功能。PCI设备可以将自己的控制寄存器映射到物理内存空间,而后,对这些控制寄存器的访问,给变成了对物理内存的访问。因此,

7、这些寄存器又被称为"memio"。一旦被映射到物理内存,Linux的普通进程就可以通过mmap将这些内存I/O映射到进程地址空间,这样就可以直接访问这些寄存器了。当然,因为不同的显示芯片具有不同的加速能力,对memio的使用和定义也各自不同,这时,就需要针对加速芯片的不同类型来编写实现不同的加速功能。比如大多数芯片都提供了对矩形填充的硬件加速支持,但不同的芯片实现方式不同,这时,就需要针对不同的芯片类型编写不同的用来完成填充矩形的函数。FrameBuffer只是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的设备。所以,对于应用程序而言,如果希望在F

8、rameBuffer之上进行图形编程,还需要自己动手完成其他许多工作。*二、FrameBuffer在Linux中的实现和机制*Framebuffer对应的源文件在linux/drivers/video/目录下。总的抽象设备文件为fbcon.c,在这个目录下还有与各种显卡驱动相关的源文件。(一)、分析Framebuffer设备驱动需要特别提出的是在INTEL平台上,老式的VESA1.2卡,如CGA/EGA卡,是不能支持Framebuffer的,因为Framebuffer要求显卡支持线性帧缓冲,即CPU可以访问显缓冲中的每一位,但是VESA1.2卡只能允许CPU一次

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。