Я пытаюсь написать драйвер для композитной карты видеозахвата PCI для OSX.
Кекст прекрасно строится, но когда я пытаюсь его загрузить, я получаю следующее:
Diagnostics for /System/Library/Extensions/Conexant878.kext:
Code Signing Failure: code signature is invalid
WARNING - Invalid signature -67030 0xFFFFFFFFFFFEFA2A for kext "/System/Library/Extensions/Conexant878.kext"
(kernel) kxld[com.akasaka.Conexant878]: The following symbols are unresolved for this kext:
(kernel) kxld[com.akasaka.Conexant878]: __ZN11IOPCIDevice22_RESERVEDIOPCIDevice16Ev
(kernel) kxld[com.akasaka.Conexant878]: __ZN11IOPCIDevice22_RESERVEDIOPCIDevice17Ev
(kernel) kxld[com.akasaka.Conexant878]: __ZN11IOPCIDevice22_RESERVEDIOPCIDevice18Ev
(kernel) kxld[com.akasaka.Conexant878]: __ZN11IOPCIDevice22_RESERVEDIOPCIDevice19Ev
(kernel) kxld[com.akasaka.Conexant878]: __ZN11IOPCIDevice22_RESERVEDIOPCIDevice20Ev
(kernel) kxld[com.akasaka.Conexant878]: __ZN11IOPCIDevice22_RESERVEDIOPCIDevice21Ev
(kernel) kxld[com.akasaka.Conexant878]: __ZN11IOPCIDevice24getDeviceMemoryWithIndexEj
(kernel) Can't load kext com.akasaka.Conexant878 - link failed.
(kernel) Failed to load executable for kext com.akasaka.Conexant878.
(kernel) Kext com.akasaka.Conexant878 failed to load (0xdc008016).
(kernel) Failed to load kext com.akasaka.Conexant878 (error 0xdc008016).
Failed to load /System/Library/Extensions/Conexant878.kext - (libkern/kext) link error.
Check library declarations for your kext with kextlibs(8).
Вывод kextlibs выглядит следующим образом:
For all architectures:
com.apple.iokit.IOPCIFamily = 2.9
com.apple.kpi.iokit = 13.4
com.apple.kpi.libkern = 13.4
For x86_64:
7 symbols not found in any library kext:
__ZN11IOPCIDevice24getDeviceMemoryWithIndexEj
__ZN11IOPCIDevice22_RESERVEDIOPCIDevice16Ev
__ZN11IOPCIDevice22_RESERVEDIOPCIDevice18Ev
__ZN11IOPCIDevice22_RESERVEDIOPCIDevice20Ev
__ZN11IOPCIDevice22_RESERVEDIOPCIDevice17Ev
__ZN11IOPCIDevice22_RESERVEDIOPCIDevice19Ev
__ZN11IOPCIDevice22_RESERVEDIOPCIDevice21Ev
Мой Info.plist содержит все библиотеки OSBundleLibraries, которые я мог бы счесть необходимыми в этом контексте, но это все равно не подходит:
...
<key>IOClass</key>
<string>ConexantTuner</string>
<key>OSBundleRequired</key>
<string>Local-Root</string>
<key>IOPCIMatch</key>
<string>0x036e109e</string>
<key>IOProviderClass</key>
<string>IOPCIDevice</string>
<key>IOKitPersonalities</key>
<dict/>
<key>OSBundleLibraries</key>
<dict>
<key>com.apple.iokit.IOPCIFamily</key>
<string>1.0.0b1</string>
<key>com.apple.kpi.mach</key>
<string>8.0</string>
<key>com.apple.kpi.unsupported</key>
<string>8.0</string>
<key>com.apple.kpi.iokit</key>
<string>8.0</string>
<key>com.apple.kpi.libkern</key>
<string>8.0</string>
<key>com.apple.kpi.bsd</key>
<string>8.0</string>
</dict>
</dict>
</plist>
Что еще я могу попытаться определить, от чего еще мне нужно зависеть, чтобы заставить это работать?
Заранее спасибо.
C++Filt вывод неразрешенных символов:
IOPCIDevice::getDeviceMemoryWithIndex(unsigned int)
IOPCIDevice::_RESERVEDIOPCIDevice16()
IOPCIDevice::_RESERVEDIOPCIDevice18()
IOPCIDevice::_RESERVEDIOPCIDevice20()
IOPCIDevice::_RESERVEDIOPCIDevice17()
IOPCIDevice::_RESERVEDIOPCIDevice19()
IOPCIDevice::_RESERVEDIOPCIDevice21()