如何在Linux下以低级方式设置视频模式?据我所知,用户空间中的最低层是通过DRM请求KMS。这个对吗?如果是这样,我如何实现模式切换并访问相关的“视频内存”?
如何在Linux下以低级方式设置视频模式?据我所知,用户空间中的最低层是通过DRM请求KMS。这个对吗?如果是这样,我如何实现模式切换并访问相关的“视频内存”?
Answers:
内核模式视频驱动程序使KMS(内核模式设置,对于那些还没有听说过的人)成为可能。这些内核模式视频驱动程序配置一个帧缓冲区显示,默认情况下是连接的监视器的本机分辨率。如果连接了多个监视器,则每个监视器将获得其原始分辨率,并且虚拟控制台将被限制为两个监视器的最小宽度和高度。
因为使用KMS会产生帧缓冲区,所以帧缓冲区配置项应该起作用。我无法在当前使用的系统上对此进行验证,因为它没有KMS驱动程序。但是稍后我将在KMS上使用系统,我会让您知道。
有关更多信息,请参阅有关使用video = boot up参数设置帧缓冲区的模式的内核文档。
我不确定您是否真的知道您的要求,否则您会以一种可以回答的方式来表达它。...但是为了尽我所能,回答您的问题。
您想设置一个模式并调出一些“视频内存”吗?像旧的dos模式X天?如果这是您想要的,则需要使用帧缓冲区进行编程。话虽如此,使用DirectFB会更好。DirectFB就像帧缓冲区上具有加速功能的非常薄的一层。它的级别很低,实际上是您编写程序所应达到的最低级别。您将能够设置模式,并以更底层的样式进行控制。如果要直接直接样式控制,则必须编写原始的Framebuffer,基本上可以完成一些视频ram的映射。如果您觉得Framebuffer的性能不佳,我感到压力不大,请查看DirectFB。如果有人加载了KMS驱动程序,则可以通过KMS / libdrm设置其帧缓冲区。
现在,对于libdrm来说,它是一个用于内核DRM的用户空间库。它不是帧缓冲区,不是应用程序API,而是系统设备库。如果要创建新的设备驱动程序,则libdrm是绝对的方法。例如,libdrm-radeon。Linux不是DOS,直接与硬件通信的唯一方法是通过内核。所有普通应用程序都不会直接将代码发送到硬件,而必须在某些lib / API /调用中加以处理。有一些出于学术/实验目的而采用内核方式的项目,例如FBUI。
我希望至少可以为您指明正确的方向,否则,您应该发表评论并更新您的问题。自从提出这个问题以来,我一直在关注这个问题,它至少是在两次迁移之前,还没有接近答案。如果没有更多信息,那么真的无话可说。