2013-08-30 59 views
1

我跟着this tutorial given on Apple's developer site無法找到由於IOKit符號鏈接KEXT

在運行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提前

謝謝!

回答

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::configureReportIOService::updateReport - 大概是在你的IOService子類的虛函數表的使用。

現在,不要在10.8或更早的版本,和10.9存在這些方法/ Xcode5仍處於封閉測試,所以你可以不討論他們在一個公開論壇這樣。不過,我懷疑你使用的SDK 10.9,這可能是在預發行代碼中的錯誤。請確保您運行的是最新的SDK(咳嗽 DP6 咳嗽),如果問題仍然存在,(一)對蘋果的測試論壇問及/或(b)文件與蘋果和/或(一個bug報告c)在緊急情況下提交(支付的)DTS請求。