谷歌没有任何见解。我无法通过搜索来解决这个问题 在内核源代码中。
我使用开源IOProxyVideoFamily来实现虚拟帧缓冲。
我刚用OSDynamicCast将C风格的演员阵容替换为IODeviceMemory, 因为我怀疑演员会失败。如果是这样,我会知道如何解决 它
但我无法找到包含它的KPI库。 IODeviceMemory有 自10.0以来一直在操作系统中,并且是PCI卡驱动程序所必需的。
$ kextlibs -undef-symbols /System/Library/Extensions/IOProxyFramebuffer.kext/
For all architectures:
com.apple.iokit.IOGraphicsFamily = 2.4.1
com.apple.kpi.iokit = 15.6
com.apple.kpi.libkern = 15.6
com.doequalsglory.driver.IOProxyVideoCard = 1.0d1
For x86_64:
1 symbol not found in any library kext:
ZN14IODeviceMemory9metaClassE
IODeviceMemory是IOMemoryDescriptor的子类。它的声明 包括OSDeclareDefaultStructors。
(视频卡时,对IOProxyVideoCard的依赖性得到满足 已安装驱动程序。)
答案 0 :(得分:1)
IODeviceMemory
是一个奇怪的IOMemoryDescriptor
子类,因为它不会覆盖任何虚函数,也不会添加任何字段。所以它只是IOMemoryDescriptor
的一些静态辅助函数。如果您查看这些帮助程序函数的源代码,您会发现它们实际上都没有创建IODeviceMemory
的实例 - 而是调用IOSubMemoryDescriptor::withSubRange()
(显然会创建一个IOSubMemoryDescriptor
对象)和IOMemoryDescriptor::withAddressRange()
(我相信后一个会创建一个IOGeneralMemoryDescriptor
)。
所以你的动态演员无论如何都不会工作,IODeviceMemory
并不存在 - 通常没有它的实例。我怀疑这就是为什么自动生成的OSMetaClass内容不能通过KPI导出。