2

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

IOKitDebug我在 .plist 中有一个非零字段,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 以便能够对其进行调试?

4

1 回答 1

2

首先,不要在开发时将扩展放在 /SLE 中。这是自找麻烦,因为它会导致扩展程序自动加载。这可能会导致系统无法启动。只需复制到,例如/tmp/并使用kextutil从那里加载它。

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

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

于 2012-09-01T10:09:08.327 回答