【发布时间】:2021-12-26 20:15:19
【问题描述】:
所以我正在构建一个基于运行 Linux(通过 buildroot 创建的图像)驱动 Led 矩阵(64x32 RGB 连接器)的树莓派 4 的系统,我对 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 实现,但我宁愿把它当作学习经验。
【问题讨论】:
-
适用于哪个硬件接口? DSI? LVDS? SPI?
-
无接口,通过8个输入的定时锁存来编程,但这不是问题的重点
-
我不会创建自己的显示驱动程序。我会简单地使用 OpenGL 屏幕外缓冲区(或使用 Vulkan)并通过其他方式将其传输到 LED 矩阵。将您的 LED 矩阵变成被检测为 HDMI 显示器的显示器非常复杂且不可维护,因此应该只是一个爱好挑战。如果您需要在显示器上运行任何应用程序,我会考虑编写您的 Wayland 合成器或 X 服务器。然后它将不使用 HDMI 显示帧缓冲区,而是将其复制到您的 LED 矩阵。
-
@NoNae 非常感谢您的回复!我认为您的回复可能与我想要做的非常接近。您能否详细说明 openGL 屏幕外缓冲区如何与 Wayland 合成器/X 服务器一起使用?我会接受这个作为问题的答案
-
您真的不想费心编写显示驱动程序(除非您正在设计自己的显卡)。只需使用普通显示系统,然后读取它创建的像素。
标签: opengl linux-kernel linux-device-driver raspberry-pi4