Linux framebuffer驱动程序是否是视频卡驱动程序?

10

我对这些硬件的实际工作原理了解甚少,但现在我需要学习如何为Android设备编写Linux帧缓冲驱动程序。

我对Linux图形堆栈感到困惑。据我所知,在桌面计算机上,合成窗口管理器与DRM进行交互,然后将数据发送到特定的视频卡驱动程序。另一方面,有一些控制器通过DMA从GPU的内存中检索数据并将其发送到显示器,正如这里回答所建议的那样。 此外,在这本书的第29页的图表中,我发现帧缓冲驱动程序位于实际图形设备之上,因此它必须需要与特定的视频卡驱动程序进行交互,例如,一个nVidia驱动程序。

但是当我谷歌搜索嵌入式设备的帧缓冲驱动程序编写时,结果显示好像该驱动程序直接负责与LCD联系,因此它看起来甚至低于视频卡驱动程序。

所以说,帧缓冲驱动程序实际上是视频卡驱动程序吗?

1个回答

9
一个framebuffer驱动程序提供了以下接口:
  1. 模式设置
  2. 内存访问视频缓冲区
  3. 基本的2D加速操作(例如滚动)
为了提供这个接口,framebuffer驱动程序通常直接与硬件进行通信。
例如,vesafb framebuffer驱动程序将使用VESA标准接口与视频硬件通信。然而,由于此标准有限,因此没有太多的硬件加速,绘图速度较慢。 另一个例子是intelfb framebuffer驱动程序。它使用专有接口与一些intel硬件进行通信,该接口公开了更多的加速功能,因此速度更快。
现在,大多数硬件都使用KMS驱动程序。它们不仅公开framebuffer,还通过DRM访问其他GPU功能,例如OpenGL。
您的困惑似乎源于以下事实:framebuffer驱动程序和X11 GPU驱动程序实际上是竞争关系!因此,如果您拥有KMS系统,则图形和文本控制台之间的切换是即时的,但是对于非KMS系统,它很慢,因为fb驱动程序和X11驱动程序需要重新初始化控制台切换时的视频硬件。
在Martin Fiedler的全面讲座“Linux Graphics Demystified”中找到更多信息: http://keyj.emphy.de/files/linuxgraphics_en.pdf

3
非常感谢回复。所以,framebuffer 驱动程序是一种较低级别的 GPU 驱动程序,即使 nVidia 卡也必须为此类驱动程序提供一些公共接口,尽管在这种卡上的 3D 加速功能是一个秘密。那么,这是否也适用于带 LCD 的嵌入式设备,即 framebuffer 驱动程序不控制 LCD 上的 IC,而是 SoC 中的 GPU? - Mingheng Wang
2
有一个经过逆向工程的nouveau驱动程序适用于NVIDIA显卡,它提供了KMS+fb功能,但在有限且常常不稳定的方式下也支持3D加速。正如之前提到的,只有少数常见接口可用,其中最突出的是VESA接口。在嵌入式设备上,可能没有专用的GPU,可以参考https://github.com/notro/fbtft/wiki中直接与LCD控制器通信的驱动程序示例。 - ypnos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接