FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。该驱动程序的设备文件一般是 /dev/fb0、/dev/fb1 等等。比如,假设现在的显示模式是 1024x768-8 位色,则可以通过如下的命令清空屏幕:
$ dd if=/dev/zero of=/dev/fb0 bs=1024 count=768
在应用程序中,一般通过将 FrameBuffer 设备映射到进程地址空间的方式使用,比如下面的程序就打开 /dev/fb0 设备,并通过 mmap 系统调用进行地址映射,随后用 memset 将屏幕清空(这里假设显示模式是 1024x768-8 位色模式,线性内存模式):
int fb;
unsigned char* fb_mem;
fb = open ("/dev/fb0", O_RDWR);
fb_mem = mmap (NULL, 1024*768, PROT_READ|PROT_WRITE,MAP_SHARED,fb,0);
memset (fb_mem, 0, 1024*768);
FrameBuffer 设备还提供了若干 ioctl 命令,通过这些命令,可以获得显示设备的一些固定信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫描线的字节宽度),以及伪彩色模式下的调色板信息等等。
通过 FrameBuffer 设备,还可以获得当前内核所支持的加速显示卡的类型(通过固定信息得到),这种类型通常是和特定显示芯片相关的。比如目前最新的内核(2.4.9)中,就包含有对 S3、Matrox、nVidia、3Dfx 等等流行显示芯片的加速支持。在获得了加速芯片类型之后,应用程序就可以将 PCI 设备的内存I/O(memio)映射到进程的地址空间。这些 memio 一般是用来控制显示卡的寄存器,通过对这些寄存器的操作,应用程序就可以控制特定显卡的加速功能。
PCI 设备可以将自己的控制寄存器映射到物理内存空间,而后,对这些控制寄存器的访问,给变成了对物理内存的访问。因此,这些寄存器又被称为"memio"。一旦被映射到物理内存,Linux 的普通进程就可以通过 mmap 将这些内存 I/O 映射到进程地址空间,这样就可以直接访问这些寄存器了。
当然,因为不同的显示芯片具有不同的加速能力,对memio 的使用和定义也各自不同,这时,就需要针对加速芯片的不同类型来编写实现不同的加速功能。比如大多数芯片都提供了对矩形填充的硬件加速支持,但不同的芯片实现方式不同,这时,就需要针对不同的芯片类型编写不同的用来完成填充矩形的函数。
说到这里,读者可能已经意识到 FrameBuffer 只是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的设备。所以,对于应用程序而言,如果希望在 FrameBuffer 之上进行图形编程,还需要完成其他许多工作。举个例子来讲,FrameBuffer 就像一张画布,使用什么样子的画笔,如何画画,还需要你自己动手完成。
分享到:
相关推荐
这些文档包含了关于Framebuffer设备的基本介绍、内部工作原理以及视频模式等相关信息。 `00-INDEX`文件是Framebuffer设备文档的索引,帮助开发者快速找到特定的显卡芯片相关的文档,如`aty128fb.txt`针对ATI ...
其中,`struct fb_info`是核心的数据结构,它包含了关于framebuffer设备的所有信息,如屏幕尺寸、颜色深度、行缓冲区大小等。`fb_var_screeninfo`和`fb_fix_screeninfo`分别用于存储可变和固定的屏幕信息。 当一个...
本文介绍了Linux系统中关于Framebuffer的基本概念以及如何通过C语言进行简单的编程操作。通过这些基础操作,开发者可以进一步探索如何在Linux环境下开发图形应用程序。尽管本文提供了基本的示例代码,但在实际应用中...
Linux 2.2 Framebuffer Device Programming Tutorial是早期关于Framebuffer设备编程的一个教程,可以帮助开发者了解Framebuffer的基本概念和操作方法。 `framebuffer%E9%A9%B1%E5%8A%A8%E5%85%A8%E7%AF%87.pdf` 这...
标题中提到的 "framebuffer显示JPEG或BMP图片" 揭示了关于Linux环境下framebuffer设备的使用方法,特别是如何在没有X Window系统的环境下直接向framebuffer设备写入图像数据,从而实现在屏幕上显示JPEG或BMP格式的...
在Android系统中,framebuffer(帧缓冲区)是操作系统用于存储屏幕显示内容的数据结构。它是一个内存区域,包含了屏幕上每一个像素的颜色值。当系统需要更新屏幕时,会将图像数据写入framebuffer,然后由显卡将其...
在这个场景中,我们关注的是如何利用framebuffer和SPI(Serial Peripheral Interface)驱动来控制屏幕显示。树莓派是一个基于ARM架构的微型电脑,它具有丰富的GPIO(General Purpose Input/Output)引脚,可以连接...
在嵌入式Linux系统中,framebuffer是一种基本的图形设备驱动程序,它为操作系统提供了一个直接访问硬件显存的接口,使得我们可以在没有图形窗口系统(如X Window System)的情况下进行图形显示。在这个主题中,我们...
在这种场景下,"基于framebuffer的摄像程序"是一个关键解决方案。本项目通过修改luvcview源代码,实现了在framebuffer设备上直接显示摄像头捕获的图像,从而为无图形系统的嵌入式环境提供了照相和录像的能力。 首先...
linux framebuffer编程,显示BMP图片
Linux Framebuffer 俄罗斯方块是一款基于Linux Framebuffer设备驱动程序实现的经典游戏,它可以在没有图形窗口系统的嵌入式系统上运行。Framebuffer是Linux内核提供的一种直接访问显示器硬件的机制,允许用户空间...
Linux操作系统中的FrameBuffer是一种提供给用户态进程直接写屏能力的驱动程序接口。在2.2.x版本的内核中首次引入,它允许用户态进程通过抽象的设备来进行直接的屏幕操作。这种机制模仿了显卡的功能,并将显卡的硬件...
在Android系统中,Framebuffer是操作系统与硬件图形处理器(GPU)之间的一个接口,它负责将操作系统和应用程序的图形输出渲染到屏幕。Framebuffer测试程序是用于验证和调试这一关键组件的工具,尤其是在开发或优化...
Framebuffer 测试程序 Framebuffer 是 Linux 系统中的一种图形输出接口,能够将图形数据输出到显示器上。本文主要介绍了一个Framebuffer测试程序,通过该程序我们可以了解Framebuffer的工作流程。 Framebuffer ...
在嵌入式Linux系统中,Framebuffer(帧缓冲)是一种硬件抽象层,用于处理图形输出到显示设备,如LCD或TFT屏幕。它提供了一个直接访问显示内存的接口,允许开发者进行低级图形操作,而无需依赖高级图形库。在本实例中...
### GTK+ for the Linux Framebuffer:关键技术点及应用解析 #### 引言 GTK+(GIMP工具包)是一款广泛使用的图形用户界面开发框架,它为开发者提供了丰富的UI组件库来构建美观、易于使用的应用程序。起初,GTK+是...
这些设备可能需要在没有图形用户界面(GUI)的情况下显示图像,这时framebuffer(帧缓冲区)就显得尤为重要。framebuffer是操作系统提供的一种硬件抽象层,允许开发者直接操作屏幕像素,实现图像的显示。 在ARM平台...
在Android系统中,framebuffer(帧缓冲)是操作系统用于存储屏幕图像数据的内存区域,它直接与硬件交互,负责将像素数据渲染到屏幕上。在Android 4.0(Ice Cream Sandwich)版本中,开发者可以通过访问framebuffer来...