Я пытаюсь написать драйвер для карты композитного видео захвата PCI для OSX.IOPCIDevice не связан при загрузке kext
Kext строит просто отлично, но когда я пытаюсь загрузить его, я получаю это:
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, я мог подумать о необходимости в этом контексте, но это по-прежнему не-go:
...
<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()
Проблема GetDeviceMemoryWithIndex исчезла, но остальная часть по-прежнему присутствует :( –
Очень странно. У вас есть какие-либо настраиваемые маршруты поиска заголовков или что-то в этом роде? Любые специальные флаги компоновщика, такие как скрытие символов? , ваш 'info.plist' тоже выглядит не совсем корректно. В частности, ваш словарь' IOKitPersonalities' пуст, но у вас есть несколько ключей соответствия IOKit в корне. Они почти наверняка должны быть в личности. хотя есть ошибки в ссылках. – pmdj
Есть ли индивидуальность для расширений PCI IOKit? –