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

Posted

技术标签:

【中文标题】用于显示的 Linux 设备驱动程序 |帧缓冲区【英文标题】:Linux device driver for display | Framebuffer 【发布时间】:2021-01-05 13:20:25 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

实际上不可能给出一个笼统的答案。


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

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

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

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

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

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

【讨论】:

好东西。所以从技术上讲,帧缓冲区可以驻留在 GPU 或 CPU 中,因为阅读答案让我相信没有简单的答案..对吗? @JhonnyS:在现代 PC 上?不,这是一个超级复杂的话题。在微控制器或 1980 年代的家用计算机上:非常简单。

以上是关于用于显示的 Linux 设备驱动程序 |帧缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

帧缓冲子系统框架

linux驱动之framebuffer

Linux 帧缓冲子系统详解:LCD介绍framebuffer驱动框架LCD驱动源码分析

帧缓存的详细介绍

#导入Word文档图片# Linux下FrameBuffe(LCD)驱动编写

Linux驱动开发: FrameBuffe(LCD)驱动开发