Linux 显示设备驱动 |帧缓冲区

Linux device driver for display | Framebuffer

我正在研究linux的显示设备驱动程序,它运行TFT显示,现在framebuffer存储了所有要显示的数据。

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

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

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

几乎不可能给出一个笼统的答案。


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

My concern is that the processor has to take the output from the GPU and produce a framebuffer to be sent out to the display driver

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

I am studying the display device driver for linux that runs TFT display

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

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