2016-03-15 8 views
1

Я пытаюсь написать драйвер для карты композитного видео захвата 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() 

ответ

2

Похоже несоответствие между версией SDK вы строите против и OS X версии вы пытаетесь загрузить Kext на. В отличие от пользовательского пространства OS X установка «Цель развертывания» на минимальную версию OS X, поддерживаемую вашим драйвером, недостаточна. Вы также должны использовать версию OS X SDK, соответствующую самой старой поддерживаемой версии OS X, по этой причине зарезервированных виртуальных функций.

Так, например, возможно, вы строите с 10.10 или 10.11 SDK, но пытаетесь загрузить kext на 10.9. Это не сработает. Используйте Xcode 6.3.2 (новейшая версия, которая поставляется с 10.9 SDK), выберите 10.9 SDK и создайте с этим.

+0

Проблема GetDeviceMemoryWithIndex исчезла, но остальная часть по-прежнему присутствует :( –

+1

Очень странно. У вас есть какие-либо настраиваемые маршруты поиска заголовков или что-то в этом роде? Любые специальные флаги компоновщика, такие как скрытие символов? , ваш 'info.plist' тоже выглядит не совсем корректно. В частности, ваш словарь' IOKitPersonalities' пуст, но у вас есть несколько ключей соответствия IOKit в корне. Они почти наверняка должны быть в личности. хотя есть ошибки в ссылках. – pmdj

+0

Есть ли индивидуальность для расширений PCI IOKit? –

 Смежные вопросы

  • Нет связанных вопросов^_^