我有一个可以匹配 USB 音频设备的 DriverKit 扩展,但如果我在重新启动期间将设备插入,AppleUSBAudio
内核扩展会与之匹配。
拔出并重新插入加载我的 dext。
这是可以预料的吗?所有系统扩展都有这个缺点吗?我该如何补救?
我有一个可以匹配 USB 音频设备的 DriverKit 扩展,但如果我在重新启动期间将设备插入,AppleUSBAudio
内核扩展会与之匹配。
拔出并重新插入加载我的 dext。
这是可以预料的吗?所有系统扩展都有这个缺点吗?我该如何补救?
在 macOS 11 上,如果 Apple 的 kext 之一与您的设备匹配,并且它们的驱动程序位于“boot”或“sys”集合中(请参阅 参考资料man kmutil
),通常情况下,它们的驱动程序将赢得与您的匹配,即使您的驱动程序有更高的探测分数。
在 macOS 10.15 上,它应该取决于它们的 kext 是否在预链接的内核/kext 缓存中。第三方 kexts 也可以包含在这里,所以它至少更民主一点。但是,Dexts 不能在 kextcache 中。
我已经就这个问题提交了 Apple DTS TSI,他们已经承认这是一个错误。我强烈建议你将它作为一个错误提交,以增加它被修复的机会。
如果您的驱动程序没有设法抓住它,您应该能够通过显式强制从用户空间守护程序重置设备来以一种相当丑陋的方式解决它。这将导致它被 USB 子系统重新枚举,并重复 I/O Kit 匹配,此时您的 dext 希望能成功!