IOFramebuffer无法访问macOS 10.13中的VRAM帧缓冲区

时间:2017-10-24 07:20:44

标签: driver kernel-extension macos-high-sierra

我正在为MacOS开发一个扩展图形驱动程序,并使用IOFrameBuffer类发布线性帧缓冲设备。在我的驱动程序中,我们使用getVRAMRange()来返回帧缓冲设备的整个内存窗口的视频ram地址信息。

问题是:驱动程序可以在MacOS 10.12上运行良好,但是一旦将系统升级到MacOS 10.13 High Sierra,我就无法再访问视频ram数据了。你有关于这个问题的任何提示吗?非常感谢!

此外,我也很困惑为什么驱动程序可以在安全模式下正常工作?

2 个答案:

答案 0 :(得分:0)

这个问题是在macOS 10.13中使用Metal合成器引入的。我在测试周期的早期向Apple报告过,但到目前为止我还没有任何回复,而且肯定没有修复。

显示内容确实会在WindowServer的某处绘制,你可以通过CGDisplayCreateImage()截取(在用户空间中)屏幕截图来访问它。取决于你想要做什么可能对你有用?

安全模式中不存在问题的原因是硬件加速合成(Quartz Extreme)在安全模式下被禁用,因此不使用Metal合成器。在不支持Metal的旧款Mac上也不会出现这个问题。

答案 1 :(得分:0)

这是一个旧问题,Apple已弃用IOFramebuffer类。我们可以通过IOSurfaceRef访问屏幕流缓冲区,并使用IOSurfaceGetBaseAddress函数获取屏幕数据地址。