以驱动程序无关的方式直接访问Linux内核中的视频内存

时间:2017-03-12 14:09:39

标签: c video linux-kernel linux-device-driver memcpy

TL;如果您不需要基本原理/上下文,则以粗体显示DR (我提供的是因为解释核心问题总是很好,而不是简单地向方法X寻求帮助这可能不是最好的方法)

我经常对旧硬件进行软件性能分析,比现代芯片更容易出现种族错误,单帧图形故障和其他问题。

通常情况下,能够获取行为不当的应用程序的屏幕截图非常酷,这些应用程序可能会丢失一到两帧的垃圾,或者在几分之一秒内显示错误的值。不幸的是,当有问题的系统大量交换到磁盘时,最常出现的问题是,我尝试拍摄的屏幕截图一直不太可能包含我想要捕获的错误。

显而易见的解决方案是捕捉设备,我肯定希望在将来获得资源时探索像素完美的图像和视频录制(这听起来是探索FPGA的一个非常有趣的机会)。

然而,我最近意识到内核正在执行交换,如果我将屏幕截图移动到内核空间,那么,我不必等待我的屏幕截图按键它通过X输入层进入截屏程序,等待它进行XSHM舞蹈并获取屏幕截图数据,同时系统负载大量I / O(例如,5秒系统负载> 10) - 我可以简单地将内核memcpy()显示的视频内存区域放到一个预分配的缓冲区中,按照我点击的确切分数 PrtSc

TL; DR:我应该从哪里开始寻找如何“移植”(在具有不同图形驱动程序的Linux的意义上,每个具有不同的架构设计)访问当前显示的区域视频内存?

我得到的印象是我应该在libdrm,可能在KMS内,但我真的很感激一些指示,知道实际访问视频内存的内容。

我也猜测在某些芯片组上直接读取视频内存可能有一些警告和陷阱?我不希望我的代码进入Linux内核(谁知道,但我怀疑它)但我仍然喜欢我构建的任何东西,以便在计算机上相当便携,以方便。

注意:我没有使用与相关系统合成,以防万一。我很想知道我是否可以编写一个兼容兼容的系统;我怀疑这将是非常重要的。

0 个答案:

没有答案