我跟着this tutorial given on Apple's developer site。
在运行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
提前致谢!
答案 0 :(得分: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( cough DP6 cough ),如果问题仍然存在,(a)询问Apple的beta论坛和/或(b)向Apple提交错误报告和/或(c)在紧急情况下提交(付费)DTS请求。