我应该使用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.IOServiceGetMatchingServices 在 Python3 下坏了?