DriverKit 系统扩展可以在启动时匹配热插拔设备吗?

问题描述

我有一个 DriverKit 扩展可以很好地匹配 USB 音频设备,但是如果我在重启期间让设备保持插入状态,AppleUSBAudio 内核扩展会匹配它。

拔下并重新插入会加载我的 dex。

这是意料之中的事吗?所有的系统扩展都有这个缺点吗?我该如何补救?

解决方法

在 macOS 11 上,如果 Apple 的 kext 之一与您的设备匹配,并且它们的驱动程序位于“boot”或“sys”集合中(参见 man kmutil),通常情况下,它们的驱动程序将获胜与你的匹配,即使你的探测分数更高。

在 macOS 10.15 上,这应该取决于它们的 kext 是否在预链接的内核/kext 缓存中。第三方 kexts 也可以包含在这里,所以它至少更民主一点。但是,Dexts 不能在 kextcache 中。

我已就此问题提交了 Apple DTS TSI,他们已承认这是一个错误。我强烈建议您也将其作为错误提交,以增加修复的机会。

如果您的驱动程序没有设法抓住它,您应该能够通过 explicitly force resetting the device 从用户空间守护程序以一种相当丑陋的方式解决它。这将导致 USB 子系统重新枚举它,并重复 I/O Kit 匹配,此时您的 dext 有望成功!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...