linux framebuffer驱动程序是视频卡驱动程序吗?

Min*_*ang 5 linux framebuffer driver

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

我对Linux图形堆栈感到困惑。据我了解,在台式计算机上,合成窗口管理器与交互DRM,然后将数据发送到特定的视频卡驱动程序。在另一方面也有一些类型的控制器从检索数据GPU's通过内存DMA并将其发送到显示器,如答案建议在这里。此外,通过在图page 29本书,我想通了帧缓冲驱动器是在实际的图形设备的顶部,所以它必须要与特定的视频卡驱动程序进行交互,例如,一个nVidia司机。

但是,当我用谷歌为嵌入式设备编写帧缓冲区驱动程序时,结果表明,该驱动程序似乎直接负责与进行联系LCD,因此它看起来甚至在视频卡驱动程序之下。

那么帧缓冲驱动程序实际上是视频卡驱动程序吗?

ypn*_*nos 5

帧缓冲驱动程序为

  1. 模式设定
  2. 内存访问视频缓冲区
  3. 基本的2D加速操作(例如,用于滚动)

为了提供此接口,帧缓冲驱动程序通常直接与硬件对话。

例如,vesafb帧缓冲驱动程序将使用VESA标准接口与视频硬件对话。但是,此标准是有限的,因此并没有进行太多的硬件加速,绘图速度很慢。另一个示例是intelfb帧缓冲驱动程序。它使用专有接口与某些英特尔硬件进行通信,该接口公开了更多的加速功能,因此速度更快。

如今,大多数硬件都使用KMS驱动程序代替。它们不仅公开帧缓冲区,而且还通过DRM访问其他GPU功能,例如OpenGL。

您的困惑似乎是由以下事实引起的:帧缓冲驱动程序和X11 GPU驱动程序实际上在竞争!这就是为什么如果您使用的是KMS系统,则图形和文本控制台之间的切换是即时的,但是,对于非KMS系统,这是缓慢的,因为fb驱动程序和X11驱动程序都需要重新初始化视频。控制台开关上的硬件。

在Martin Fiedler揭秘的Linux图形全面讨论中找到更多信息:http : //keyj.emphy.de/files/linuxgraphics_en.pdf

  • 太好了,感谢您的回复。因此,帧缓冲驱动程序是一个较小的 GPU 驱动程序,即使是 nVidia 卡也必须有一些通用接口供此类驱动程序使用,尽管此类卡上的 3d 加速内容是黑暗的秘密。这是否也适用于带有 LCD 的嵌入式设备,即帧缓冲驱动程序不是控制 LCD 上的 IC,而是控制 SoC 中的 GPU? (3认同)
  • 有针对 nvidia 卡的逆向工程“nouveau”驱动程序,它提供 KMS+fb,但也以有限且通常不稳定的方式提供 3d 加速。如前所述,只有少数通用接口,VESA 是最突出的接口。在嵌入式设备上,可能没有专用 GPU,请参阅 https://github.com/notro/fbtft/wiki 以获取直接与 LCD 控制器对话的驱动程序示例。 (2认同)