linux 帧缓冲区 driver 是视频卡 driver 吗?

Is a linux framebuffer driver a video card driver?

我对这些硬件的实际工作原理知之甚少,但现在我需要学习如何为 Android 设备编写 Linux 帧缓冲区 driver。

我对 Linux 图形堆栈感到困惑。据我了解,在台式计算机上,合成 window 管理器与 DRM 交互,然后将数据发送到特定的视频卡 driver。另一方面,有一些控制器通过 DMAGPU's 内存中检索数据并将其发送到监视器,如答案 here 所建议的那样。 另外根据 this 书中 page 29 的图表,我认为帧缓冲区 driver 位于实际图形设备之上,因此它必须与特定视频卡交互 driver,例如 nVidia driver.

但是当我google为嵌入式设备写帧缓冲区driver时,结果显示好像driver直接负责与[=18=联系], 所以它看起来甚至低于显卡 driver。

帧缓冲区 driver 实际上是视频卡 driver 吗?

一个帧缓冲驱动程序为

提供了一个接口
  1. 模式设置
  2. 对视频缓冲区的内存访问
  3. 基本的二维加速操作(例如滚动)

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

例如,vesafb 帧缓冲驱动程序将使用 VESA 标准接口与视频硬件通信。然而,这个标准是有限的,所以实际上并没有太多的硬件加速,而且绘图很慢。 另一个例子是 intelfb 帧缓冲驱动程序。它使用专有接口与某些英特尔硬件通信,提供更多加速设施,因此速度更快。

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

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

在综合演讲中查找更多信息 Linux Martin Fiedler 揭秘图形: http://keyj.emphy.de/files/linuxgraphics_en.pdf