2017-09-14 126 views
1

谷歌沒有收穫。我無法在內核源代碼中搜索 。哪個KPI庫是IODeviceMemory聲明的?

我使用開源的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是IOMemoryDe​​scriptor的子類。它的聲明 包含OSDeclareDefaultStructor。

(安裝顯卡驅動程序 當IOProxyVideoCard的依賴是滿意的。)

回答

1

IODeviceMemory是,它不覆蓋任何虛函數一個奇怪的IOMemoryDescriptor子類,不添加任何領域。所以它只是IOMemoryDescriptor的一些靜態幫助函數。如果你看看這些幫助函數的源代碼,你會發現沒有一個實際創建IODeviceMemory的實例 - 而是調用IOSubMemoryDescriptor::withSubRange()(這明顯創建了一個對象IOSubMemoryDescriptor)和IOMemoryDescriptor::withAddressRange()(我相信後者一個創建一個IOGeneralMemoryDescriptor)。

因此,您的動態演員表無法正常工作,IODeviceMemory實際上並不存在 - 通常沒有它的實例。我懷疑這就是爲什麼自動生成的OSMetaClass的東西沒有通過KPI導出。