Должен ли я использовать IOKit или DriverKIt (или HIDDriverKit) для написания драйвера для мультисенсорного устройства USB или Bluetooth в macOS? - PullRequest
1 голос
/ 07 мая 2020

Я планирую написать драйвер для мультисенсорного устройства USB или Bluetooth, похожего на Apple Magi c Трекпад или трекпад Logitech для Ma c.

Идея в том, что все приложения macOS могут использовать это мультитач-устройство. Поскольку недавно представленный DriverKit (или HIDDriverKit) должен быть связан с приложениями, следует ли мне по-прежнему использовать IOKit или DriverKit?

Спасибо.

1 Ответ

3 голосов
/ 07 мая 2020

DriverKit построен на базе IOKit - это просто еще один интерфейс к нему. Итак, я думаю, ваш вопрос действительно заключается в том, должен ли ваш драйвер быть реализован как:

  • Системное расширение DriverKit (dext)
  • Расширение ядра (kext)
  • Что-то else

В любом случае вы не избежите IOKit, потому что USB-устройства доступны только через IOKit, и стек HID тоже построен на нем.

Bluetooth

Насколько мне известно, интерфейсов API Bluetooth для использования с DriverKit нет, по крайней мере, пока. (Начиная с macOS 10.15.4)

Итак, если ваше устройство использует настраиваемый протокол Bluetooth, который необходимо с нуля превратить в источник событий HID, то я не думаю, что вы сможете использовать DriverKit , по крайней мере, не исключительно.

Если ваше устройство уже отображается в системе как HID-устройство, но вашему драйверу необходимо переписать отчеты HID, то я думаю, что его можно реализовать с помощью DriverKit - по крайней мере, это стоит изучить.

Реализация его как kext определенно сработает для всех случаев, проблема в том, что любые новые kexts будут иметь очень ограниченный срок хранения на этом этапе.

USB

Для USB все проще, есть прямые USB API DriverKit. Драйверы USB HID являются одним из хорошо поддерживаемых сценариев ios DriverKit. Поэтому вам определенно следует не использовать kext для реализации драйвера USB HID, нацеленного на macOS 10.15+. Фактически, если бы вы разработали USB HID kext, вашим пользователям периодически показывалось бы ужасное всплывающее окно с предупреждением.

«Что-то еще?»

Это подводит нас к «чему-то еще». категория: вы можете написать драйвер (почти) полностью в обычном пользовательском пространстве в качестве демона, используя пользовательские интерфейсы Bluetooth и USB, а затем внедрить созданные HID-события обратно в систему. Лучшим способом сделать это может стать драйвер DriverKit - так что у вас будет демон пользовательского пространства, выполняющий большую часть логики драйвера c, и небольшой драйвер DriverKit, создающий «виртуальное» HID-устройство, которое просто пересылает события, создаваемые демоном в стеке HID. Если вам нужна поддержка более старых версий ОС, ответственность за декст в этом подходе может взять на себя kext, при этом демону практически не нужно настраивать работу на всех версиях ОС.

Если ваш драйвер будет делать много сложной обработки необработанных входных данных, это может быть шагом вперед, поскольку реализация такого logi c в dext или kext не идеальна.

Чтобы сказать, какой подход лучше всего, я бы действительно нужно знать намного больше об устройстве (и это может выходить за рамки вопроса о переполнении стека…).

...