如何在 Linux 中添加额外的帧缓冲区设备?

如何在 Linux 中添加额外的帧缓冲区设备?

我正在运行 Ubuntu 12.04 LTS 作为家庭 NAS 服务器,没有 X。最近我开始将其调整为视频播放媒体设备。此时安装 X 可能会更容易,但我决定尝试使用帧缓冲区播放的 mplayer。它起作用了,一切都很好。

然而,出于好奇,或许也出于实际后果,我无法停止思考帧缓冲区。似乎只有一个帧缓冲设备,/dev/fb0. (顺便说一句。我正在使用 vesafs 驱动程序)如果我运行多个使用帧缓冲区的程序,就会发生混乱。例如,从 fbterm 运行 mplayer 只会使其崩溃。奇怪的是,联邦调查局图像查看器设法以某种方式查看图像。显然程序不能共享设备,毕竟没有窗口系统。

那么,(vesa) fb 设备的数量是否仅限于硬件显示设备呢?或者原则上是否可以有更多,比如有多个 tty?添加更多帮助可以同时运行使用它们的软件吗?我怎样才能添加更多?

另外,帧缓冲区如何连接到 tty 的逻辑对我来说也不太清楚……例如,mplayer 在每个 tty 上显示它的视频帧,但 fbi 却没有。此外,Ubuntu 默认控制台(fbcon?)显示在视频覆盖层后面,这让我感到奇怪。这是怎么回事?

答案1

由于还没有人回答,并且经过几个小时的乏味谷歌搜索和测试,我对这个主题有了一些了解,我将回答它......

由于framebuffer设备接口是一个相当通用的接口,因此原则上可以有更多的fb设备。然而,由于我使用的VESA驱动程序提供了某个硬件设备和帧缓冲设备文件之间的直接连接,拥有比真实设备更多的设备是没有意义的。

有一个虚拟帧缓冲区设备的驱动程序,vfb。 (注意:与 xvfb 不同,xvfb 是 X 的虚拟帧缓冲区)我自己还没有对此进行测试,但是使用虚拟设备可以拥有任意数量的 fb 设备。我还认为原则上没有什么可以阻止将虚拟设备通过管道传输到硬件帧缓冲区设备,从而允许构建帧缓冲区多路复用器

关于framebuffers和tty之间的连接:空无一人。帧缓冲区只是简单地绘制到屏幕上,而忽略任何内容。

最初让我感到困惑的是联邦调查局图像查看器的行为。事实证明,它巧妙地检查正在运行的 tty 是否打开,并根据情况绘制到帧缓冲区。 (这就是为什么它拒绝通过 SSH 运行,与 mplayer 不同 - 它不接受伪终端。)但是类似多路复用器的功能与帧缓冲区本身没有任何关系。

如果有多个进程写入帧缓冲区,他们不会互相阻挡。事实证明,我之前同时使用多个 fb 程序时遇到的问题(崩溃等)根本与帧缓冲区无关。使用 fbterm 终端并从中运行 mplayer:没问题。 fbterm 和 fbcon 终端以及 fbi 图像查看器仅在更新内容时才绘制到缓冲区,因此 mplayer 几乎 100% 的时间都在屏幕上占据主导地位。但是,如果您尝试运行两个 mplayer,您将看到一个闪烁的视图,显示一个和另一个的帧,因为它们试图绘制到具有竞争条件的缓冲区。

一些有用的链接:

http://moi.vonos.net/linux/framebuffer-drivers/

https://www.kernel.org/doc/Documentation/fb/framebuffer.txt

相关内容