16

是否有关于如何在 Linux 中编写使用帧缓冲设备的软件的文档?我看过几个简单的例子,基本上是说:“打开它,映射它,将像素写入映射区域。” 但是没有关于如何使用不同的 IOCTLS 的综合文档。我已经看到对“平移”和其他功能的引用,但“谷歌搜索”会提供太多无用信息。

编辑:从编程的角度来看,唯一的文档,而不是“用户如何配置您的系统以使用 fb”,是代码的文档吗?

4

5 回答 5

5

您可以查看 fbi 的源代码,这是一个使用 linux 帧缓冲区的图像查看器。你可以在这里得到它:http: //linux.bytesex.org/fbida/

于 2010-06-18T15:09:57.670 回答
3

检查MPlayer来源。

/libvo目录下有很多 Mplayer 用来显示多媒体的 Video Output 插件。在那里你可以找到使用 Linux 帧缓冲区的fbdev (vo_fbdev* sources) 插件。

有很多ioctl调用,代码如下:

  • FBIOGET_VSCREENINFO
  • FBIOPUT_VSCREENINFO
  • FBIOGET_FSCREENINFO
  • FBIOGETCMAP
  • FBIOPUTCMAP
  • FBIOPAN_DISPLAY

它不像一个好的文档,但这肯定是一个好的应用程序实现。

于 2011-06-18T09:46:02.140 回答
3

- 除了您提到的之外,似乎没有太多选项可以从桌面上的用户空间使用 fb 进行编程。这可能是某些文档如此陈旧的原因之一。看看这个设备驱动程序编写者的操作指南,它是从一些官方 linux 文档中引用的:www.linux-fbdev.org [slash] HOWTO [slash] index.html。它没有引用太多接口。虽然查看 linux 源代码树确实提供了更大的代码示例。

-- opentom.org [斜线] Hardware_Framebuffer 不适用于桌面环境。它强化了主要方法,但似乎确实避免解释它提到的“快速”双缓冲切换所需的所有成分。另一个用于不同设备并且遗漏了一些关键缓冲细节的设备是 wiki.gp2x.org [slash] wiki [slash] Writing_to_the_framebuffer_device ,尽管它至少建议您可以使用 fb1 和 fb0 来进行双缓冲(在此device.. 虽然对于桌面,fb1 可能无法使用或者它可能访问不同的硬件),使用 volatile 关键字可能是合适的,我们应该注意 vsync。

-- asm.sourceforge.net [斜线] 文章 [斜线] fb.html 汇编语言例程也出现(?)只是做基本的查询、打开、设置一些基础、mmap、将像素值绘制到存储,以及复制到 fb 内存(我想确保使用短的 stosb 循环,而不是更长的方法)。

-- 在谷歌搜索 Linux 帧缓冲区时要注意 16 bpp 注释:我在 X 会话期间使用 fbgrab 和 fb2png 无济于事。这些每一个都渲染了一张图像,暗示了我桌面屏幕的快照,就好像桌面的照片是使用非常糟糕的相机在水下拍摄的,然后在黑暗的房间里过度曝光。图像在颜色、大小上完全被破坏,并且缺少很多细节(到处都是不属于的像素颜色)。似乎我使用的计算机上的 /proc /sys (新内核最多进行了微小的修改......来自 PCLOS 衍生产品)声称 fb0 使用 16 bpp,而且我在谷歌上搜索的大多数内容都说明了这些内容,但实验让我一个非常不同的结论。除了可能假定 16 位的标准帧缓冲区抓取实用程序(对于此发行版持有的版本)的这两个失败的结果之外,我还有一个不同的成功测试结果,将帧缓冲区像素数据视为 32 位。我从通过 cat /dev/fb0 提取的数据创建了一个文件。该文件的大小最终为 1920000。然后我编写了一个小型 C 程序来尝试操作该数据(假设它是某种编码或其他编码的像素数据)。我最终确定了它,像素格式与我在查询时从 X 得到的完全匹配(TrueColor RGB 8 位,无 alpha,但填充为 32 位)。注意另一个线索:我的 800x600 乘以 4 字节的屏幕分辨率正好是 1920000。我最初尝试的 16 位方法都产生了与 fbgrap 类似的损坏图像,所以它 不像我可能没有查看正确的数据。[如果你想要我用来测试数据的代码,请告诉我。基本上,我只是读入整个 fb0 转储,然后将其吐回文件,在添加创建合适的 ppm 文件的标头“P6\n800 600\n255\n”之后,并在遍历所有像素以操纵它们的顺序或扩展它们,.. 对我来说,最终成功的结果是每 4 个字节删除一次,并在每 4 个字节单元中切换第一个和第三个。简而言之,我将明显的 BGRA fb0 转储转换为 ppm RGB 文件。ppm 可以用 Linux 上的许多图片查看器查看。] 并且在遍历所有像素以操纵它们的顺序或扩展它们时,.. 最终成功的结果是我每 4 个字节删除一次,并在每 4 个字节单元中切换第一个和第三个。简而言之,我将明显的 BGRA fb0 转储转换为 ppm RGB 文件。ppm 可以用 Linux 上的许多图片查看器查看。] 并且在遍历所有像素以操纵它们的顺序或扩展它们时,.. 最终成功的结果是我每 4 个字节删除一次,并在每 4 个字节单元中切换第一个和第三个。简而言之,我将明显的 BGRA fb0 转储转换为 ppm RGB 文件。ppm 可以用 Linux 上的许多图片查看器查看。]

-- 您可能需要重新考虑使用 fb0 进行编程的原因(这也可能解释了为什么很少有示例存在)。在放弃使用 X 的好处的同时,您可能无法在 X 上获得任何有价值的性能提升(这是我的经验,如果有限的话)。这个原因也可能解释了为什么很少有代码示例存在。

-- 注意 DirectFB 不是 fb。DirectFB 最近比旧版 fb 获得了更多的喜爱,因为它更专注于更性感的 3d hw 加速。如果您想在不利用 3d 硬件加速(甚至 2d 硬件加速)的情况下尽可能快地渲染到桌面屏幕,那么 fb 可能会很好,但不会给您提供 X 没有给您的任何东西。X 显然使用 fb,与您的程序可能具有的其他成本相比,开销可能可以忽略不计(不要在任何紧密循环中调用 X,而是在您为帧设置所有像素后在最后调用)。另一方面,使用 fb 可以很巧妙地使用这条评论:Paint Pixels to Screen via Linux FrameBuffer

于 2011-05-08T06:33:53.130 回答
1

查看以下任何一个的源代码:fbxat、fbida、fbterm、fbtv、directFB 库、libxineliboutput-fbe、ppmtofb、xserver-fbdev 都是 debian 包应用程序。只需从 debian 库中获取源代码即可。还有很多其他...

提示:使用您喜欢的包管理器在包描述中搜索帧缓冲区。

好的,即使阅读代码有时被称为“ Guru 文档”,实际这样做也可能有点过分。

于 2010-06-18T21:54:25.023 回答
0

任何启动画面的来源(即在引导期间)应该会给您一个良好的开端。

于 2010-03-24T10:40:51.003 回答