Mac:加载海量存储驱动程序Kext进行测试

时间:2012-08-31 18:33:34

标签: macos driver device-driver iokit kernel-extension

我正在为Mac编写一个定制的大容量存储内核扩展,它是从IOSCSIPeripheralDeviceType05逻辑单元驱动程序创建的。我已经编译了.kext文件,它传递了kextutil -n -t ...,但我无法加载它进行测试。

我在.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以便能够调试它?

1 个答案:

答案 0 :(得分:2)

首先,在开发它们时不要在/ SLE中加入扩展名。这就是问题,因为它可能导致扩展自动加载。这可能导致系统无法启动。只需复制到,例如/tmp/并使用kextutil从那里加载。

其次,将一些调试输出放在com_MyCompany_driver_MyDriver::init()中,因为这是第一个被调用的东西。

第三,您的问题很可能是设备匹配。如果在加载kext时设备已经与现有驱动程序匹配,则不会考虑您的设备。如果您无法热插拔设备而在加载设备之前无法卸载现有驱动程序,则可能需要在SLE中安装kext才能在启动时加载。如果您仍然遇到匹配问题,请发布您尝试匹配的设备的一些详细信息(ioreg / IORegistryExplorer输出)以及info.plist中的匹配字典。