当前位置: 技术问答>linux和unix
问几个frame buffer的基础问题 我对LINUX一窍不通,问些蠢问题误怪
来源: 互联网 发布时间:2016-02-21
本文导语: 各位高人,求助~~~ 我是做底层驱动的,主要用的都是VXWORKS的操作系统下的东西。 以前的做的设备LCD驱动都是简单的黑白屏幕,做的驱动也非常简单,在SPI总线上一挂,然后内存分一块,修改后调用UI程序对屏幕刷新...
各位高人,求助~~~
我是做底层驱动的,主要用的都是VXWORKS的操作系统下的东西。
以前的做的设备LCD驱动都是简单的黑白屏幕,做的驱动也非常简单,在SPI总线上一挂,然后内存分一块,修改后调用UI程序对屏幕刷新,具体刷新的过程是通过串行口对LCD驱动芯片做一系列的命令或写数据。
最近准备做一个高级点的产品了,要用到彩色屏幕。从原理上来说我觉得和原先黑白的LCD就是一个相素需要的BIT数增加了而已,比如原先1BIT只有黑白,现在假设RGB分别是256级那么就是3个BYTE表示一个相素。那么最后通过SPI对LCD驱动芯片的操作整个流程也和原来的类似。
但是现在BOSS说了希望能够支持一个叫frame buffer的东西,因为LINUX中以这个为基础有很多好用的API程序直接移植过去对做GUI或者应用程序都很有帮助,据说甚至能做播放视频??
但是我对LINUX没了解,实在是不明白 frame buffer到底是个啥东西??怎么样才算支持了这个frame buffer??
从几小时的GOOGLE结果,我大概理解成这样: frame buffer在linux中是把显存映射到用户空间的一段内存后直接对这段内存进行操作而达到写屏的目的,是一种接口。这样上层可以忽略底层的硬件细节而直接使用frame buffer提供的接口做应用。不知道我这么理解对不对??
有人说FRAME BUFFER就像提供了一张画布,直接把屏幕摆在这里,之后怎么画要看应用。那么~我原来做黑白屏幕的LCD驱动,在内存中也自己MALLOC一块做相素,然后需要改变时通过底层代码进行刷新屏幕,这样算不算类似的概念了??不过我总觉得所有的LCD都是这么做的,那FRAME BUFFER到底有什么独到的地方?底层需要实现什么?
那么这是在linux下,如果在别的操作系统,比如vxworks,那么怎么实现一个frame buffer?或者类似frame buffer的接口,也让上层直接通过这些接口进行研发??或者这么说,FRAME BUFFER究竟实现了什么呢?我需要在底层完成一些什么东西才能达到支持了frame buffer的目的?
另外就是请问linux参考代码哪里有呢?就frame buffer这一块,哪位可以给我一些参考??我问这么没头没脑的问题一个很大原因是我根本没看过frame buffer的源代码~请问在哪能找到??如果可以的话能否直接附件传上来或者EMAIL给我?
我EMAIL:
heavenscloud2005@gmail.com
我是做底层驱动的,主要用的都是VXWORKS的操作系统下的东西。
以前的做的设备LCD驱动都是简单的黑白屏幕,做的驱动也非常简单,在SPI总线上一挂,然后内存分一块,修改后调用UI程序对屏幕刷新,具体刷新的过程是通过串行口对LCD驱动芯片做一系列的命令或写数据。
最近准备做一个高级点的产品了,要用到彩色屏幕。从原理上来说我觉得和原先黑白的LCD就是一个相素需要的BIT数增加了而已,比如原先1BIT只有黑白,现在假设RGB分别是256级那么就是3个BYTE表示一个相素。那么最后通过SPI对LCD驱动芯片的操作整个流程也和原来的类似。
但是现在BOSS说了希望能够支持一个叫frame buffer的东西,因为LINUX中以这个为基础有很多好用的API程序直接移植过去对做GUI或者应用程序都很有帮助,据说甚至能做播放视频??
但是我对LINUX没了解,实在是不明白 frame buffer到底是个啥东西??怎么样才算支持了这个frame buffer??
从几小时的GOOGLE结果,我大概理解成这样: frame buffer在linux中是把显存映射到用户空间的一段内存后直接对这段内存进行操作而达到写屏的目的,是一种接口。这样上层可以忽略底层的硬件细节而直接使用frame buffer提供的接口做应用。不知道我这么理解对不对??
有人说FRAME BUFFER就像提供了一张画布,直接把屏幕摆在这里,之后怎么画要看应用。那么~我原来做黑白屏幕的LCD驱动,在内存中也自己MALLOC一块做相素,然后需要改变时通过底层代码进行刷新屏幕,这样算不算类似的概念了??不过我总觉得所有的LCD都是这么做的,那FRAME BUFFER到底有什么独到的地方?底层需要实现什么?
那么这是在linux下,如果在别的操作系统,比如vxworks,那么怎么实现一个frame buffer?或者类似frame buffer的接口,也让上层直接通过这些接口进行研发??或者这么说,FRAME BUFFER究竟实现了什么呢?我需要在底层完成一些什么东西才能达到支持了frame buffer的目的?
另外就是请问linux参考代码哪里有呢?就frame buffer这一块,哪位可以给我一些参考??我问这么没头没脑的问题一个很大原因是我根本没看过frame buffer的源代码~请问在哪能找到??如果可以的话能否直接附件传上来或者EMAIL给我?
我EMAIL:
heavenscloud2005@gmail.com
|
frame buffer实际上就是“中间层”,在它上面就是GUI,比如MINIGNUI或者QT/E这样的GUI直接利用它所给的接品向硬件LCD上画图,而frame buffer向下就直接操作LCD控制器等硬件,它向上层提供的就是/dev/fb之类的设备文件,向下层就直接操作LCD硬件,它是LINUX下的一个东东,源码就在kernel/drivers/vedio目录下面,你可以向你认识的朋友做LINUX的人要一份特定CPU开发板下的FRAME BUFFER源码。
如果你想在其它操作系统下实现一个FRAME BUFFER,就要麻烦一些,比如你想在VXWORKS下实现FRAMEBUFFER,还必须实现/dev/fb设备文件节点,以及模拟LINUX下设备驱动例程的调用及编写过程,让上层的GUI引擎对这一层透明
FRAME BUFFER对上层的接口无非就是open接口,close接口,mmap接口,write接口,iotcl接口,它在内存中模拟一块虚拟屏幕(用矩阵方式以线性空间来模拟屏幕上每个点),GUI要在LCD画图无非就是在特定的内存空间写入该像素点的像素质,原理就这样简单。
LZ还是要先弄清楚自己的需求。。。。。。
如果你想在其它操作系统下实现一个FRAME BUFFER,就要麻烦一些,比如你想在VXWORKS下实现FRAMEBUFFER,还必须实现/dev/fb设备文件节点,以及模拟LINUX下设备驱动例程的调用及编写过程,让上层的GUI引擎对这一层透明
FRAME BUFFER对上层的接口无非就是open接口,close接口,mmap接口,write接口,iotcl接口,它在内存中模拟一块虚拟屏幕(用矩阵方式以线性空间来模拟屏幕上每个点),GUI要在LCD画图无非就是在特定的内存空间写入该像素点的像素质,原理就这样简单。
LZ还是要先弄清楚自己的需求。。。。。。