用于显示的 Linux 设备驱动程序 |帧缓冲区

问题描述

我正在研究运行 TFT 显示器的 linux 显示设备驱动程序,现在帧缓冲区存储要显示的所有数据。

问题:显示驱动程序是否有自己的等效缓冲区来处理来自内核的帧缓冲区?

我担心的是,处理器必须从 GPU 获取输出生成要发送到显示驱动程序的帧缓冲区,但根据显示器的不同,可能存在一些延迟和其他问题,因此显示驱动程序直接访问帧缓冲区或者它也使用自己的缓冲区?

解决方法

这是一个兔子洞问题;表面上看起来很简单,但事实的答案必然会以分形复杂性结束。

要给出一个概括的答案几乎是不可能的。


悬崖笔记版本是:GPU有自己的内存,它以内存映射的形式直接对CPU可见(你可以从例如/sys/class/drm/card0/device/resource查询物理地址的实际范围)。在那里的某个地方,还有用于显示扫描输出缓冲区的内存。使用 GPU 加速图形时,GPU 将直接写入那些扫描输出缓冲区 - 可能写入不同显卡上的内存(例如混合图形的工作方式)。

我担心的是处理器必须从 GPU 获取输出并生成要发送给显示驱动程序的帧缓冲区

通常情况并非如此。然而,即使涉及复制,如今的总线带宽也足够大,复制操作无关紧要。

我正在研究运行 TFT 显示器的 linux 显示设备驱动程序

如果这是与 SPI 连接的 TFT 显示器或由 GPIO 制成的并行总线,那么是的,会保留一些内存供图像驻留。严格来说,这可以在 CPU 的 RAM 中,也可以在 GPU 的 VRAM 中(如果有的话)。但是,就延迟而言,现在扫描输出的复制操作并不重要。

20 年前,是的,即使在那时,通过巧妙的调度,您也可以避免延迟。