【问题标题】:Mac: load Mass Storage Driver Kext for testingMac:加载 Mass Storage Driver Kext 进行测试
【发布时间】:2012-08-26 14:17:11
【问题描述】:

我正在为 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 以便能够对其进行调试?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,这取决于设备匹配——我的 kext 被一个通用的击败了。幸运的是我的设备可以热插拔,所以 sudo cp'ing to /tmp 工作正常。我还需要修改驱动程序类的::probe(provider, score) 函数。具体来说,我在provider->getProperty() 中查找相关字段,然后提高分数并返回this,如果我找到了正确的设备(我使用供应商和产品标识来键入)。
    • @Inductiveload:您知道,您可以使用IOProbeScore 个性属性在 info.plist 中注册更高的匹配分数。这可能会使您的额外探测代码变得不必要。
    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多