1

这是今天新的。一段时间以来,它一直运行良好。

正常运行时,驱动程序会匹配 USB 设备的产品 ID 和供应商 ID,然后加载并运行。

它是一个 USB 视频适配器,因此在正常操作下,在登录之前会看到桌面的模糊图像,然后您会看到第二个屏幕,该屏幕可以正常使用显示首选项。

但就在今天,如果在启动时连接了加密狗,则驱动程序不会加载,USB 连接的显示器也不会显示图像。

如果我拔下加密狗,然后重新插入,它可以工作。

如果在启动过程中没有连接加密狗,然后在到达桌面后插入,它可以工作。

如果在启动期间连接了加密狗,然后我使用 kextutil 加载它,kextutil 报告成功但它不加载。

我推测这是匹配的问题,但不明白可能出了什么问题。

这是一个签名的驱动程序,现在在/Library/Extensions;以前它是未签名的,在 中/System/Library/Extensions,系统完整性保护被禁用。

产品中还有两个不是 USB 功能驱动程序的驱动程序。他们加载得很好。所有三个驱动程序共同创建一个虚拟帧缓冲区,然后显示它。

4

1 回答 1

1

这可能是由一堆不同的事情引起的。几点建议:

  1. 您是否已验证这一点::probe()并且::start()没有在您的驱动程序类中被调用?如果他们返回NULL/ false,那将导致所描述的行为。
  2. 当您的驱动程序无法为冷插拔设备加载时,IORegistry 中的情况是什么?您匹配的小块是否有任何客户端对象?
  3. 你排除了kext缓存问题吗?(例如,当操作系统重新生成 kext 缓存和预链接内核时是否有任何错误?)

发布您的Info.plist可能也有帮助 - 问题可能就在那里。

于 2017-11-19T13:16:55.437 回答