我计划为USB或蓝牙多点触摸设备编写驱动程序,类似于Apple Magic或用于Mac的Logitech触控板。
其想法是所有的macOS应用程序都可以使用这种多点触摸设备。由于新推出的DriverKit (或HIDDriverKit)将与应用程序捆绑在一起,我应该继续使用IOKit还是应该使用DriverKit?
谢谢。
发布于 2020-05-07 09:46:02
DriverKit是围绕IOKit构建的--它只是它的另一个接口。因此,我想你的问题是,你的司机是否应该被执行为:
(kext)
您也不会逃避IOKit,因为USB设备只能通过IOKit访问,而HID堆栈也是建立在它之上的。
蓝牙
据我所知,目前还没有适用于DriverKit的蓝牙API。(截至macOS 10.15.4)
因此,如果您的设备使用自定义的蓝牙协议,需要从零开始将其转换为HID事件源,那么我认为您将无法使用DriverKit,至少不能完全使用。
如果您的设备在系统中已经显示为HID设备,但是您的驱动程序需要重写HID报告,那么我认为使用DriverKit实现可能是可能的--至少值得研究。
实现它作为一个kext将肯定适用于所有情况,问题是,任何新的kexts将有一个非常有限的货架期在这个阶段。
USB
对于USB,它更简单,有直接的DriverKit USB。USB驱动程序是DriverKit支持良好的场景之一。因此,您绝对不应该使用kext来实现针对macOS 10.15+的USB驱动程序。事实上,如果您开发了一个users,您的用户将定期收到一个可怕的警告弹出。
“还有什么吗?”
这就引出了“其他东西”类别:您可以使用用户空间蓝牙和USB将驱动程序(几乎)完全作为守护进程在常规用户空间中编写,然后将生成的HID事件注入系统。这样做的最佳方法可能是通过一个DriverKit驱动程序--这样就可以让一个用户空间守护进程执行大多数驱动程序逻辑,并让一个小型DriverKit驱动程序创建一个“虚拟”HID设备,该设备只将守护进程产生的事件传送到HID堆栈中。如果您需要支持旧版本的操作系统,这种方法中的dext可以由kext承担,守护进程几乎不需要自定义就可以在所有OS版本上运行。
如果您的驱动程序将对原始输入数据执行许多复杂的处理,这可能是前进的方向,因为在dext或kext中实现这样的逻辑并不理想。
要说哪种方法最好,我真的需要更多地了解这个设备(这可能超出堆栈溢出问题…的范围)。。
https://stackoverflow.com/questions/61648497
复制相似问题