В какой библиотеке KPI объявлена ​​IODeviceMemory?

Гугл не дает никакой информации. Я не смог понять это, поискав в исходниках ядра.

Я использую IOProxyVideoFamily с открытым исходным кодом для реализации виртуального фреймбуфера.

Я только что заменил приведение в стиле C к IODeviceMemory на OSDynamicCast, потому что подозреваю, что приведение потерпит неудачу. Если да, то я буду знать, как это исправить.

Но я не могу найти библиотеку 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 удовлетворяется при установке драйвера видеокарты.)


person Mike Crawford    schedule 14.09.2017    source источник


Ответы (1)


IODeviceMemory — это странный подкласс IOMemoryDescriptor, поскольку он не переопределяет никакие виртуальные функции и не добавляет никаких полей. Так что на самом деле это всего лишь несколько статических вспомогательных функций для IOMemoryDescriptor. Если вы посмотрите на исходный код этих вспомогательных функций, вы обнаружите, что ни одна из них на самом деле не создает экземпляр IODeviceMemory — вместо этого они вызывают IOSubMemoryDescriptor::withSubRange() (что, очевидно, создает объект IOSubMemoryDescriptor) и IOMemoryDescriptor::withAddressRange() (Я считаю, что последний создает IOGeneralMemoryDescriptor).

Так что ваш динамический бросок все равно не сработает, IODeviceMemory на самом деле не существует - обычно его экземпляров нет. Я подозреваю, что именно поэтому автоматически сгенерированный материал OSMetaClass для него не экспортируется через KPI.

person pmdj    schedule 15.09.2017