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::configureReport,并且IOService::updateReport- 大概是在您的 IOService 子类中的 vtable 中使用。

现在,这些方法在 10.8 或更早版本中不存在,并且 10.9/Xcode5 仍处于封闭测试阶段,因此您不能在这样的公共论坛上讨论它们。但是,我怀疑您使用的是 10.9 SDK,这可能是预发布代码中的错误。确保您运行的是最新的 SDK(咳嗽DP6咳嗽),如果问题仍然存在,(a) 在 Apple 的 beta 论坛上提问和/或 (b) 向 Apple 提交错误报告和/或 (c) 提交(付费)紧急情况下的 DTS 请求。

于 2013-09-01T12:35:36.630 回答