1

我正在编写一个 DriverKit dext 并且可以使用系统扩展框架激活它。我有 USB 的权利,即 com.apple.developer.driverkit设置为true com.apple.developer.driverkit.transport.usb已添加为字典但没有任何子值(它是空的)。

我期待在插入任何 USB 设备后被 dext 的 Start 方法调用,但我没有看到任何调用。

知道是否缺少任何步骤/配置吗?

4

1 回答 1

2

您还没有分享许多关键信息:

  • 您的机器上是否禁用了 SIP,或者您是否在签名证书/配置文件中启用了必要的权利?
  • 为什么您的 USB DriverKit 权利为空?Apple 通常会发布带有特定供应商 ID 或一组供应商 ID 的 USB 授权。
  • 您的 dext 激活(来自包装应用程序)肯定成功了吗?
  • 你收到任何崩溃报告吗?(参见 Console.app)
  • “插入任何USB 设备后”(强调我的)到底是什么意思?Info.plist 中你的 dext 的 IOKit 匹配字典是什么?您希望它匹配哪些设备?
  • 您的驱动程序的服务对象是否显示在 I/O 注册表中?(ioregIORegistryExplorer.app

这些是常见原因,但无论如何都要诊断问题 - 您是否查看过系统日志?具体来说,当某个 dext 导致无法加载时,通常会在日志中抱怨sysextdkextd

尝试这样的事情:

  • 卸载你的 dex
  • 重启
  • /Library/SystemExtensions不应有任何 dext 残留物。(在任何以 uuid 命名的子目录中)如果是,请尝试运行sudo kextcache --invalidate /,等到完成,然后再次重新启动。Zombie dexts 会导致重大问题。
  • 在终端窗口中启动log stream --info --predicate 'process == "kextd" || process == "sysextd" || processID == 0'(如果您也通过NSLog/登录,您可能希望将您的应用添加到谓词os_log
  • 启动您的应用程序,安装 dext
  • 检查日志是否显示任何相关内容
  • 插入您的设备
  • 检查日志是否显示任何相关内容

应该在那里看到一些有用的信息。如果您无法理解它们,请随时使用您获得的日志更新您的问题。

于 2020-05-29T11:57:41.233 回答