Невозможно найти ссылки на символы для IOKit kext

Я подписался на это руководство на сайте разработчиков Apple.

При запуске kextlib он показывает 2 неопределенных символа, вот результат:

    sudo kextlibs -xml -undef IOKitTest1.kext/
    <key>OSBundleLibraries</key>
    <dict>
        <key>com.apple.kpi.iokit</key>
        <string>12.4</string>
        <key>com.apple.kpi.libkern</key>
        <string>12.4</string>
    </dict>

For x86_64:
    2 symbols not found in any library kext:
    __ZN9IOService15configureReportEP19IOReportChannelListjPvS2_
    __ZN9IOService12updateReportEP19IOReportChannelListjPvS2_

на бегу:

kextfind -dsym __ZN9IOService15configureReportEP19IOReportChannelListjPvS2_
nm -arch x86_64 /mach_kernel |grep __ZN9IOService15configureReportEP19IOReportChannelListjPvS2_

Я получаю 0 совпадений при передаче вывода в файл - я понимаю, что символы, которые я ищу, здесь даже не присутствуют. И даже если я их найду, я не знаю, как связать эти символы или найти соответствующие библиотеки для моего драйвера.

Любая помощь поможет. Я впервые работаю над драйверами IOKit, и, похоже, ни у кого нет этой ошибки.

Я использую OSX 10.8.4 и Xcode 5 DP5

Заранее спасибо !


person rkrishnasanka    schedule 30.08.2013    source источник


Ответы (1)


Давайте пропустим недостающие символы через фильтр c ++, чтобы распутать их:

$ echo __ZN9IOService15configureReportEP19IOReportChannelListjPvS2_ | c++filt 
IOService::configureReport(IOReportChannelList*, unsigned int, void*, void*)

$ echo __ZN9IOService12updateReportEP19IOReportChannelListjPvS2_ | c++filt
IOService::updateReport(IOReportChannelList*, unsigned int, void*, void*)

Похоже, что мы ищем методы IOService::configureReport и IOService::updateReport - предположительно для использования в vtable в вашем подклассе IOService.

Теперь эти методы не существуют в 10.8 или более ранних версиях, а 10.9 / Xcode5 все еще находятся в закрытой бета-версии, поэтому вы не можете обсуждать их на публичном форуме, подобном этому. Однако я подозреваю, что вы используете 10.9 SDK, и это может быть ошибкой в ​​коде предварительной версии. Убедитесь, что вы используете самую последнюю версию SDK (cough DP6 cough) и, если проблема все еще существует, (а) спросите на форуме бета-тестирования Apple и / или (б) отправьте отчет об ошибке в Apple и / или (c) отправьте (платный) запрос DTS, если это срочно.

person pmdj    schedule 01.09.2013