有没有关于如何编写在Linux中使用framebuffer设备的软件的文档?我已经看到几个简单的例子,基本上说:“打开它,mmap它,将像素写入映射区域。”但没有关于如何使用不同的IOCTLS的全面文档。我已经看到了对“平移”和其他功能的引用,但“谷歌搜索它”给出了太多无用信息的命中。
编辑: 从编程的角度来看,这是唯一的文档,而不是“用户如何配置系统以使用fb”,文档代码是什么?
答案 0 :(得分:4)
你可以看看fbi的源代码,一个使用linux framebuffer的图像查看器。你可以在这里得到它:http://linux.bytesex.org/fbida/
答案 1 :(得分:2)
- 似乎可能没有太多的选项可以使用fb从桌面上的用户空间进行编程,超出你提到的范围。这可能是一些文档如此陈旧的原因之一。看看设备驱动程序编写器的这个方法,并从一些官方的linux文档中引用:www.linux-fbdev.org [slash] HOWTO [slash] index.html。它没有引用太多的接口..虽然查看linux源代码树确实提供了更大的代码示例。
- opentom.org [slash] Hardware_Framebuffer不适用于桌面环境。它强化了主要的方法论,但它确实似乎避免解释了它提到的“快速”双缓冲切换所需的所有成分。另一个用于不同设备并且留下一些关键缓冲细节的是wiki.gp2x.org [slash] wiki [slash] Writing_to_the_framebuffer_device,尽管它至少建议你可以使用fb1和fb0进行双缓冲(在此设备..虽然对于桌面,fb1可能不可能或者它可能访问不同的硬件),使用volatile关键字可能是合适的,我们应该注意vsync。
- asm.sourceforge.net [斜杠]文章[斜线] fb.html汇编语言例程,它们也出现(?)来执行查询,打开,设置一些基础知识,mmap,绘制像素值的基础知识存储,并复制到fb内存(确保使用短stosb循环,我想,而不是一些更长的方法)。
- 在谷歌搜索Linux帧缓冲区时要小心16 bpp注释:我在X会话期间使用fbgrab和fb2png无济于事。这些都渲染了一个图像,建议我的桌面屏幕的快照,好像桌面的图片是在水下使用非常糟糕的相机拍摄的,然后在黑暗的房间里过度曝光。图像的颜色,大小完全破碎,并且缺少很多细节(点缀着不属于的像素颜色)。似乎我使用的计算机上的/ proc / sys(新的内核最多只有微小的修改......来自PCLOS衍生物)声称fb0使用了16 bpp,而且我用Google搜索的大多数内容都说明了这些内容,但实验引导我一个非常不同的结论。除了标准帧缓冲区抓取实用程序(对于此发行版所拥有的版本)的这两个失败的结果,可能假定为16位,我有一个不同的成功测试结果,将帧缓冲区像素数据视为32位。我通过cat / dev / fb0从数据中创建了一个文件。该文件的大小最终为1920000.然后我写了一个小的C程序来尝试和操纵该数据(假设它是某些编码或其他的像素数据)。我最终把它钉了起来,像素格式完全匹配我查询时从X得到的(TrueColor RGB 8位,没有alpha但填充到32位)。请注意另一条线索:我的屏幕分辨率为800x600乘以4字节,准确地给出了1920000。我最初尝试的16位方法都产生了类似于fbgrap的破碎图像,所以如果我可能没有查看正确的数据,那就不一样了。 [如果您需要我用于测试数据的代码,请告诉我。基本上我只读取整个fb0转储,然后将其吐回文件,添加一个标题“P6 \ n800 600 \ n255 \ n”,创建合适的ppm文件,并循环所有像素操纵他们的顺序或扩展它们,最终成功的结果是每4字节丢弃并在每4字节单元中切换第一个和第三个字节。简而言之,我将明显的BGRA fb0转储转换为ppm RGB文件。在Linux上可以通过许多pic观看者查看ppm。]
- 您可能想重新考虑想要使用fb0进行编程的原因(这也可能解释为什么存在少数示例)。在放弃使用X的好处的同时,你可能无法获得超过X的任何有价值的性能提升(这是我的,如果有限的经验)。这个原因也可能解释为什么存在很少的代码示例。
- 请注意,DirectFB不是fb。 DirectFB最近得到了比旧款fb更多的爱,因为它更专注于性感的3d hw加速。如果你想在不利用3d硬件加速(甚至是2d hw加速度)的情况下尽可能快地渲染到桌面屏幕,那么fb可能会很好,但不会给你任何X不能给你的东西。 X显然使用fb,与程序可能具有的其他成本相比,开销可能微不足道(不要在任何紧密循环中调用X,而是在为帧设置所有像素后调用X)。另一方面,如本评论中所述,使用fb可以很简单:Paint Pixels to Screen via Linux FrameBuffer
答案 2 :(得分:2)
检查MPlayer来源。
在 / libvo 目录下,有很多视频输出插件被Mplayer用来显示多媒体。在那里你可以找到使用Linux帧缓冲区的 fbdev (vo_fbdev * sources)插件。
有很多ioctl调用,包含以下代码:
这不是一个好的文档,但这肯定是一个很好的应用程序实现。
答案 3 :(得分:1)
查看以下任何源代码:fbxat,fbida,fbterm,fbtv,directFB库,libxineliboutput-fbe,ppmtofb,xserver-fbdev都是debian软件包应用程序。只需从debian库中获取源代码即可。还有很多其他的......
提示:使用您最喜欢的包管理器在包描述中搜索framebuffer。
好的,即使阅读代码有时被称为“ Guru文档”,实际上也可能有点太多了。答案 4 :(得分:0)
任何启动画面的源(即启动期间)都应该给你一个良好的开端。