【问题标题】:Is a linux framebuffer driver a video card driver?linux framebuffer驱动程序是显卡驱动程序吗?
【发布时间】:2016-08-11 10:23:54
【问题描述】:

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

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

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

那么帧缓冲驱动真的是显卡驱动吗?

【问题讨论】:

    标签: linux driver framebuffer


    【解决方案1】:

    帧缓冲驱动程序提供了一个接口

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

    为了提供这个接口,帧缓冲驱动一般直接与硬件对话。

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

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

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

    在 Martin Fiedler 的 Linux Graphics Demystified 综合演讲中找到更多信息: http://keyj.emphy.de/files/linuxgraphics_en.pdf

    【讨论】:

    • 太好了,感谢您的回复。因此,帧缓冲驱动程序是一个较小的 GPU 驱动程序,甚至 nVidia 卡也必须有一些通用接口供这种驱动程序使用,尽管此类卡上的 3d 加速内容是一个黑暗的秘密。这是否也适用于带有 LCD 的嵌入式设备,即帧缓冲驱动程序不是控制 LCD 上的 IC,而是控制 SoC 中的 GPU?
    • nvidia 卡有逆向工程的nouveau 驱动程序,它提供 KMS+fb,但也提供有限且经常不稳定的 3d 加速。如前所述,只有很少的通用接口,VESA 是最突出的接口。在嵌入式设备上,可能没有专用 GPU,请参阅 github.com/notro/fbtft/wiki 以获取直接与 LCD 控制器对话的驱动程序示例。
    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多