2012-08-31 33 views
2

我正在爲Mac編寫一個定製的大容量存儲內核擴展,從IOSCSIPeripheralDeviceType05邏輯單元驅動程序繼承而來。我已經編譯了一個.kext文件,它通過了kextutil -n -t ...,但我無法加載它進行測試。Mac:加載大容量存儲驅動器Kext進行測試

我在的.plist非零IOKitDebug場和GetDeviceConfiguration看起來是這樣的:

IOReturn 
com_MyCompany_driver_MyDriver::GetDeviceConfiguration(void) 
{ 
    IOLog("MyDriver overriding GetConfiguration\n"); 

    return super::GetDeviceConfiguration(); 
} 

然而,當我將其複製到/System/Library/Extensions/kextutil /System/Library/Extension/MyDriver.kext執行它,什麼都不會發生,並出現什麼在/var/log/system.log

如何加載這個.kext文件來調試它?

回答

2

首先,在開發它們時不要在/ SLE中添加擴展名。這是要求麻煩,因爲它可能會導致擴展程序自動加載。這可能會導致系統無法啓動。只需複製到,例如/tmp/並使用kextutil從那裏加載它。

其次,將一些調試輸出放在com_MyCompany_driver_MyDriver::init()中,因爲這是第一個會被調用的東西。

三,您的問題可能是設備匹配。如果設備在加載kext時已經與現有的驅動程序匹配,則不會考慮您的設備。如果您無法熱插拔設備,並且在加載您的設備之前無法卸載現有驅動程序,則可能需要安裝SLE中的kext才能在啓動時加載。如果您仍然遇到匹配問題,請發佈您想要匹配的設備的詳細信息(ioreg/IORegistryExplorer輸出)以及您的info.plist中匹配的字典。

+0

是的,這是下到設備匹配 - 我的kext被一個普通的毆打。幸運的是我的設備可以熱插拔,所以sudo cp'ing到'/ tmp'工作正常。我還需要修改我的驅動程序類的':: probe(provider,score)'函數。具體來說,我查看了'provider-> getProperty()'的相關字段,然後提高了分數並返回了'this',如果我找到了正確的設備(我使用了Vendor和Product Identification鍵)。 – Inductiveload

+0

@Inductiveload:只要你知道,你可以使用'IOProbeScore'個性屬性在info.plist中註冊更高的比賽分數。這可能會使您無需額外的探測代碼。 – pmdj

相關問題