Создайте свой драйвер таким образом, чтобы процесс блокировал поток на подходящем системном вызове (read()
, ioctl()
), когда ISR пробуждает этот поток (поскольку для read()
стал доступен хотя бы один байт).
Затем убедитесь, что поток имеет максимально возможный приоритет и предпочтительно использует планировщик реального времени (SCHED_FIFO
или SCHED_RR
). На практике, если ваш процесс не запускается с привилегиями root, вам необходимо запустить службу с привилегиями root, настроить поток, а затем отбросить привилегии; или дать возможность двоичного исполняемого файла CAP_SYS_NICE
через, например, setcap pe=CAP_SYS_NICE binary
.
Технически возможно, что водитель также связался с расписанием, но я бы не стал этого делать. Все, что так критично ко времени, должно быть сделано вместо этого в ядре ISR.
Если вы хотите сделать это в пользовательском пространстве, потому что вы не хотите, чтобы ваш код был производным от ядра и, следовательно, под лицензией GPL, вы сами по себе.