1

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 を実行しています

前もって感謝します !

4

1 に答える 1

3

不足しているシンボルを c++filt で実行してデマングルしてみましょう。

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

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

そのため、おそらく IOService サブクラスの vtable で使用するためのメソッドIOService::configureReportを探しているようです。IOService::updateReport

現在、これらのメソッドは 10.8 以前には存在せず、10.9/Xcode5 はまだクローズド ベータ版であるため、このようなパブリック フォーラムでそれらについて議論することはできません。ただし、10.9 SDK を使用していると思われます。これは、プレリリース コードのバグである可能性があります。最新の SDK (咳DP6) を実行していることを確認し、問題が解決しない場合は、(a) Apple のベータ フォーラムで質問する、および/または (b) Apple にバグ レポートを提出する、および/または (c) (有料) 緊急の場合は DTS リクエスト。

于 2013-09-01T12:35:36.630 に答える