2014-06-25 44 views
-1

我正在開發一個內核擴展,它處理每個套接字都在系統上構建,並在用戶空間等待以獲取來自用戶的確認以允許或拒絕該套接字。 我正在使用IOSleep應用我上面提到的等待,但它加載內核擴展時會出現此錯誤。在套接字過濾內核擴展中使用IOSleep

「下面的符號是沒有解決這個驅動: _IOSleep」

首先,我想知道我是正確有關使用IOSleep使等待? 如果不是,我應該如何應用期望的等待來覆蓋時間間隔,我需要獲得用戶關於允許還是拒絕特定套接字連接的確認?

在此先感謝您的任何有用的回覆。

回答

0

IOSleep在內核擴展中是非常好的。你看到的錯誤是因爲庫在加載時鏈接到kexts,而不是編譯時。

當您的代碼中需要鏈接新庫的函數時,必須在編譯後的二進制文件上調用kextlibs,以便找出需要添加到plist文件的內容。這在Generic Kernel Extension tutorial in the Mac Developer LibraryAdd Library Declarations section中有解釋,但在第一次後很容易忘記這麼做。

的基本步驟是:

  1. 構建您的內核擴展
  2. 運行在終端
  3. 命令kextlibs -xml MyKext.kext從上面的打印輸出替換您的KEXT的的Info.plist文件的<key>OSBundleLibraries</key><dict>...</dict>部分
  4. 重建你的內核擴展

當您使用kextload加載它時,它現在應該正確鏈接。