这两天看了一些关于Linux下Gui的介绍,但是对Framebuffer有一些疑问,请高人帮忙解答一下:
1.framebuffer在操作系统中处于什么位置呢?驱动和应用中间?和framebuffer一级的还有什么技术?
也就是说在开发一个系统的时候除了framebuffer还有什么别的选择?
2.我们在开发一个新系统的时候如果想要用framebuffer的话,是否还需要自己写相关显示芯片基于framebuffer的驱动呢?
那么如果我的芯片本身支持一些加速的特殊处理,在freambuffer中怎么体现?
3.如何知道显示芯片是否支持framebuffer的操作?选择framebuffer时候需要注意什么?怎样知道自己的系统是否适合使用framebuffer呢?
帧缓冲设备提供了显卡的抽象描述。他同时代表了显卡上的显存,应用程序通过定义好的接口可以访问显卡,而不需要知道底层的任何操作。该设备使用特殊的设备节点,通常位于/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*