如何在Linux中使用kms / drm设置视频模式?


12

如何在Linux下以低级方式设置视频模式?据我所知,用户空间中的最低层是通过DRM请求KMS。这个对吗?如果是这样,我如何实现模式切换并访问相关的“视频内存”?


什么是公里?到目前为止,我还没有听说过KSM或模式切换。
BЈовић

我的意思是KMS:内核模式设置链接

您是指帧缓冲区/控制台吗?还是X11 / Xorg?
penguin359'4

@ penguin359要么。只要可以直接使用libdrm,就可以使用X和fb ...(PS:最好通过C ++)

4
@litro您想达到什么目的?并且在许多发行版的kms中会自动激活(如果可用且未关闭)。
xenoterracide 2011年

Answers:


3

内核模式视频驱动程序使KMS(内核模式设置,对于那些还没有听说过的人)成为可能。这些内核模式视频驱动程序配置一个帧缓冲区显示,默认情况下是连接的监视器的本机分辨率。如果连接了多个监视器,则每个监视器将获得其原始分辨率,并且虚拟控制台将被限制为两个监视器的最小宽度和高度。

因为使用KMS会产生帧缓冲区,所以帧缓冲区配置项应该起作用。我无法在当前使用的系统上对此进行验证,因为它没有KMS驱动程序。但是稍后我将在KMS上使用系统,我会让您知道。

有关更多信息,请参阅有关使用video = boot up参数设置帧缓冲区的模式的内核文档


2

我不确定您是否真的知道您的要求,否则您会以一种可以回答的方式来表达它。...但是为了尽我所能,回答您的问题。

您想设置一个模式并调出一些“视频内存”吗?像旧的dos模式X天?如果这是您想要的,则需要使用帧缓冲区进行编程。话虽如此,使用DirectFB会更好。DirectFB就像帧缓冲区上具有加速功能的非常薄的一层。它的级别很低,实际上是您编写程序所应达到的最低级别。您将能够设置模式,并以更底层的样式进行控制。如果要直接直接样式控制,则必须编写原始的Framebuffer,基本上可以完成一些视频ram的映射。如果您觉得Framebuffer的性能不佳,我感到压力不大,请查看DirectFB。如果有人加载了KMS驱动程序,则可以通过KMS / libdrm设置其帧缓冲区。

现在,对于libdrm来说,它是一个用于内核DRM的用户空间库。它不是帧缓冲区,不是应用程序API,而是系统设备库。如果要创建新的设备驱动程序,则libdrm是绝对的方法。例如,libdrm-radeon。Linux不是DOS,直接与硬件通信的唯一方法是通过内核。所有普通应用程序都不会直接将代码发送到硬件,而必须在某些lib / API /调用中加以处理。有一些出于学术/实验目的而采用内核方式的项目,例如FBUI。

我希望至少可以为您指明正确的方向,否则,您应该发表评论并更新您的问题。自从提出这个问题以来,我一直在关注这个问题,它至少是在两次迁移之前,还没有接近答案。如果没有更多信息,那么真的无话可说。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.