TL;如果您不需要基本原理/上下文,则以粗体显示DR (我提供的是因为解释核心问题总是很好,而不是简单地向方法X寻求帮助这可能不是最好的方法)
我经常对旧硬件进行软件性能分析,比现代芯片更容易出现种族错误,单帧图形故障和其他问题。
通常情况下,能够获取行为不当的应用程序的屏幕截图非常酷,这些应用程序可能会丢失一到两帧的垃圾,或者在几分之一秒内显示错误的值。不幸的是,当有问题的系统大量交换到磁盘时,最常出现的问题是,我尝试拍摄的屏幕截图一直不太可能包含我想要捕获的错误。
显而易见的解决方案是捕捉设备,我肯定希望在将来获得资源时探索像素完美的图像和视频录制(这听起来是探索FPGA的一个非常有趣的机会)。
然而,我最近意识到内核正在执行交换,如果我将屏幕截图移动到内核空间,那么,我不必等待我的屏幕截图按键它通过X输入层进入截屏程序,等待它进行XSHM舞蹈并获取屏幕截图数据,同时系统负载大量I / O(例如,5秒系统负载> 10) - 我可以简单地将内核memcpy()
显示的视频内存区域放到一个预分配的缓冲区中,按照我点击的确切分数 PrtSc !
TL; DR:我应该从哪里开始寻找如何“移植”(在具有不同图形驱动程序的Linux的意义上,每个具有不同的架构设计)访问当前显示的区域视频内存?
我得到的印象是我应该在libdrm
,可能在KMS内,但我真的很感激一些指示,知道实际访问视频内存的内容。
我也猜测在某些芯片组上直接读取视频内存可能有一些警告和陷阱?我不希望我的代码进入Linux内核(谁知道,但我怀疑它)但我仍然喜欢我构建的任何东西,以便在计算机上相当便携,以方便。
注意:我没有使用与相关系统合成,以防万一。我很想知道我是否可以编写一个兼容兼容的系统;我怀疑这将是非常重要的。