RPI OpenGL PWM 显示驱动

RPI OpenGL PWM display driver

所以我正在构建一个基于 raspberry pi 4 运行 Linux(通过 buildroot 创建的图像)驱动 Led 矩阵(64x32 RGB 连接器)的系统,我是对 linux 的软件堆栈非常困惑。我希望能够在小分辨率屏幕上使用 OpenGL 功能,然后将其传输到实际驱动 Led 矩阵的驱动程序。

我读过有关 DRM、KMS、GEM 和其他系统的资料,我得出的结论是最好的解决方法是采用以下工作方案:

User space:      App
                  | OpenGL
                  v
Kernel space:    DRM -GEM-> Led device driver
                                  |
                                  v
Hardware:                     Led Matrix

其中一些可能没有多大意义,因为这些概念对我来说仍然很混乱。

本质上,该应用程序会进行 OpenGL 调用,这些调用会生成可以映射到 DRM 上的缓冲区的帧,这些帧可以与 Led 设备驱动程序共享,然后驱动矩阵中的 LED。

这样的事情会是最好的方式吗?

我可以编写一些愚蠢的缓冲区 cpu 实现,但我宁愿将其作为学习经验。

OpenGL 渲染到缓冲区(称为“帧缓冲区”,通常显示在屏幕上。但是渲染到屏幕外缓冲区(顾名思义)不会渲染到屏幕上,而是渲染到数组中,这可以是由 C/C++ 读取。在现代操作系统上有一个间接寻址。通常你的屏幕上有多个 windows 可见。因此应用程序不能呈现到屏幕本身,而是呈现到由窗口系统,然后合成为一张最终图像。Linux 使用 Wayland,多个 Wayland 客户端可以创建并绘制到 Wayland 合成器的缓冲区中。

如果您只想显示您的应用程序,只需使用屏幕外缓冲区即可。

如果您想显示另一个应用程序,请通过编写您自己的 Wayland 合成器读取它的帧缓冲区。请注意,如果您想使用硬件加速,这可能很难(我从来没有这样做过)。