使用 DRM 和 Frambuffer 模拟指定虚拟大小

使用 DRM 和 Frambuffer 模拟指定虚拟大小

我正在尝试在 AM335x 处理器上使用双缓冲。我们有一个在不是我们创建的演示映像上运行的示例。我正在努力使用主线资源来整合我们自己的图像。

该系统使用 tilcdc 驱动程序。我们正在使用该驱动程序提供的 fbdev 模拟。当我们设置参数时,此调用出错:

unsigned int Yold = variable_info.yres_virtual;
variable_info.yres_virtual = variable_info.yres * 2;

if (ioctl(fdfb, FBIOPUT_VSCREENINFO, &variable_info))

我们将 0xf 回显到 /sys/module/drm/parameters/debug 以打开 drm 驱动程序的提升调试打印输出。我们能够看到以下错误消息:

fb 用户空间请求的宽度/高度/bpp 大于当前 1024x768-32(虚拟 1024x1536)> 1024x768-32

我看到参考资料表明 drm 默认只为附加的分辨率分配足够的内存。我正在努力找出发生这种情况的地方以及如何增加分配的内存量。

至于示例图像,这是提供给我们用于测试目的的。我们发现应用程序在此图像上运行的原因是默认分配的内存大小适合在高度 768 处进行三重缓冲。

感谢您的帮助。

*编辑补充

我一直在查看驱动程序的源代码,但尚未得出结论可以在驱动程序加载时更改缓冲区大小。我想不惜一切代价避免对值进行硬编码。

我知道在 tilcdc 直接提供的帧缓冲区模拟下面,有一些调用使用 crtc 的信息创建连续的内存分配,但它似乎只使用称为 fb->height 和 width 的东西。

相关内容