我应该使用IOKit还是DriverKIt(或HIDDriverKit)为macOS中的USB或蓝牙多点触控设备编写驱动程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该使用IOKit还是DriverKIt(或HIDDriverKit)为macOS中的USB或蓝牙多点触控设备编写驱动程序?相关的知识,希望对你有一定的参考价值。

我计划编写类似于Apple Magic Trackpad或Mac的Logitech触控板的USB或蓝牙多点触控设备的驱动程序。

想法是所有macOS应用程序都可以使用此多点触控设备。由于新引入的DriverKit(或HIDDriverKit)将与应用程序捆绑在一起,因此我还是应该使用IOKit还是应该使用DriverKit?

谢谢。

答案

DriverKit是围绕IOKit构建的-它只是它的另一个接口。所以我想您的问题确实是您的驱动程序是否应实现为:

  • A DriverKit系统扩展(dext)
  • 内核扩展(kext)
  • 其他]
  • 据我所知,至少没有与DriverKit一起使用的蓝牙API。 (从macOS 10.15.4开始)

因此,如果您的设备使用了自定义的蓝牙协议,而该协议需要从头开始变成HID事件源,那么我认为您将无法使用DriverKit,至少不是唯一地可以使用。

如果您的设备已经作为HID设备出现在系统中,但是您的驱动程序需要重写HID报告,那么我认为使用DriverKit可能可以实现它-至少值得研究。

将它作为kext来实现肯定会在所有情况下都有效,麻烦的是任何新的kext在此阶段的保存期限都非常有限。

这将我们带到“其他”类别:您可以使用用户空间蓝牙API作为守护程序完全(几乎)在常规用户空间中编写驱动程序,然后将产生的HID事件注入到系统中。最好的方法可能最终是通过DriverKit驱动程序-因此,您将有一个执行大部分驱动程序逻辑的用户空间守护程序,以及一个小型DriverKit驱动程序,该驱动程序创建了一个“虚拟” HID设备,该设备仅会传递由HID设备产生的事件将守护程序放入HID堆栈。如果需要支持较早的OS版本,则kext可以由dext负责此方法,而守护进程实际上无需自定义即可在所有OS版本上运行。

要说出哪种方法最好,我真的需要对设备有更多了解(这可能超出堆栈溢出问题的范围……。)>

以上是关于我应该使用IOKit还是DriverKIt(或HIDDriverKit)为macOS中的USB或蓝牙多点触控设备编写驱动程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 IOKit 属性设置临时权利?

iokit.IOServiceGetMatchingServices 在 Python3 下坏了?

IOKit驱动程序已加载但未启动

IOKit:未收到来自与蓝牙连接的 DualShock 4 控制器的 HID 中断报告

带有 IOKit 的 USB 上的 OBEX

我应该在函数调用的最后一个参数之后添加一个逗号吗?